otb::StreamingTraits< TImage > Class Template Reference

This class is a helper class for terminal streaming filter implementation. More...

#include <otbStreamingTraits.h>

Collaboration diagram for otb::StreamingTraits< TImage >:

Collaboration graph
[legend]

List of all members.

Public Types

typedef StreamingTraits Self
typedef TImage ImageType
typedef ImageType::Pointer ImagePointerType
typedef ImageType::RegionType RegionType
typedef
ImageType::InternalPixelType 
PixelType
typedef StreamingMode StreamingModeType
typedef
itk::ImageRegionSplitter
< itkGetStaticConstMacro(ImageDimension)> 
SplitterType
typedef
itk::InterpolateImageFunction
< TImage, double > 
InterpolationType
typedef
itk::BSplineInterpolateImageFunction
< TImage, double > 
BSplineInterpolationType
typedef
itk::LinearInterpolateImageFunction
< TImage, double > 
LinearInterpolationType
typedef
itk::NearestNeighborInterpolateImageFunction
< TImage, double > 
NearestNeighborInterpolationType
typedef
WindowedSincInterpolateImageGaussianFunction
< ImageType > 
GaussianInterpolationType
typedef
WindowedSincInterpolateImageCosineFunction
< ImageType > 
CosineInterpolationType
typedef
WindowedSincInterpolateImageHammingFunction
< ImageType > 
HammingInterpolationType
typedef
WindowedSincInterpolateImageWelchFunction
< ImageType > 
WelchInterpolationType
typedef
WindowedSincInterpolateImageLanczosFunction
< ImageType > 
LanczosInterpolationType
typedef
WindowedSincInterpolateImageBlackmanFunction
< ImageType > 
BlackmanInterpolationType
typedef
otb::ProlateInterpolateImageFunction
< ImageType > 
ProlateInterpolationType

Static Public Member Functions

static unsigned long CalculateNumberOfStreamDivisions (const TImage *image, RegionType region, SplitterType *splitter, StreamingModeType mode, unsigned long numberOfStreamDivision, unsigned long bufferMemorySize, unsigned long bufferNumberOfLinesDivisions)
static unsigned int CalculateNeededRadiusForInterpolator (const InterpolationType *interpolator)
static std::string GetMethodUseToCalculateNumberOfStreamDivisions (StreamingModeType mode)

Static Public Attributes

static const unsigned int ImageDimension = ImageType::ImageDimension


Detailed Description

template<class TImage>
class otb::StreamingTraits< TImage >

This class is a helper class for terminal streaming filter implementation.

See also:
StreamingImageFileWriter

StreamingStatisticsImageFilter

Definition at line 60 of file otbStreamingTraits.h.


Member Typedef Documentation

template<class TImage>
typedef StreamingTraits otb::StreamingTraits< TImage >::Self

Standard class typedefs.

Definition at line 64 of file otbStreamingTraits.h.


Member Function Documentation

template<class TImage>
unsigned long otb::StreamingTraits< TImage >::CalculateNumberOfStreamDivisions ( const TImage *  image,
RegionType  region,
SplitterType splitter,
StreamingModeType  mode,
unsigned long  numberOfStreamDivision,
unsigned long  bufferMemorySize,
unsigned long  bufferNumberOfLinesDivisions 
) [inline, static]

This method computes the number of streaming divisions, based on the streaming mode and the image attributes. The last three parameters are ignored if the mode does not need them.

Parameters:
image The image to stream,
region the region to stream,
splitter the splitter used for the division,
mode the streaming mode,
numberOfStreamDivision the number of stream division if streaming mode is SET_NUMBER_OF_STREAM_DIVISIONS,
bufferMemorySize the buffer memory size in bytes if streaming mode is SET_BUFFER_MEMORY_SIZE,
bufferNumberOfLinesDivisions the buffer number of lines division if the streaming mode is SET_BUFFER_NUMBER_OF_LINES.
Returns:
The number of streaming divisions.

In tiling streaming mode, we keep the number of divisions calculed by splitter

Definition at line 36 of file otbStreamingTraits.txx.

References itk::ImageRegionSplitter< VImageDimension >::GetNumberOfSplits().

00043 {
00044   unsigned long numDivisions(0);
00045 
00046   switch (mode)
00047     {
00048     case SET_TILING_WITH_SET_NUMBER_OF_STREAM_DIVISIONS: // Just like SET_AUTOMATIC_NUMBER_OF_STREAM_DIVISIONS
00049     case SET_NUMBER_OF_STREAM_DIVISIONS:
00050       {
00051       numDivisions = numberOfStreamDivision;
00052       }
00053       break;
00054     case SET_BUFFER_MEMORY_SIZE:
00055       {
00056       const unsigned long bufferMemorySizeOctet = bufferMemorySize / 8;
00057       unsigned long       numberColumnsOfRegion = region.GetSize()[0]; // X dimension
00058       const unsigned long sizeLine = numberColumnsOfRegion * \
00059                                      image->GetNumberOfComponentsPerPixel() * \
00060                                      sizeof(PixelType);
00061       unsigned long regionSize = region.GetSize()[1] * sizeLine;
00062       otbMsgDevMacro(<< "image->GetNumberOfComponentsPerPixel()   = " << image->GetNumberOfComponentsPerPixel());
00063       otbMsgDevMacro(<< "sizeof(PixelType)                        = " << sizeof(PixelType));
00064       otbMsgDevMacro(<< "numberColumnsOfRegion                    = " << numberColumnsOfRegion);
00065       otbMsgDevMacro(<< "sizeLine                                 = " << sizeLine);
00066       otbMsgDevMacro(<< "regionSize                               = " << regionSize);
00067       otbMsgDevMacro(<< "BufferMemorySize                         = " << bufferMemorySize);
00068       otbMsgDevMacro(<< "bufferMemorySizeOctet                    = " << bufferMemorySizeOctet);
00069 
00070       //Active streaming
00071       if (regionSize > bufferMemorySizeOctet)
00072         {
00073         //The regionSize must be at list equal to the sizeLine
00074         if (regionSize < sizeLine)
00075           {
00076           otbMsgDevMacro(<< "Force buffer size.");
00077           regionSize = sizeLine;
00078           }
00079         //Calculate NumberOfStreamDivisions
00080         numDivisions = static_cast<unsigned long>(
00081           vcl_ceil(static_cast<double>(regionSize) / static_cast<double>(bufferMemorySizeOctet))
00082           );
00083         }
00084       else
00085         {
00086         //Non streaming
00087         numDivisions = 1;
00088         }
00089 
00090       }
00091       break;
00092     case SET_BUFFER_NUMBER_OF_LINES:
00093       {
00094       if (bufferNumberOfLinesDivisions < 1)
00095         {
00096         itkGenericExceptionMacro(<< "Buffer number of lines division must be greater than 0 !");
00097         }
00098       /* Calculate number of split */
00099       unsigned long numberLinesOfRegion = region.GetSize()[1]; // Y dimension
00100       if (numberLinesOfRegion > bufferNumberOfLinesDivisions)
00101         {
00102         numDivisions =
00103           static_cast<unsigned long>(vcl_ceil(static_cast<double>(numberLinesOfRegion) /
00104                                               static_cast<double>(bufferNumberOfLinesDivisions)));
00105         }
00106       else
00107         {
00108         //Non streaming
00109         numDivisions = 1;
00110         }
00111       }
00112       break;
00113     case SET_TILING_WITH_SET_AUTOMATIC_NUMBER_OF_STREAM_DIVISIONS: // Just like SET_AUTOMATIC_NUMBER_OF_STREAM_DIVISIONS
00114     case SET_AUTOMATIC_NUMBER_OF_STREAM_DIVISIONS:
00115       {
00116       typedef otb::ConfigurationFile ConfigurationType;
00117       ConfigurationType::Pointer conf = ConfigurationType::GetInstance();
00118       std::streamoff             streamMaxSizeBufferForStreamingBytes;
00119       std::streamoff             streamImageSizeToActivateStreamingBytes;
00120       try
00121         {
00122         streamMaxSizeBufferForStreamingBytes = conf->GetParameter<std::streamoff>(
00123           "OTB_STREAM_MAX_SIZE_BUFFER_FOR_STREAMING");
00124         streamImageSizeToActivateStreamingBytes = conf->GetParameter<std::streamoff>(
00125           "OTB_STREAM_IMAGE_SIZE_TO_ACTIVATE_STREAMING");
00126         }
00127       catch(...)
00128         {
00129         // We should never have to go here if the configuration file is
00130         // correct and found. In case it is not fallback on the cmake
00131         // defined constants.
00132         streamMaxSizeBufferForStreamingBytes = OTB_STREAM_MAX_SIZE_BUFFER_FOR_STREAMING;
00133         streamImageSizeToActivateStreamingBytes = OTB_STREAM_IMAGE_SIZE_TO_ACTIVATE_STREAMING;
00134         }
00135 
00136       //Convert in octet unit
00137       std::streamoff       streamMaxSizeBufferForStreaming = streamMaxSizeBufferForStreamingBytes / 8;
00138       const std::streamoff streamImageSizeToActivateStreaming = streamImageSizeToActivateStreamingBytes / 8;
00139 
00140       std::streamoff       numberColumnsOfRegion = region.GetSize()[0]; // X dimension
00141       const std::streamoff sizeLine = static_cast<std::streamoff>(numberColumnsOfRegion) * \
00142                                       static_cast<std::streamoff>(image->GetNumberOfComponentsPerPixel()) * \
00143                                       static_cast<std::streamoff>(sizeof(PixelType));
00144       const std::streamoff regionSize = region.GetSize()[1] * sizeLine;
00145       otbMsgDevMacro(<< "streamImageSizeToActivateStreaming in Bytes  = " << streamImageSizeToActivateStreamingBytes);
00146       otbMsgDevMacro(<< "streamMaxSizeBufferForStreaming in Bytes     = " << streamMaxSizeBufferForStreamingBytes);
00147       otbMsgDevMacro(<< "streamImageSizeToActivateStreaming           = " << streamImageSizeToActivateStreaming);
00148       otbMsgDevMacro(<< "streamMaxSizeBufferForStreaming              = " << streamMaxSizeBufferForStreaming);
00149       otbMsgDevMacro(<< "image->GetNumberOfComponentsPerPixel()   = " << image->GetNumberOfComponentsPerPixel());
00150       otbMsgDevMacro(<< "sizeof(PixelType)                 = " << sizeof(PixelType));
00151       otbMsgDevMacro(<< "numberColumnsOfRegion                        = " << numberColumnsOfRegion);
00152       otbMsgDevMacro(<< "sizeLine                                     = " << sizeLine);
00153       otbMsgDevMacro(<< "regionSize                                   = " << regionSize);
00154 
00155       //Active streaming
00156       if (regionSize > streamImageSizeToActivateStreaming)
00157         {
00158         //On s'assure que la taille du bandeau fait au moins une ligne de l'image si pas TILING
00159         if ((mode != SET_TILING_WITH_SET_AUTOMATIC_NUMBER_OF_STREAM_DIVISIONS)
00160             && (streamMaxSizeBufferForStreaming < sizeLine))
00161           {
00162           otbMsgDevMacro(<< "Force buffer size.");
00163           streamMaxSizeBufferForStreaming = sizeLine;
00164           }
00165         otbMsgDevMacro(<< "Buffer size : " << streamMaxSizeBufferForStreaming);
00166         //Calculate NumberOfStreamDivisions
00167         numDivisions =
00168           static_cast<unsigned long>(vcl_ceil(static_cast<double>(regionSize) /
00169                                               static_cast<double>(streamMaxSizeBufferForStreaming)));
00170         }
00171       else
00172         {
00173         //Non streaming
00174         numDivisions = 1;
00175         }
00176 
00177       }
00178       break;
00179     default:
00180       itkGenericExceptionMacro(<< "Method use to calculate number of stream divisions is not set !");
00181       break;
00182     }
00183   if (numDivisions == 0) numDivisions = 1;
00184   otbMsgDevMacro(<< " -> Resume : method : " << mode << "\n -> Number of divisions = " << numDivisions);
00185 
00186   // Compute real number of splitter
00187   unsigned int numDivisionsFromSplitter = splitter->GetNumberOfSplits(region, numDivisions);
00188 
00190   if ((numDivisionsFromSplitter < numDivisions)
00191       || (mode == SET_TILING_WITH_SET_NUMBER_OF_STREAM_DIVISIONS)
00192       || (mode == SET_TILING_WITH_SET_AUTOMATIC_NUMBER_OF_STREAM_DIVISIONS)
00193       )
00194     {
00195     numDivisions = numDivisionsFromSplitter;
00196     }
00197 
00198   return (numDivisions);
00199 }


Member Data Documentation

template<class TImage>
const unsigned int otb::StreamingTraits< TImage >::ImageDimension = ImageType::ImageDimension [static]

Dimension of input image.

Definition at line 75 of file otbStreamingTraits.h.


The documentation for this class was generated from the following files:

Generated at Wed Jul 14 15:30:49 2010 for OTB with doxygen 1.5.6