我试图使用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);
这是输出
我知道可以有其他方法来完成这项任务,但我很想知道,为什么这种方法不起作用。
答案 0 :(得分:4)
就Frangi过滤器而言,你的茎和叶都像容器一样,所以你不能简单地使用过滤器输出来区分它们。
然而,你可以:(i)选择更好的尺度(大致适合你试图检测的结构的尺度)和(ii)尝试不同的参数。
我试过,根据比例5 10 20 30
和Frangi参数beta=0.5
和c=100
[Frangi等人:Multiscale vessel enhancement filtering,MICCAI 1998]
这就是我得到的:
以原始图像http://i.stack.imgur.com/s6wuE.jpg的逻辑单位缩放,在Photoshop中转换为灰色-8bpp。
您可以观察到以下内容。叶片在比茎更高的尺度上给出响应。也许这可能是一个线索。
编辑:
我看了http://i.stack.imgur.com/eZwxg.png。 “边缘探测器” - 对明亮叶子的影响是由于Frangi理论在两个维度上的适用性不足:
相反
答案 1 :(得分:0)
Frangi过滤器测量图像区域的延伸程度,因此它将容器检测为“长”而非“blobby”的对象。本文中的示例图像具有窄而直的茎(与您的一样)和非常圆的叶(与您的不同)。因为叶片比纸张更长更薄,所以第一步的算法效果不佳。您的选择是:
(a)带参数的futz(在matlab中,我相信它们是FrangiAlpha和.FrangiBeta参数)。默认情况下,这些设置为0.5,我认为你需要将它们设置得更低(这样你就必须更长,更瘦,以便算作干)。
(b)像@dasdingonesin所说的那样,论文有很多步骤,后面的Hough Filter步骤也会鼓励比Frangi滤波器更大规模的长连续线。