#include <otbStreamingTraits.h>

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 |
Definition at line 60 of file otbStreamingTraits.h.
| typedef StreamingTraits otb::StreamingTraits< TImage >::Self |
Standard class typedefs.
Definition at line 64 of file otbStreamingTraits.h.
| 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.
| 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. |
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 }
const unsigned int otb::StreamingTraits< TImage >::ImageDimension = ImageType::ImageDimension [static] |
Dimension of input image.
Definition at line 75 of file otbStreamingTraits.h.