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

FIELD3D_API 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 > &, const Box3i &tgtBox, const float support, const size_t dim)
 
template<typename Field_T >
bool detail::checkInputEmpty (const Field_T &, const Field_T &, const Box3i &, const float, const size_t)
 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)
 
FIELD3D_API 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 406 of file MIPUtil.h.

References FIELD3D_NAMESPACE_HEADER_CLOSE, and detail::mipResample().

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

References FIELD3D_NAMESPACE_HEADER_CLOSE, and detail::mipResample().

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