#ifndef __itkCentralDifferenceTensorImageFunction_txx #define __itkCentralDifferenceTensorImageFunction_txx #include "itkCentralDifferenceTensorImageFunction.h" namespace itk { /** * Constructor */ template CentralDifferenceTensorImageFunction ::CentralDifferenceTensorImageFunction() { #if defined(ITK_IMAGE_BEHAVES_AS_ORIENTED_IMAGE) this->m_UseImageDirection = true; #else this->m_UseImageDirection = false; #endif } /** * */ template void CentralDifferenceTensorImageFunction ::PrintSelf(std::ostream& os, Indent indent) const { this->Superclass::PrintSelf(os,indent); os << indent << "UseImageDirection = " << this->m_UseImageDirection << std::endl; } /** * */ template typename CentralDifferenceTensorImageFunction::OutputType CentralDifferenceTensorImageFunction ::EvaluateAtIndex( const IndexType& index ) const { OutputType derivative; derivative.Fill( 0.0 ); IndexType neighIndex = index; InputPixelType pix; const typename InputImageType::SizeType& size = this->GetInputImage()->GetBufferedRegion().GetSize(); const typename InputImageType::IndexType& start = this->GetInputImage()->GetBufferedRegion().GetIndex(); for ( unsigned int dim = 0; dim < TInputImage::ImageDimension; dim++ ) { // bounds checking if( index[dim] < static_cast(start[dim]) + 1 || index[dim] > (start[dim] + static_cast(size[dim]) - 2 ) ) { for (unsigned int vdim=0; vdimGetInputImage()->GetPixel( neighIndex ); for (unsigned int vdim=0; vdimGetInputImage()->GetPixel( neighIndex ); for (unsigned int vdim=0; vdimGetInputImage()->GetSpacing()[dim]; } neighIndex[dim] += 1; } #ifdef ITK_USE_ORIENTED_IMAGE_DIRECTION if( this->m_UseImageDirection ) { OutputType orientedDerivative; typename InputImageType::DirectionType direction = inputImage->GetDirection(); for (unsigned int vdim=0; vdim VectorType; VectorType v; for (unsigned int dim=0; dimTransformLocalVectorToPhysicalVector( v, v ); for (unsigned int dim=0; dim