我正在使用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)我尝试不缩放数据,但空白数据和检测数据的输出具有相似的响应强度。
发布于 2019-01-09 19:18:58
我认为这是由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文件的工作方式。你可能有自己的理由去颠倒它。
https://stackoverflow.com/questions/54012100
复制相似问题