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

时间:2019-01-02 19:28:13

标签: matlab

我正在使用Matlab version Frangi filter来增强当前项目的长而细的明亮斑点。它适用于异构数据。但是,在受控的同类数据上应用时,我遇到了很多不需要的对象。他们中的大多数都不是又长又薄的功能,我一直在寻找控制过滤器偏心度的想法。

这是我的代码

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)

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

1 个答案:

答案 0 :(得分:2)

我认为这是由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('https://i.stack.imgur.com/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),并且输入图像的缩放比例相同。对于单个应用来说,这是一个不重要的假设,因为大多数设备将以相同的比例输出图像,但是在假设它们不是相同的比例的情况下,对输出的不同值的解释将不具有可比性。

经验教训: 过滤器的输出是概率,请不要自动缩放概率!


请注意,在我的演示中,我已将对filder的调用修改为仅调用Img,因为这就是FEX文件的工作方式。您可能有理由将其反转。