28 #include <type_traits>
46 class PimpleImageBase;
119 Image(
const std::vector< unsigned int > &size,
PixelIDValueEnum valueEnum,
unsigned int numberOfComponents = 0 );
139 template <
typename TImageType>
141 :
Image( image.GetPointer() )
144 template <
typename TImageType>
146 : m_PimpleImage( nullptr )
149 "invalid pixel type" );
150 this->InternalInitialization<ImageTypeToPixelIDValue<TImageType>::Result, TImageType::ImageDimension>( image );
182 std::string GetPixelIDTypeAsString( )
const;
191 unsigned int GetDimension( )
const;
199 unsigned int GetNumberOfComponentsPerPixel( )
const;
209 uint64_t GetNumberOfPixels( )
const;
215 unsigned int GetSizeOfPixelComponent( )
const;
220 std::vector< double > GetOrigin( )
const;
221 void SetOrigin(
const std::vector< double > &origin );
230 std::vector< double > GetSpacing( )
const;
231 void SetSpacing(
const std::vector< double > &spacing );
241 std::vector< double > GetDirection()
const;
242 void SetDirection (
const std::vector< double > &direction );
246 std::vector< double > TransformIndexToPhysicalPoint(
const std::vector< int64_t > &index )
const;
249 std::vector< int64_t > TransformPhysicalPointToIndex(
const std::vector< double >& point )
const;
252 std::vector< double > TransformPhysicalPointToContinuousIndex(
const std::vector< double >& point )
const;
255 std::vector< double > TransformContinuousIndexToPhysicalPoint(
const std::vector< double > &index)
const;
260 std::vector< unsigned int > GetSize( )
const;
263 unsigned int GetWidth( )
const;
266 unsigned int GetHeight( )
const;
270 unsigned int GetDepth( )
const;
283 void CopyInformation(
const Image &srcImage );
291 std::vector<std::string> GetMetaDataKeys( )
const;
295 bool HasMetaDataKey(
const std::string &key )
const;
305 std::string GetMetaData(
const std::string &key )
const;
311 void SetMetaData(
const std::string &key,
const std::string &value);
318 bool EraseMetaData(
const std::string &key );
320 std::string ToString( )
const;
337 int8_t GetPixelAsInt8(
const std::vector<uint32_t> &idx)
const;
338 uint8_t GetPixelAsUInt8(
const std::vector<uint32_t> &idx)
const;
339 int16_t GetPixelAsInt16(
const std::vector<uint32_t> &idx )
const;
340 uint16_t GetPixelAsUInt16(
const std::vector<uint32_t> &idx )
const;
341 int32_t GetPixelAsInt32(
const std::vector<uint32_t> &idx )
const;
342 uint32_t GetPixelAsUInt32(
const std::vector<uint32_t> &idx )
const;
343 int64_t GetPixelAsInt64(
const std::vector<uint32_t> &idx )
const;
344 uint64_t GetPixelAsUInt64(
const std::vector<uint32_t> &idx )
const;
345 float GetPixelAsFloat(
const std::vector<uint32_t> &idx )
const;
346 double GetPixelAsDouble(
const std::vector<uint32_t> &idx )
const;
348 std::vector<int8_t> GetPixelAsVectorInt8(
const std::vector<uint32_t> &idx)
const;
349 std::vector<uint8_t> GetPixelAsVectorUInt8(
const std::vector<uint32_t> &idx)
const;
350 std::vector<int16_t> GetPixelAsVectorInt16(
const std::vector<uint32_t> &idx )
const;
351 std::vector<uint16_t> GetPixelAsVectorUInt16(
const std::vector<uint32_t> &idx )
const;
352 std::vector<int32_t> GetPixelAsVectorInt32(
const std::vector<uint32_t> &idx )
const;
353 std::vector<uint32_t> GetPixelAsVectorUInt32(
const std::vector<uint32_t> &idx )
const;
354 std::vector<int64_t> GetPixelAsVectorInt64(
const std::vector<uint32_t> &idx )
const;
355 std::vector<uint64_t> GetPixelAsVectorUInt64(
const std::vector<uint32_t> &idx )
const;
356 std::vector<float> GetPixelAsVectorFloat32(
const std::vector<uint32_t> &idx )
const;
357 std::vector<double> GetPixelAsVectorFloat64(
const std::vector<uint32_t> &idx )
const;
359 std::complex<float> GetPixelAsComplexFloat32(
const std::vector<uint32_t> &idx )
const;
360 std::complex<double> GetPixelAsComplexFloat64(
const std::vector<uint32_t> &idx )
const;
379 void SetPixelAsInt8(
const std::vector<uint32_t> &idx,
int8_t v );
380 void SetPixelAsUInt8(
const std::vector<uint32_t> &idx,
uint8_t v );
381 void SetPixelAsInt16(
const std::vector<uint32_t> &idx,
int16_t v );
382 void SetPixelAsUInt16(
const std::vector<uint32_t> &idx,
uint16_t v );
383 void SetPixelAsInt32(
const std::vector<uint32_t> &idx,
int32_t v );
384 void SetPixelAsUInt32(
const std::vector<uint32_t> &idx,
uint32_t v );
385 void SetPixelAsInt64(
const std::vector<uint32_t> &idx,
int64_t v );
386 void SetPixelAsUInt64(
const std::vector<uint32_t> &idx,
uint64_t v );
387 void SetPixelAsFloat(
const std::vector<uint32_t> &idx,
float v );
388 void SetPixelAsDouble(
const std::vector<uint32_t> &idx,
double v );
390 void SetPixelAsVectorInt8(
const std::vector<uint32_t> &idx,
const std::vector<int8_t> &v );
391 void SetPixelAsVectorUInt8(
const std::vector<uint32_t> &idx,
const std::vector<uint8_t> &v );
392 void SetPixelAsVectorInt16(
const std::vector<uint32_t> &idx,
const std::vector<int16_t> &v );
393 void SetPixelAsVectorUInt16(
const std::vector<uint32_t> &idx,
const std::vector<uint16_t> &v );
394 void SetPixelAsVectorInt32(
const std::vector<uint32_t> &idx,
const std::vector<int32_t> &v );
395 void SetPixelAsVectorUInt32(
const std::vector<uint32_t> &idx,
const std::vector<uint32_t> &v );
396 void SetPixelAsVectorInt64(
const std::vector<uint32_t> &idx,
const std::vector<int64_t> &v );
397 void SetPixelAsVectorUInt64(
const std::vector<uint32_t> &idx,
const std::vector<uint64_t> &v );
398 void SetPixelAsVectorFloat32(
const std::vector<uint32_t> &idx,
const std::vector<float> &v );
399 void SetPixelAsVectorFloat64(
const std::vector<uint32_t> &idx,
const std::vector<double> &v );
401 void SetPixelAsComplexFloat32(
const std::vector<uint32_t> &idx,
const std::complex<float> v );
402 void SetPixelAsComplexFloat64(
const std::vector<uint32_t> &idx,
const std::complex<double> v );
432 int8_t *GetBufferAsInt8( );
440 float *GetBufferAsFloat( );
441 double *GetBufferAsDouble( );
442 void *GetBufferAsVoid();
444 const int8_t *GetBufferAsInt8( )
const;
445 const uint8_t *GetBufferAsUInt8( )
const;
446 const int16_t *GetBufferAsInt16( )
const;
447 const uint16_t *GetBufferAsUInt16( )
const;
448 const int32_t *GetBufferAsInt32( )
const;
449 const uint32_t *GetBufferAsUInt32( )
const;
450 const int64_t *GetBufferAsInt64( )
const;
451 const uint64_t *GetBufferAsUInt64( )
const;
452 const float *GetBufferAsFloat( )
const;
453 const double *GetBufferAsDouble( )
const;
454 const void *GetBufferAsVoid()
const;
468 bool IsUnique( )
const;
478 void Allocate (
const std::vector<unsigned int > &size,
PixelIDValueEnum valueEnum,
unsigned int numberOfComponents );
487 template<
class TImageType>
488 typename std::enable_if<IsBasic<TImageType>::Value>::type
489 AllocateInternal (
const std::vector<unsigned int > &size,
unsigned int numberOfComponents );
491 template<
class TImageType>
492 typename std::enable_if<IsVector<TImageType>::Value>::type
493 AllocateInternal (
const std::vector<unsigned int > &size,
unsigned int numberOfComponents );
495 template<
class TImageType>
496 typename std::enable_if<IsLabel<TImageType>::Value>::type
497 AllocateInternal (
const std::vector<unsigned int > &size,
unsigned int numberOfComponents );
511 template <
int VPixelIDValue,
unsigned int VImageDimension>
513 VPixelIDValue>::Result,
514 VImageDimension>::ImageType *i );
523 template<
int VPixelIDValue,
typename TImageType>
524 typename std::enable_if<!std::is_same<TImageType, void>::value>::type
525 ConditionalInternalInitialization( TImageType *i);
527 template<
int VPixelIDValue,
typename TImageType>
528 typename std::enable_if<std::is_same<TImageType, void>::value>::type
535 template <
class TMemberFunctionPo
inter >
538 using ObjectType = typename ::detail::FunctionTraits<TMemberFunctionPointer>::ClassType;
540 template<
typename TImageType >
541 TMemberFunctionPointer operator() ( )
const
543 return &ObjectType::template AllocateInternal< TImageType >;