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

Matlab Frangi过滤器增强不需要的对象,matlab,Matlab,我正在为我当前的项目增强长而薄的明亮斑点。它适用于异构数据。然而,当应用于受控的同质数据时,我得到了很多不需要的对象。其中大多数都不是长而薄的特性,我一直在寻找控制过滤器偏心率的方法 这是我的密码 Img = imread('test.png'); Img = im2double(Img); options = struct('FrangiScaleRange', [5 7], 'FrangiScaleRatio', 2, 'FrangiBetaOne', 0.5, 'FrangiBetaTwo

我正在为我当前的项目增强长而薄的明亮斑点。它适用于异构数据。然而,当应用于受控的同质数据时,我得到了很多不需要的对象。其中大多数都不是长而薄的特性,我一直在寻找控制过滤器偏心率的方法

这是我的密码

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('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文件就是这样工作的。你可能有你的理由把它颠倒过来。

你有没有试着改变
FrangiScaleRatio
?@CrisLuengo谢谢你的回复。我同意您的意见,更改ScaleRatio可能适用于空白数据,但由于我的目标厚度也在该范围内,因此也无法拾取目标。我建议这样做是因为您似乎在“寻找控制过滤器偏心率的方法”FrangiScaleRatio就是这样做的。如果你把你想要检测的东西附在一张示例图片上,那就太好了。对于这张示例图像,您希望
zero(size(Img))
作为输出,但这不是一个通用的解决方案。@AnderBiguri:您可能完全正确。我仍然希望看到一个图像的东西被检测。谢谢安德!我还认为问题是由缩放问题引起的。但是,如果使用无缩放frangi输出,则应检测到的情况也很暗。我附上了这张图片,你可以试试。@Simaguansing这些图片有不同的分辨率,可能还有不同的现实像素大小,这可能会产生影响。你能发布两张大小相同的图像吗?或者你的应用程序不是这样的?我之所以反转图像,是因为我的检测材料比邻居的要亮。它们是使用相同的设备扫描的,但由于样本大小不同,我必须旋转并找到最大矩形区域才能使用frangi。这就是为什么裁剪后的数据大小不同。@Simaguansing很不幸,我的答案可能是错的。你可以做的一件事是,一旦你得到结果,试着测量你得到的白色斑点的大小。如果长,则为特征,否则为噪声