首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Matlab Frangi滤波器增强的不需要的对象

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

Stack Overflow用户
提问于 2019-01-03 03:28:13
回答 1查看 171关注 0票数 2

我正在使用Matlab version Frangi filter为我当前的项目增强细长的亮点。它可以很好地处理异构数据。然而,当我在受控同构数据上应用时,我得到了很多不需要的对象。它们中的大多数都不是细长的特征,我正在寻找控制滤波器偏心率的想法。

以下是我拥有的代码

代码语言:javascript
复制
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)

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

EN

回答 1

Stack Overflow用户

发布于 2019-01-09 19:18:58

我认为这是由mat2gray引起的。

我假设过滤器根据图像输出不同的数值,然而,当你调用mat2gray时,你会自动缩放到min(IEnhance)max(IEnhance)

FEX附带了一个图像。如果我们运行

代码语言:javascript
复制
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。

相反,如果我们以如下方式运行您的映像:

代码语言:javascript
复制
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

如果我们以相同的比例绘制它们:

代码语言:javascript
复制
subplot(121)
imshow(IEnhance,[0 3e-5])
subplot(122)
imshow(IEnhance2,[0 3e-5])

现在你可以看到滤波器的结果是正确的,因为它几乎将随机噪声检测为背景随机噪声。请注意,我们之所以可以这样做,是因为我们确实是在自动缩放输入(im2double),并且输入图像具有相同的比例。这对于单个应用来说是一个不重要的假设,因为大多数设备将以相同的比例输出图像,但在假设它们不是相同的比例的情况下,对输出的不同值的解释将不具有可比性。

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

注意:在我的演示中,我已将对filder的调用修改为仅调用Img,因为这是FEX文件的工作方式。你可能有自己的理由去颠倒它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54012100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档