我正在使用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
我们可以看到比例约为 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
在本例中,比例变为 3*10^6
如果我们以相同的比例绘制它们:
subplot(121)
imshow(IEnhance,[0 3e-5])
subplot(122)
imshow(IEnhance2,[0 3e-5])
您现在可以看到滤波器的结果是正确的,因为它几乎将随机噪声检测为背景。请注意,我们可以这样做,因为我们确实自动缩放输入 (im2double
) 并且输入图像具有相同的比例。对于单一应用程序来说,这是一个不重要的假设,因为大多数设备都会以相同的比例输出图像,但在假设它们不是相同比例的情况下,对输出的不同值的解释将不具有可比性。
值得学习的教训: 过滤器的输出是概率,不要自动缩放概率!
请注意,在我的演示中,我修改了对文件夹的调用以仅调用 Img,因为这就是 FEX 文件的工作方式。您可能有理由颠倒它。
关于Matlab Frangi 过滤器增强不需要的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54012100/