29 #include <type_traits>
47 class PimpleImageBase;
120 Image ProxyForInPlaceOperation();
141 Image(
const std::vector< unsigned int > &size,
PixelIDValueEnum valueEnum,
unsigned int numberOfComponents = 0 );
161 template <
typename TImageType>
163 :
Image( image.GetPointer() )
166 template <
typename TImageType>
171 const unsigned int dimension = TImageType::ImageDimension;
173 static_assert(type !=
sitkUnknown,
"invalid pixel type");
174 static_assert(dimension >= 2 && dimension <=
SITK_MAX_DIMENSION,
"Unsupported image dimension.");
176 this->InternalInitialization(type, dimension, image);
208 std::string GetPixelIDTypeAsString( )
const;
217 unsigned int GetDimension( )
const;
225 unsigned int GetNumberOfComponentsPerPixel( )
const;
235 uint64_t GetNumberOfPixels( )
const;
241 unsigned int GetSizeOfPixelComponent( )
const;
246 std::vector< double > GetOrigin( )
const;
247 void SetOrigin(
const std::vector< double > &origin );
256 std::vector< double > GetSpacing( )
const;
257 void SetSpacing(
const std::vector< double > &spacing );
267 std::vector< double > GetDirection()
const;
268 void SetDirection (
const std::vector< double > &direction );
272 std::vector< double > TransformIndexToPhysicalPoint(
const std::vector< int64_t > &index )
const;
275 std::vector< int64_t > TransformPhysicalPointToIndex(
const std::vector< double >&
point )
const;
278 std::vector< double > TransformPhysicalPointToContinuousIndex(
const std::vector< double >&
point )
const;
281 std::vector< double > TransformContinuousIndexToPhysicalPoint(
const std::vector< double > &index)
const;
312 std::vector< unsigned int > GetSize( )
const;
315 unsigned int GetWidth( )
const;
318 unsigned int GetHeight( )
const;
322 unsigned int GetDepth( )
const;
335 void CopyInformation(
const Image &srcImage );
343 std::vector<std::string> GetMetaDataKeys( )
const;
347 bool HasMetaDataKey(
const std::string &key )
const;
357 std::string GetMetaData(
const std::string &key )
const;
363 void SetMetaData(
const std::string &key,
const std::string &value);
370 bool EraseMetaData(
const std::string &key );
372 std::string ToString( )
const;
391 Image ToVectorImage(
bool inPlace =
true);
411 Image ToScalarImage(
bool inPlace =
true);
428 int8_t GetPixelAsInt8(
const std::vector<uint32_t> &idx)
const;
429 uint8_t GetPixelAsUInt8(
const std::vector<uint32_t> &idx)
const;
430 int16_t GetPixelAsInt16(
const std::vector<uint32_t> &idx )
const;
431 uint16_t GetPixelAsUInt16(
const std::vector<uint32_t> &idx )
const;
432 int32_t GetPixelAsInt32(
const std::vector<uint32_t> &idx )
const;
433 uint32_t GetPixelAsUInt32(
const std::vector<uint32_t> &idx )
const;
434 int64_t GetPixelAsInt64(
const std::vector<uint32_t> &idx )
const;
435 uint64_t GetPixelAsUInt64(
const std::vector<uint32_t> &idx )
const;
436 float GetPixelAsFloat(
const std::vector<uint32_t> &idx )
const;
437 double GetPixelAsDouble(
const std::vector<uint32_t> &idx )
const;
439 std::vector<int8_t> GetPixelAsVectorInt8(
const std::vector<uint32_t> &idx)
const;
440 std::vector<uint8_t> GetPixelAsVectorUInt8(
const std::vector<uint32_t> &idx)
const;
441 std::vector<int16_t> GetPixelAsVectorInt16(
const std::vector<uint32_t> &idx )
const;
442 std::vector<uint16_t> GetPixelAsVectorUInt16(
const std::vector<uint32_t> &idx )
const;
443 std::vector<int32_t> GetPixelAsVectorInt32(
const std::vector<uint32_t> &idx )
const;
444 std::vector<uint32_t> GetPixelAsVectorUInt32(
const std::vector<uint32_t> &idx )
const;
445 std::vector<int64_t> GetPixelAsVectorInt64(
const std::vector<uint32_t> &idx )
const;
446 std::vector<uint64_t> GetPixelAsVectorUInt64(
const std::vector<uint32_t> &idx )
const;
447 std::vector<float> GetPixelAsVectorFloat32(
const std::vector<uint32_t> &idx )
const;
448 std::vector<double> GetPixelAsVectorFloat64(
const std::vector<uint32_t> &idx )
const;
450 std::complex<float> GetPixelAsComplexFloat32(
const std::vector<uint32_t> &idx )
const;
451 std::complex<double> GetPixelAsComplexFloat64(
const std::vector<uint32_t> &idx )
const;
470 void SetPixelAsInt8(
const std::vector<uint32_t> &idx, int8_t v );
471 void SetPixelAsUInt8(
const std::vector<uint32_t> &idx, uint8_t v );
472 void SetPixelAsInt16(
const std::vector<uint32_t> &idx, int16_t v );
473 void SetPixelAsUInt16(
const std::vector<uint32_t> &idx, uint16_t v );
474 void SetPixelAsInt32(
const std::vector<uint32_t> &idx, int32_t v );
475 void SetPixelAsUInt32(
const std::vector<uint32_t> &idx, uint32_t v );
476 void SetPixelAsInt64(
const std::vector<uint32_t> &idx, int64_t v );
477 void SetPixelAsUInt64(
const std::vector<uint32_t> &idx, uint64_t v );
478 void SetPixelAsFloat(
const std::vector<uint32_t> &idx,
float v );
479 void SetPixelAsDouble(
const std::vector<uint32_t> &idx,
double v );
481 void SetPixelAsVectorInt8(
const std::vector<uint32_t> &idx,
const std::vector<int8_t> &v );
482 void SetPixelAsVectorUInt8(
const std::vector<uint32_t> &idx,
const std::vector<uint8_t> &v );
483 void SetPixelAsVectorInt16(
const std::vector<uint32_t> &idx,
const std::vector<int16_t> &v );
484 void SetPixelAsVectorUInt16(
const std::vector<uint32_t> &idx,
const std::vector<uint16_t> &v );
485 void SetPixelAsVectorInt32(
const std::vector<uint32_t> &idx,
const std::vector<int32_t> &v );
486 void SetPixelAsVectorUInt32(
const std::vector<uint32_t> &idx,
const std::vector<uint32_t> &v );
487 void SetPixelAsVectorInt64(
const std::vector<uint32_t> &idx,
const std::vector<int64_t> &v );
488 void SetPixelAsVectorUInt64(
const std::vector<uint32_t> &idx,
const std::vector<uint64_t> &v );
489 void SetPixelAsVectorFloat32(
const std::vector<uint32_t> &idx,
const std::vector<float> &v );
490 void SetPixelAsVectorFloat64(
const std::vector<uint32_t> &idx,
const std::vector<double> &v );
492 void SetPixelAsComplexFloat32(
const std::vector<uint32_t> &idx,
const std::complex<float> v );
493 void SetPixelAsComplexFloat64(
const std::vector<uint32_t> &idx,
const std::complex<double> v );
523 int8_t *GetBufferAsInt8( );
524 uint8_t *GetBufferAsUInt8( );
525 int16_t *GetBufferAsInt16( );
526 uint16_t *GetBufferAsUInt16( );
527 int32_t *GetBufferAsInt32( );
528 uint32_t *GetBufferAsUInt32( );
529 int64_t *GetBufferAsInt64( );
530 uint64_t *GetBufferAsUInt64( );
531 float *GetBufferAsFloat( );
532 double *GetBufferAsDouble( );
533 void *GetBufferAsVoid();
535 const int8_t *GetBufferAsInt8( )
const;
536 const uint8_t *GetBufferAsUInt8( )
const;
537 const int16_t *GetBufferAsInt16( )
const;
538 const uint16_t *GetBufferAsUInt16( )
const;
539 const int32_t *GetBufferAsInt32( )
const;
540 const uint32_t *GetBufferAsUInt32( )
const;
541 const int64_t *GetBufferAsInt64( )
const;
542 const uint64_t *GetBufferAsUInt64( )
const;
543 const float *GetBufferAsFloat( )
const;
544 const double *GetBufferAsDouble( )
const;
545 const void *GetBufferAsVoid()
const;
559 bool IsUnique( )
const;
569 void Allocate (
const std::vector<unsigned int > &size,
PixelIDValueEnum valueEnum,
unsigned int numberOfComponents );
578 template<
class TImageType>
579 typename std::enable_if<IsBasic<TImageType>::Value>::type
580 AllocateInternal (
const std::vector<unsigned int > &size,
unsigned int numberOfComponents );
582 template<
class TImageType>
583 typename std::enable_if<IsVector<TImageType>::Value>::type
584 AllocateInternal (
const std::vector<unsigned int > &size,
unsigned int numberOfComponents );
586 template<
class TImageType>
587 typename std::enable_if<IsLabel<TImageType>::Value>::type
588 AllocateInternal (
const std::vector<unsigned int > &size,
unsigned int numberOfComponents );
594 template<
class TImageType>
595 std::enable_if_t<IsVector<TImageType>::Value,
Image>
596 ToVectorInternal(
bool inPlace);
598 template<
class TImageType>
599 std::enable_if_t<IsBasic<TImageType>::Value,
Image>
600 ToVectorInternal(
bool inPlace);
602 template<
class TImageType>
603 std::enable_if_t<IsVector<TImageType>::Value,
Image>
604 ToScalarInternal(
bool inPlace);
606 template<
class TImageType>
607 std::enable_if_t<IsBasic<TImageType>::Value,
Image>
608 ToScalarInternal(
bool inPlace);
624 Image( std::unique_ptr<PimpleImageBase> pimpleImage );
627 template <
typename TImageType>
631 friend struct DispatchedInternalInitialiationAddressor;
632 friend struct AllocateMemberFunctionAddressor;
633 friend struct ToVectorAddressor;
634 friend struct ToScalarAddressor;