![Logo](itkLogoSmall.png) |
ITK
5.1.0
Insight Toolkit
|
Go to the documentation of this file.
19 #ifndef itkShapedImageNeighborhoodRange_h
20 #define itkShapedImageNeighborhoodRange_h
27 #include <type_traits>
35 namespace Experimental
92 template <
typename TImage,
93 typename TImageNeighborhoodPixelAccessPolicy = ZeroFluxNeumannImageNeighborhoodPixelAccessPolicy<TImage>>
110 template <
typename T>
112 Test(
typename T::PixelAccessParameterType *);
114 template <
typename T>
121 !std::is_same<decltype(Test<TImageNeighborhoodPixelAccessPolicy>(
nullptr)),
122 decltype(Test<TImageNeighborhoodPixelAccessPolicy>())>::value;
126 template <
typename TPolicy,
bool VPolicyHasPixelAccessParameterType = CheckPolicy::HasPixelAccessParameterType>
129 using Type =
typename TPolicy::PixelAccessParameterType;
133 template <
typename TPolicy>
163 template <
bool VIsConst,
typename TDummy =
void>
169 template <
typename TDummy>
191 const TImageNeighborhoodPixelAccessPolicy & pixelAccessPolicy) ITK_NOEXCEPT
193 , m_PixelAccessPolicy{ pixelAccessPolicy }
199 , m_PixelAccessPolicy{ pixelProxy.m_PixelAccessPolicy }
209 template <
typename TDummy>
233 const TImageNeighborhoodPixelAccessPolicy & pixelAccessPolicy) ITK_NOEXCEPT
235 , m_PixelAccessPolicy{ pixelAccessPolicy }
264 const auto lhsPixelValue = lhs.m_PixelAccessPolicy.GetPixelValue(lhs.m_ImageBufferPointer);
265 const auto rhsPixelValue = rhs.m_PixelAccessPolicy.GetPixelValue(rhs.m_ImageBufferPointer);
268 lhs.m_PixelAccessPolicy.SetPixelValue(lhs.m_ImageBufferPointer, rhsPixelValue);
269 rhs.m_PixelAccessPolicy.SetPixelValue(rhs.m_ImageBufferPointer, lhsPixelValue);
286 template <
bool VIsConst>
304 typename std::conditional<IsImageTypeConst, const InternalPixelType, InternalPixelType>::type;
307 using QualifiedPixelType =
typename std::conditional<IsImageTypeConst, const PixelType, PixelType>::type;
355 return TImageNeighborhoodPixelAccessPolicy{
360 template <
typename TPixelAccessParameter>
361 TImageNeighborhoodPixelAccessPolicy
364 static_assert(std::is_same<TPixelAccessParameter, OptionalPixelAccessParameterType>::value,
365 "This helper function should only be used for OptionalPixelAccessParameterType!");
366 static_assert(!std::is_same<TPixelAccessParameter, EmptyPixelAccessParameter>::value,
367 "EmptyPixelAccessParameter indicates that there is no pixel access parameter specified!");
368 return TImageNeighborhoodPixelAccessPolicy{
471 assert(lhs.m_ImageBufferPointer == rhs.m_ImageBufferPointer);
472 assert(lhs.m_ImageSize == rhs.m_ImageSize);
473 assert(lhs.m_OffsetTable == rhs.m_OffsetTable);
476 return lhs.m_CurrentOffset == rhs.m_CurrentOffset;
485 return !(lhs == rhs);
493 assert(lhs.m_ImageBufferPointer == rhs.m_ImageBufferPointer);
494 assert(lhs.m_ImageSize == rhs.m_ImageSize);
495 assert(lhs.m_OffsetTable == rhs.m_OffsetTable);
498 return lhs.m_CurrentOffset < rhs.m_CurrentOffset;
551 assert(lhs.m_ImageBufferPointer == rhs.m_ImageBufferPointer);
552 assert(lhs.m_ImageSize == rhs.m_ImageSize);
553 assert(lhs.m_OffsetTable == rhs.m_OffsetTable);
556 return lhs.m_CurrentOffset - rhs.m_CurrentOffset;
596 typename std::conditional<IsImageTypeConst, const InternalPixelType, InternalPixelType>::type;
608 :
m_Index(imageRegion.GetIndex())
609 ,
m_Size(imageRegion.GetSize())
619 index1[i] -= index2[i];
672 const std::size_t numberOfNeigborhoodPixels,
687 assert(offsetTable !=
nullptr);
705 template <
typename TContainerOfOffsets>
708 const TContainerOfOffsets & shapeOffsets,
714 optionalPixelAccessParameter }
744 return this->
begin();
806 assert(n < this->
size());
807 assert(n <= static_cast<std::size_t>(std::numeric_limits<std::ptrdiff_t>::max()));
810 return this->
begin()[static_cast<std::ptrdiff_t>(n)];
reverse_iterator rend() const noexcept
const TImageNeighborhoodPixelAccessPolicy m_PixelAccessPolicy
OptionalPixelAccessParameterType m_OptionalPixelAccessParameter
QualifiedIterator()=default
QualifiedIterator & operator++() noexcept
typename TImage::InternalPixelType InternalPixelType
typename TImage::IndexValueType IndexValueType
typename TImage::ImageDimensionType ImageDimensionType
IndexType m_RelativeLocation
iterator begin() const noexcept
typename std::conditional< IsImageTypeConst, const InternalPixelType, InternalPixelType >::type QualifiedInternalPixelType
ShapedImageNeighborhoodRange(ImageType &image, const IndexType &location, const OffsetType *const shapeOffsets, const std::vcl_size_t numberOfNeigborhoodPixels, const OptionalPixelAccessParameterType optionalPixelAccessParameter={})
reference operator*() const noexcept
QualifiedIterator operator--(int) noexcept
friend QualifiedIterator & operator+=(QualifiedIterator &it, const difference_type n) noexcept
QualifiedIterator(QualifiedInternalPixelType *const imageBufferPointer, const ImageSizeType &imageSize, const OffsetType &offsetTable, const NeighborhoodAccessorFunctorType &neighborhoodAccessor, const OptionalPixelAccessParameterType optionalPixelAccessParameter, const IndexType &relativeLocation, const OffsetType *const offset) noexcept
friend QualifiedIterator operator-(QualifiedIterator it, const difference_type n) noexcept
ImageSizeType m_ImageSize
QualifiedInternalPixelType * m_ImageBufferPointer
typename TImage::PixelType PixelType
QualifiedIterator & operator=(const QualifiedIterator &) noexcept=default
NeighborhoodAccessorFunctorType m_NeighborhoodAccessor
friend QualifiedIterator operator+(QualifiedIterator it, const difference_type n) noexcept
static constexpr ImageDimensionType ImageDimension
static int Test(typename T::PixelAccessParameterType *)
typename TImageNeighborhoodPixelAccessPolicy ::PixelAccessParameterType Type
typename TImage::SizeValueType ImageSizeValueType
ImageBaseType::SizeType SizeType
friend bool operator==(const QualifiedIterator &lhs, const QualifiedIterator &rhs) noexcept
friend bool operator!=(const QualifiedIterator &lhs, const QualifiedIterator &rhs) noexcept
NeighborhoodAccessorFunctorType m_NeighborhoodAccessor
std::vcl_size_t size() const noexcept
QualifiedIterator< false >::reference operator[](const std::vcl_size_t n) const noexcept
typename TImage::SizeType ImageSizeType
reference operator[](const difference_type n) const noexcept
std::reverse_iterator< iterator > reverse_iterator
InternalPixelType *const m_ImageBufferPointer
ShapedImageNeighborhoodRange()=default
std::vcl_size_t m_NumberOfNeighborhoodPixels
QualifiedInternalPixelType * m_ImageBufferPointer
ImageBaseType::IndexType IndexType
friend bool operator<=(const QualifiedIterator &lhs, const QualifiedIterator &rhs) noexcept
PixelProxy & operator=(const PixelType &pixelValue) noexcept
typename std::conditional< IsImageTypeConst, const InternalPixelType, InternalPixelType >::type QualifiedInternalPixelType
QualifiedIterator(const QualifiedIterator< false > &arg) noexcept
typename OptionalPixelAccessParameter< TImageNeighborhoodPixelAccessPolicy >::Type OptionalPixelAccessParameterType
const TImageNeighborhoodPixelAccessPolicy m_PixelAccessPolicy
PixelProxy & operator=(const PixelProxy &pixelProxy) noexcept
const_iterator cbegin() const noexcept
typename TImage::RegionType ImageRegionType
friend QualifiedIterator operator+(const difference_type n, QualifiedIterator it) noexcept
std::reverse_iterator< const_iterator > const_reverse_iterator
const OffsetType * m_ShapeOffsets
typename std::conditional< VIsConst, const ImageType, ImageType >::type QualifiedImageType
ImageBaseType::RegionType RegionType
typename TImage::IndexType IndexType
ShapedImageNeighborhoodRange(ImageType &image, const IndexType &location, const TContainerOfOffsets &shapeOffsets, const OptionalPixelAccessParameterType optionalPixelAccessParameter={})
QualifiedIterator< true > const_iterator
friend difference_type operator-(const QualifiedIterator &lhs, const QualifiedIterator &rhs) noexcept
friend QualifiedIterator & operator-=(QualifiedIterator &it, const difference_type n) noexcept
QualifiedIterator & operator--() noexcept
IndexType m_RelativeLocation
QualifiedIterator< IsImageTypeConst > iterator
typename TImage::NeighborhoodAccessorFunctorType NeighborhoodAccessorFunctorType
const_iterator cend() const noexcept
typename std::conditional< IsImageTypeConst, const PixelType, PixelType >::type QualifiedPixelType
friend void swap(PixelProxy lhs, PixelProxy rhs) noexcept
friend bool operator>(const QualifiedIterator &lhs, const QualifiedIterator &rhs) noexcept
static constexpr bool HasPixelAccessParameterType
OptionalPixelAccessParameterType m_OptionalPixelAccessParameter
PixelProxy(InternalPixelType *const imageBufferPointer, const TImageNeighborhoodPixelAccessPolicy &pixelAccessPolicy) noexcept
The "itk" namespace contains all Insight Segmentation and Registration Toolkit (ITK) classes....
const_reverse_iterator crbegin() const noexcept
RegionData m_BufferedRegionData
friend bool operator<(const QualifiedIterator &lhs, const QualifiedIterator &rhs) noexcept
signed long OffsetValueType
bool empty() const noexcept
static constexpr bool IsImageTypeConst
signed long IndexValueType
const_reverse_iterator crend() const noexcept
void SubtractIndex(IndexType &index1, const IndexType &index2)
friend bool operator>=(const QualifiedIterator &lhs, const QualifiedIterator &rhs) noexcept
QualifiedPixelType * pointer
const OffsetType * m_CurrentOffset
std::random_access_iterator_tag iterator_category
std::ptrdiff_t difference_type
QualifiedIterator operator++(int) noexcept
PixelProxy(const InternalPixelType *const imageBufferPointer, const TImageNeighborhoodPixelAccessPolicy &pixelAccessPolicy) noexcept
static constexpr bool IsImageTypeConst
RegionData() noexcept=default
reverse_iterator rbegin() const noexcept
iterator end() const noexcept
PixelProxy(const PixelProxy< false > &pixelProxy) noexcept
TImageNeighborhoodPixelAccessPolicy CreatePixelAccessPolicy(EmptyPixelAccessParameter) const
const InternalPixelType *const m_ImageBufferPointer
unsigned long SizeValueType
TImageNeighborhoodPixelAccessPolicy CreatePixelAccessPolicy(const TPixelAccessParameter pixelAccessParameter) const
void SetLocation(const IndexType &location) noexcept