Field3D
MIPUtil.h File Reference

Contains MIP-related utility functions. More...

#include <vector>
#include <boost/thread/thread.hpp>
#include <boost/thread/mutex.hpp>
#include "Resample.h"
#include "SparseField.h"
#include "Types.h"
#include "ns.h"

Go to the source code of this file.

Classes

struct  detail::ComputationType< T >
 Used to delegate the choice of bit depth to process at. More...
 
struct  detail::ComputationType< Field3D::half >
 Specialization for half float. More...
 
struct  detail::MIPSeparableThreadOp< Field_T, FilterOp_T >
 

Namespaces

 detail
 

Functions

FieldMapping::Ptr detail::adjustedMIPFieldMapping (const FieldMapping::Ptr baseMapping, const V3i &baseRes, const Box3i &extents, const size_t level)
 
template<typename Data_T >
bool detail::checkInputEmpty (const SparseField< Data_T > &src, const SparseField< Data_T > &tgt, const Box3i &tgtBox, const float support, const size_t dim)
 
template<typename Field_T >
bool detail::checkInputEmpty (const Field_T &src, const Field_T &tgt, const Box3i &tgtBox, const float support, const size_t dim)
 Fallback version always returns false. More...
 
template<typename MIPField_T , typename Filter_T >
FIELD3D_NAMESPACE_OPEN MIPField_T::Ptr makeMIP (const typename MIPField_T::NestedType &base, const int minSize, const size_t numThreads)
 Constructs a MIP representation of the given field. More...
 
template<typename MIPField_T , typename Filter_T >
MIPField_T::Ptr makeMIP (const typename MIPField_T::NestedType &base, const int minSize, const size_t numThreads)
 Constructs a MIP representation of the given field. More...
 
template<typename Field_T , typename FilterOp_T >
void detail::mipResample (const Field_T &base, const Field_T &src, Field_T &tgt, const size_t level, const FilterOp_T &filterOp, const size_t numThreads)
 
V3i detail::mipResolution (const V3i &baseRes, const size_t level)
 
template<typename Field_T , typename FilterOp_T >
void detail::mipSeparable (const Field_T &src, Field_T &tgt, const V3i &oldRes, const V3i &newRes, const size_t level, const FilterOp_T &filterOp, const size_t dim, const size_t numThreads)
 Threaded implementation of separable MIP filtering. More...
 
template<typename Data_T >
size_t detail::threadingBlockSize (const DenseField< Data_T > &)
 Constant size for all dense fields. More...
 
template<typename Data_T >
size_t detail::threadingBlockSize (const SparseField< Data_T > &f)
 Use block size for sparse fields. More...
 

Detailed Description

Contains MIP-related utility functions.

Definition in file MIPUtil.h.

Function Documentation

template<typename MIPField_T , typename Filter_T >
FIELD3D_NAMESPACE_OPEN MIPField_T::Ptr makeMIP ( const typename MIPField_T::NestedType &  base,
const int  minSize,
const size_t  numThreads 
)

Constructs a MIP representation of the given field.

Definition at line 408 of file MIPUtil.h.

References FIELD3D_NAMESPACE_HEADER_CLOSE, and detail::mipResample().

410 {
411  using namespace Field3D::detail;
412 
413  typedef typename MIPField_T::value_type Data_T;
414  typedef typename MIPField_T::NestedType Src_T;
415  typedef typename Src_T::Ptr SrcPtr;
416  typedef typename MIPField_T::Ptr MIPPtr;
417  typedef std::vector<typename Src_T::Ptr> SrcVec;
418 
419  if (base.extents() != base.dataWindow()) {
420  return MIPPtr();
421  }
422 
423  // Initialize output vector with base resolution
424  SrcVec result;
425  result.push_back(field_dynamic_cast<Src_T>(base.clone()));
426 
427  // Iteration variables
428  V3i res = base.extents().size() + V3i(1);
429 
430  // Loop until minimum size is found
431  size_t level = 1;
432  while ((res.x > minSize || res.y > minSize || res.z > minSize) &&
433  (res.x > 1 && res.y > 1 && res.z > 1)) {
434  // Perform filtering
435  SrcPtr nextField(new Src_T);
436  mipResample(base, *result.back(), *nextField, level,
437  Filter_T(), numThreads);
438  // Add to vector of filtered fields
439  result.push_back(nextField);
440  // Set up for next iteration
441  res = nextField->dataWindow().size() + V3i(1);
442  level++;
443  }
444 
445  MIPPtr mipField(new MIPField_T);
446  mipField->setup(result);
447  mipField->name = base.name;
448  mipField->attribute = base.attribute;
449  mipField->copyMetadata(base);
450 
451  return mipField;
452 }
Imath::V3i V3i
Definition: SpiMathLib.h:71
void mipResample(const Field_T &base, const Field_T &src, Field_T &tgt, const size_t level, const FilterOp_T &filterOp, const size_t numThreads)
Definition: MIPUtil.h:359
template<typename MIPField_T , typename Filter_T >
MIPField_T::Ptr makeMIP ( const typename MIPField_T::NestedType &  base,
const int  minSize,
const size_t  numThreads 
)

Constructs a MIP representation of the given field.

Definition at line 408 of file MIPUtil.h.

References FIELD3D_NAMESPACE_HEADER_CLOSE, and detail::mipResample().

410 {
411  using namespace Field3D::detail;
412 
413  typedef typename MIPField_T::value_type Data_T;
414  typedef typename MIPField_T::NestedType Src_T;
415  typedef typename Src_T::Ptr SrcPtr;
416  typedef typename MIPField_T::Ptr MIPPtr;
417  typedef std::vector<typename Src_T::Ptr> SrcVec;
418 
419  if (base.extents() != base.dataWindow()) {
420  return MIPPtr();
421  }
422 
423  // Initialize output vector with base resolution
424  SrcVec result;
425  result.push_back(field_dynamic_cast<Src_T>(base.clone()));
426 
427  // Iteration variables
428  V3i res = base.extents().size() + V3i(1);
429 
430  // Loop until minimum size is found
431  size_t level = 1;
432  while ((res.x > minSize || res.y > minSize || res.z > minSize) &&
433  (res.x > 1 && res.y > 1 && res.z > 1)) {
434  // Perform filtering
435  SrcPtr nextField(new Src_T);
436  mipResample(base, *result.back(), *nextField, level,
437  Filter_T(), numThreads);
438  // Add to vector of filtered fields
439  result.push_back(nextField);
440  // Set up for next iteration
441  res = nextField->dataWindow().size() + V3i(1);
442  level++;
443  }
444 
445  MIPPtr mipField(new MIPField_T);
446  mipField->setup(result);
447  mipField->name = base.name;
448  mipField->attribute = base.attribute;
449  mipField->copyMetadata(base);
450 
451  return mipField;
452 }
Imath::V3i V3i
Definition: SpiMathLib.h:71
void mipResample(const Field_T &base, const Field_T &src, Field_T &tgt, const size_t level, const FilterOp_T &filterOp, const size_t numThreads)
Definition: MIPUtil.h:359