Frangi过滤器用作边缘检测器

时间:2016-02-09 23:00:47

标签: matlab image-processing computer-vision imagefilter

我试图使用Frangi过滤器从植物图像中提取所有茎。我想利用每个茎具有比叶子更像血管特征的特性。 Using this paper as reference

我的输入图片是

enter image description here

这是我的matlab代码片段

 options=struct('FrangiScaleRange', [1 3], 'FrangiScaleRatio', 1, 'FrangiBetaOne', 0.5,...
       'FrangiBetaTwo', 2, 'verbose',true,'BlackWhite',true);
      [outIm,whatScale,Direction] = FrangiFilter2D(double(rgb2gray(img2)), options);
      outIm = uint8(outIm/max(outIm(:))*256);

这是输出

enter image description here

我知道可以有其他方法来完成这项任务,但我很想知道,为什么这种方法不起作用。

2 个答案:

答案 0 :(得分:4)

就Frangi过滤器而言,你的茎和叶都像容器一样,所以你不能简单地使用过滤器输出来区分它们。

然而,你可以:(i)选择更好的尺度(大致适合你试图检测的结构的尺度)和(ii)尝试不同的参数。

我试过,根据比例5 10 20 30和Frangi参数beta=0.5c=100

Frangi eq.

[Frangi等人:Multiscale vessel enhancement filtering,MICCAI 1998]

这就是我得到的:

Frangi

以原始图像http://i.stack.imgur.com/s6wuE.jpg的逻辑单位缩放,在Photoshop中转换为灰色-8bpp。

您可以观察到以下内容。叶片在比茎更高的尺度上给出响应。也许这可能是一个线索。

编辑:

我看了http://i.stack.imgur.com/eZwxg.png。 “边缘探测器” - 对明亮叶子的影响是由于Frangi理论在两个维度上的适用性不足:

  • 三维血管:血管方向的小特征值,另外两个正交方向的两个高负特征值。
  • 2-D容器:容器方向上的小特征值,一个与其垂直的高负特征值。

相反

  • 3-D板:一个高度负特征值,两个小特征值。

答案 1 :(得分:0)

Frangi过滤器测量图像区域的延伸程度,因此它将容器检测为“长”而非“blobby”的对象。本文中的示例图像具有窄而直的茎(与您的一样)和非常圆的叶(与您的不同)。因为叶片比纸张更长更薄,所以第一步的算法效果不佳。您的选择是:

(a)带参数的futz(在matlab中,我相信它们是FrangiAlpha和.FrangiBeta参数)。默认情况下,这些设置为0.5,我认为你需要将它们设置得更低(这样你就必须更长,更瘦,以便算作干)。

(b)像@dasdingonesin所说的那样,论文有很多步骤,后面的Hough Filter步骤也会鼓励比Frangi滤波器更大规模的长连续线。