Matlab Frangi 过滤器增强不需要的对象

标签 matlab

我正在使用Matlab version Frangi filter为我当前的项目增强又长又细的明亮 Blob 。它适用于异构数据。然而,当应用于受控同质数据时,我得到了很多不需要的对象。它们中的大多数都不是又长又薄的特征,我一直在寻找控制过滤器偏心率的想法。

这是我的代码

Img = imread('test.png');
Img = im2double(Img);
options = struct('FrangiScaleRange', [5 7], 'FrangiScaleRatio', 2, 'FrangiBetaOne', 0.5, 'FrangiBetaTwo', 15, 'verbose',true,'BlackWhite',true);
[IEnhance,~]=FrangiFilter2D(1-Img,options);
IEnhance = mat2gray(IEnhance);
imshow(IEnhance)

我尝试不缩放数据,但空白和检测数据的输出具有相似的响应强度。

最佳答案

我认为这是由 mat2gray 引起的。

我假设过滤器根据图像输出不同的数值,但是,当您调用 mat2gray 时,您会自动缩放到 min(IEnhance)max (IEnhance)

FEX 带有图像。如果我们运行

Img = imread('vessel.png');
Img = im2double(Img); % autoscale input, 
options = struct('FrangiScaleRange', [5 7], 'FrangiScaleRatio', 2, 'FrangiBetaOne', 0.5, 'FrangiBetaTwo', 15, 'verbose',true,'BlackWhite',true);
[IEnhance,~]=FrangiFilter2D(Img,options);

imshow(IEnhance,[])
colorbar

enter image description here

我们可以看到比例约为 3*10^-5。

相反,如果我们将您的图像运行为:

Img = imread('/image/OlNeb.png');
Img = im2double(Img);
options = struct('FrangiScaleRange', [5 7], 'FrangiScaleRatio', 2, 'FrangiBetaOne', 0.5, 'FrangiBetaTwo', 15, 'verbose',true,'BlackWhite',true);
[IEnhance2,~]=FrangiFilter2D(Img,options);

imshow(IEnhance2,[])
colorbar

enter image description here

在本例中,比例变为 3*10^6

如果我们以相同的比例绘制它们:

subplot(121)
imshow(IEnhance,[0 3e-5])
subplot(122)
imshow(IEnhance2,[0 3e-5])

enter image description here

您现在可以看到滤波器的结果是正确的,因为它几乎将随机噪声检测为背景。请注意,我们可以这样做,因为我们确实自动缩放输入 (im2double) 并且输入图像具有相同的比例。对于单一应用程序来说,这是一个不重要的假设,因为大多数设备都会以相同的比例输出图像,但在假设它们不是相同比例的情况下,对输出的不同值的解释将不具有可比性。

值得学习的教训: 过滤器的输出是概率,不要自动缩放概率!


请注意,在我的演示中,我修改了对文件夹的调用以仅调用 Img,因为这就是 FEX 文件的工作方式。您可能有理由颠倒它。

关于Matlab Frangi 过滤器增强不需要的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54012100/

相关文章:

performance - MATLAB parfor 比 for 慢——有什么问题吗?

Matlab 情节忽略下划线?

matlab - 在 matlab 中绘制 2d 矩阵的 3d

matlab - 如何积累数据集?

MATLAB 相当于 Python 的 string.join()

Matlab:使用 IMRECT 选择的 ROI 的实时绘图

matlab - 在 MATLAB 中从头开始编写基本神经网络

file - Matlab - 我正在处理什么样的文件?

matlab - matlab如何判断一个矩阵是否为空?

Matlab 运行部分不工作