17 #ifndef __itkImageMaskSpatialObject_txx
18 #define __itkImageMaskSpatialObject_txx
28 template<
unsigned int TDimension>
32 this->SetTypeName(
"ImageMaskSpatialObject");
33 this->ComputeBoundingBox();
37 template<
unsigned int TDimension>
47 template<
unsigned int TDimension >
52 if( !this->GetBounds()->IsInside(point) )
57 if( !this->SetInternalInverseTransformToWorldToIndexTransform() )
62 PointType p = this->GetInternalInverseTransform()->TransformPoint(point);
65 for(
unsigned int i=0; i<TDimension; i++)
67 index[i] =
static_cast<int>( p[i] );
70 const bool insideBuffer = this->GetImage()->GetBufferedRegion().IsInside( index );
77 const bool insideMask = (this->GetImage()->GetPixel(index) != NumericTraits<PixelType>::Zero);
84 template<
unsigned int TDimension>
96 else if(strstr(
typeid(
Self).name(), name))
107 template<
unsigned int TDimension >
121 PixelType outsideValue = NumericTraits< PixelType >::Zero;
126 typedef typename SizeType::SizeValueType SizeValueType;
131 if( ImageType::ImageDimension == 3)
134 for(
unsigned int axis = 0; axis < ImageType::ImageDimension; axis++ )
139 unsigned int direction[2];
140 for (i = 0, j = 0; i < 3; ++i )
153 fit.SetSecondDirection( direction[0] );
156 while( !fit.IsAtEnd() )
158 while( !fit.IsAtEndOfSlice() )
160 while( !fit.IsAtEndOfLine() )
162 if( fit.Get() != outsideValue )
164 index[axis] = fit.GetIndex()[axis];
165 fit.GoToReverseBegin();
179 rit.SetSecondDirection( direction[0] );
181 rit.GoToReverseBegin();
182 while( !rit.IsAtReverseEnd() )
184 while( !rit.IsAtReverseEndOfSlice() )
186 while( !rit.IsAtReverseEndOfLine() )
188 if( rit.Get() != outsideValue )
190 size[axis] = rit.GetIndex()[axis] - index[axis] + 1;
202 region.SetIndex( index );
203 region.SetSize( size );
209 IteratorType it( image, image->GetRequestedRegion() );
212 for (
unsigned int i = 0; i < ImageType::ImageDimension; ++i )
214 index[ i ] = image->GetRequestedRegion().GetSize( i );
215 size[ i ] = image->GetRequestedRegion().GetIndex( i );
218 while( !it.IsAtEnd() )
220 if ( it.Get() != outsideValue )
223 for (
unsigned int i = 0; i < ImageType::ImageDimension; ++i )
226 if ( index[ i ] > tmpIndex[ i ] )
228 index[ i ] = tmpIndex[ i ];
231 const SizeValueType tmpSize =
static_cast< SizeValueType
>( tmpIndex[ i ] );
233 if ( size[ i ] < tmpSize )
243 for (
unsigned int i = 0; i < ImageType::ImageDimension; ++i )
245 size[ i ] = size[ i ] - index[ i ] + 1;
247 region.SetIndex( index );
248 region.SetSize( size );
257 template<
unsigned int TDimension >
262 Superclass::PrintSelf(os,indent);
268 #endif //__ImageMaskSpatialObject_txx