17 #ifndef __itkSobelEdgeDetectionImageFilter_txx
18 #define __itkSobelEdgeDetectionImageFilter_txx
32 template <
class TInputImage,
class TOutputImage>
39 Superclass::GenerateInputRequestedRegion();
43 const_cast< TInputImage *
>( this->GetInput() );
56 typename TInputImage::RegionType inputRequestedRegion;
57 inputRequestedRegion = inputPtr->GetRequestedRegion();
60 inputRequestedRegion.PadByRadius( oper.
GetRadius() );
63 if ( inputRequestedRegion.Crop(inputPtr->GetLargestPossibleRegion()) )
65 inputPtr->SetRequestedRegion( inputRequestedRegion );
74 inputPtr->SetRequestedRegion( inputRequestedRegion );
77 InvalidRequestedRegionError e(__FILE__, __LINE__);
79 e.
SetDescription(
"Requested region is (at least partially) outside the largest possible region.");
86 template<
class TInputImage,
class TOutputImage >
93 if( NumericTraits< OutputPixelType >::is_integer )
95 itkWarningMacro(
"Output pixel type MUST be float or double to prevent computational errors");
103 OutputImageType> MultFilter;
109 typename TOutputImage::Pointer output = this->GetOutput();
110 output->SetBufferedRegion(output->GetRequestedRegion());
118 typename OpFilter::Pointer opFilter[ImageDimension];
119 typename MultFilter::Pointer multFilter[ImageDimension];
120 typename AddFilter::Pointer addFilter = AddFilter::New();
121 typename SqrtFilter::Pointer sqrtFilter = SqrtFilter::New();
122 for(i=0; i < ImageDimension; ++i)
125 opFilter[i] = OpFilter::New();
126 multFilter[i] = MultFilter::New();
131 opFilter[i]->OverrideBoundaryCondition(&nbc);
132 opFilter[i]->SetOperator(opers[i]);
135 opFilter[i]->SetInput(this->GetInput());
136 multFilter[i]->SetInput1(opFilter[i]->GetOutput());
137 multFilter[i]->SetInput2(opFilter[i]->GetOutput());
140 addFilter->SetInput(i, multFilter[i]->GetOutput());
144 sqrtFilter->SetInput(addFilter->GetOutput());
148 sqrtFilter->GraftOutput( this->GetOutput() );
151 sqrtFilter->Update();
155 this->GraftOutput(sqrtFilter->GetOutput());