在头文件中,我声明了所有这些类型,“Gradient ImageFilter”用于计算2D图像的梯度,“VectorIndexSelectionCastImageFilter”用于选择梯度计算的'x'和'y'分量,由于计算梯度的结果是矢量图。
typedef double operatorValueType;
typedef double outputValueType;
typedef double InputPixelType;
typedef itk::Image<InputPixelType, 2> InputImageType;
typedef itk::GradientImageFilter< InputImageType, operatorValueType, outputValueType> GradientFilterType;
//for extracting a scalar from the vector image
typedef double OutputPixelTypeImage;
typedef double ComponentType;
typedef itk::CovariantVector<ComponentType,2> OutputPixelType;
typedef itk::Image <OutputPixelType, 2> OutputImageType;
typedef itk::VectorIndexSelectionCastImageFilter<OutputImageType,InputImageType> SelectionFilterType; // < intputType , outputType>
在声明之后,代码的主要兴趣部分如下:
GradientFilterType::Pointer gradientFilter = GradientFilterType::New();
gradientFilter->SetInput(T_g->GetOutput()); // From T_g (is a reader) comes the image
gradientFilter->Update();
SelectionFilterType::Pointer componentExtractor_x = SelectionFilterType::New();
SelectionFilterType::Pointer componentExtractor_y = SelectionFilterType::New();
componentExtractor_x->SetIndex(0);// x component of the gradient
componentExtractor_y->SetIndex(1);// y component of the gradient
componentExtractor_x->SetInput(gradientFilter->GetOutput());
componentExtractor_y->SetInput(gradientFilter->GetOutput());
componentExtractor_x->Update();
componentExtractor_y->Update();
似乎一切正常,但问题是,当我读取图像并将其与 Matlab 中的梯度计算(我认为是正确的)进行比较时,结果完全不同……任何人在“VectorIndexSelectionCastImageFilter”之前使用过” 并看到一些奇怪的东西?还是在计算梯度的过程中?
非常感谢!
安东尼奥