gpt4 book ai didi

c++ - 使用 ITK 计算图像梯度的错误结果

转载 作者:行者123 更新时间:2023-11-30 03:05:36 24 4
gpt4 key购买 nike

在头文件中,我声明了所有这些类型,“Gradient ImageFilter”用于计算二维图像的梯度,“VectorIndexSelectionCastImageFilter”用于选择梯度的“x”和“y”分量计算,由于梯度计算的结果是 vector 图。

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”并看到一些奇怪的东西?还是在计算梯度的过程中?

非常感谢!

安东尼奥

最佳答案

ITK 应该在计算中考虑体素间距。你的图像有各向同性的单位间距吗?

这可以解释与 matlab 的差异。

关于c++ - 使用 ITK 计算图像梯度的错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7582923/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com