18#ifndef itkPhasedArray3DSpecialCoordinatesImage_h
19#define itkPhasedArray3DSpecialCoordinatesImage_h
94template <
typename TPixel>
185 template <
typename TIndexRep,
typename TCoordinate>
190 const double maxAzimuth = region.
GetSize(0) - 1;
191 const double maxElevation = region.
GetSize(1) - 1;
220 template <
typename TCoordinate,
typename TIndexRep>
221 ITK_NODISCARD(
"Call the overload which has the point as the only parameter and returns the index")
236 template <
typename TCoordinate>
237 [[nodiscard]] IndexType
241 const double maxAzimuth = region.
GetSize(0) - 1;
242 const double maxElevation = region.
GetSize(1) - 1;
271 template <
typename TCoordinate>
272 ITK_NODISCARD(
"Call the overload which has the point as the only parameter and returns the index")
287 template <
typename TCoordinate,
typename TIndexRep>
293 const double maxAzimuth = region.
GetSize(0) - 1;
294 const double maxElevation = region.
GetSize(1) - 1;
303 const TCoordinate tanOfAzimuth = std::tan(azimuth);
304 const TCoordinate tanOfElevation = std::tan(elevation);
307 static_cast<TCoordinate
>(radius / std::sqrt(1 + tanOfAzimuth * tanOfAzimuth + tanOfElevation * tanOfElevation));
308 point[1] =
static_cast<TCoordinate
>(
point[2] * tanOfElevation);
309 point[0] =
static_cast<TCoordinate
>(
point[2] * tanOfAzimuth);
313 template <
typename TCoordinate,
typename TIndexRep>
328 template <
typename TCoordinate>
333 const double maxAzimuth = region.
GetSize(0) - 1;
334 const double maxElevation = region.
GetSize(1) - 1;
343 const TCoordinate tanOfAzimuth = std::tan(azimuth);
344 const TCoordinate tanOfElevation = std::tan(elevation);
347 static_cast<TCoordinate
>(radius / std::sqrt(1.0 + tanOfAzimuth * tanOfAzimuth + tanOfElevation * tanOfElevation));
348 point[1] =
static_cast<TCoordinate
>(
point[2] * tanOfElevation);
349 point[0] =
static_cast<TCoordinate
>(
point[2] * tanOfAzimuth);
353 template <
typename TCoordinate>
364 itkSetMacro(AzimuthAngularSeparation,
double);
367 itkSetMacro(ElevationAngularSeparation,
double);
370 itkSetMacro(RadiusSampleSize,
double);
373 itkSetMacro(FirstSampleDistance,
double);
375 template <
typename TCoordinate>
380 template <
typename TCoordinate>
400 NeighborhoodAccessorFunctorType
407 const NeighborhoodAccessorFunctorType
436#ifndef ITK_MANUAL_INSTANTIATION
437# include "itkPhasedArray3DSpecialCoordinatesImage.hxx"
A templated class holding a point in n-Dimensional image space.
Provides a common API for pixel accessors for Image and VectorImage.
Give access to partial aspects a type.
Simulate a standard C array with copy semantics.
typename IndexType::IndexValueType IndexValueType
virtual const RegionType & GetLargestPossibleRegion() const
typename SizeType::SizeValueType SizeValueType
const SizeType & GetSize() const
Defines an itk::Image front-end to a standard C-array.
SmartPointer< Self > Pointer
SmartPointer< const Self > ConstPointer
Control indentation during Print() invocation.
Provides accessor interfaces to Get pixels and is meant to be used on pointers contained within Neigh...
typename PixelContainer::ConstPointer PixelContainerConstPointer
WeakPointer< const Self > ConstWeakPointer
const NeighborhoodAccessorFunctorType GetNeighborhoodAccessor() const
NeighborhoodAccessorFunctorType GetNeighborhoodAccessor()
double m_AzimuthAngularSeparation
double m_RadiusSampleSize
~PhasedArray3DSpecialCoordinatesImage() override=default
typename PixelContainer::Pointer PixelContainerPointer
DefaultPixelAccessorFunctor< Self > AccessorFunctorType
NeighborhoodAccessorFunctor< Self > NeighborhoodAccessorFunctorType
ImportImageContainer< SizeValueType, PixelType > PixelContainer
double m_FirstSampleDistance
AccessorType GetPixelAccessor()
Point< TCoordinate, 3 > TransformIndexToPhysicalPoint(const IndexType &index) const
Point< TCoordinate, 3 > TransformContinuousIndexToPhysicalPoint(const ContinuousIndex< TIndexRep, 3 > &index) const
void TransformLocalVectorToPhysicalVector(FixedArray< TCoordinate, 3 > &) const
void TransformIndexToPhysicalPoint(const IndexType &index, Point< TCoordinate, 3 > &point) const
SmartPointer< Self > Pointer
ContinuousIndex< TIndexRep, 3 > TransformPhysicalPointToContinuousIndex(const Point< TCoordinate, 3 > &point) const
DefaultPixelAccessor< PixelType > AccessorType
PhasedArray3DSpecialCoordinatesImage()
SmartPointer< const Self > ConstPointer
static constexpr unsigned int ImageDimension
PhasedArray3DSpecialCoordinatesImage Self
const AccessorType GetPixelAccessor() const
double m_ElevationAngularSeparation
IndexType TransformPhysicalPointToIndex(const Point< TCoordinate, 3 > &point) const
SpecialCoordinatesImage< TPixel, 3 > Superclass
void PrintSelf(std::ostream &os, Indent indent) const override
void TransformPhysicalVectorToLocalVector(const FixedArray< TCoordinate, 3 > &, FixedArray< TCoordinate, 3 > &) const
void TransformContinuousIndexToPhysicalPoint(const ContinuousIndex< TIndexRep, 3 > &index, Point< TCoordinate, 3 > &point) const
A templated class holding a geometric point in n-Dimensional space.
Implements transparent reference counting.
Size< VImageDimension > SizeType
Point< PointValueType, VImageDimension > PointType
ImageRegion< VImageDimension > RegionType
SpecialCoordinatesImage()=default
Offset< VImageDimension > OffsetType
Vector< SpacingValueType, VImageDimension > SpacingType
Index< VImageDimension > IndexType
Implements a weak reference to an object.
static constexpr double pi_over_2
static constexpr double pi
The "itk" namespace contains all Insight Segmentation and Registration Toolkit (ITK) classes....
*par Constraints *The filter image with at least two dimensions and a vector *length of at least The theory supports extension to scalar but *the implementation of the itk vector classes do not **The template parameter TRealType must be floating point(float or double) or *a user-defined "real" numerical type with arithmetic operations defined *sufficient to compute derivatives. **\par Performance *This filter will automatically multithread if run with *SetUsePrincipleComponents