我正在使用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)
我尝试不缩放数据,但是空白数据和检测数据的输出具有相似的响应强度。
答案 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
我们可以看到比例约为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
在这种情况下,比例会变为3 * 10 ^ 6
如果我们以相同比例绘制它们:
subplot(121)
imshow(IEnhance,[0 3e-5])
subplot(122)
imshow(IEnhance2,[0 3e-5])
现在您可以看到滤波器的结果是正确的,因为它几乎将随机噪声作为背景检测为随机噪声。请注意,我们可以这样做是因为我们确实在自动缩放输入(im2double
),并且输入图像的缩放比例相同。对于单个应用来说,这是一个不重要的假设,因为大多数设备将以相同的比例输出图像,但是在假设它们不是相同的比例的情况下,对输出的不同值的解释将不具有可比性。
经验教训: 过滤器的输出是概率,请不要自动缩放概率!
请注意,在我的演示中,我已将对filder的调用修改为仅调用Img,因为这就是FEX文件的工作方式。您可能有理由将其反转。