Frangi 滤波器用作边缘检测器

Frangi filter working as an edge detector

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

我的输入图片是这个

这是我的 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);

这是输出

我知道还有其他方法可以完成此任务,但我只是想知道为什么这种方法不起作用。

Frangi 过滤器测量图像区域的拉长程度,因此它将血管检测为 "long" 而不是 "blobby" 的对象。论文中的示例图像具有又窄又直的茎(像你的)和非常圆的叶子(不像你的)。因为叶子比纸上的叶子更长更薄,所以第一步的算法效果不佳。您的选择是:

(a) futz 参数(在 matlab 中,我相信它们是 FrangiAlpha 和 .FrangiBeta 参数)。这些默认设置为 0.5,我认为您需要将它们设置得更低(这样您就必须更长更细才能算作茎)。

(b) 就像@dasdingonesin 说的,这篇论文有很多步骤,后面的 Hough Filter 步骤也会鼓励比 Frangi 过滤器考虑的更大尺度的长连续线。

就 Frangi-filter 而言,如前所述,您的茎和叶都是容器状的,因此您不能简单地使用过滤器输出来区分它们。

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

我试了一下,给出了尺度 5 10 20 30 和 Frangi 参数 beta=0.5c=100

[Frangi 等人:多尺度血管增强过滤,MICCAI 1998]

这是我得到的:

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

您可以观察到以下内容。叶子比茎给出更高尺度的反应。也许这会是一个线索。

编辑:

我看过 http://i.stack.imgur.com/eZwxg.png。 "edge detector"-对亮叶的影响是由于 Frangi 理论对二维的拟合不足:

  • 3-D 血管:血管方向的特征值很小,其他两个正交方向有两个高度负的特征值。
  • 二维血管:血管方向的小特征值,垂直于它的一个高度负的特征值。

相反

  • 三维板:一个高负特征值,两个小特征值。