我在泥中有虎的Pugmark(足迹印象)的形象。我想检测pugmark的边界,但是图像在前景的强度上是均匀的,并且基于强度变化无法区分背景。我能做些什么来区分pugmark和背景。!
tiger's pugmark http://imageshack.us/a/img407/4636/p1060993g.jpg
答案 0 :(得分:8)
在分段任务中,如果你有两个
然后通过分水岭变换直接解决。当然,问题是获得这些标记,以及根据需要增强相关边缘。获取这些可能涉及特定于问题的知识,而我没有解决您的问题。
然而,有一些通用方法可能有用。例如,来自数学形态学的连通运算符用作合并和扩展平坦区域的方式。因此,也许它可以为我们提供相对较好的问题标记。在下图中,通过打开(一种连接的操作符)进行形态重建,在原始图像的灰度版本中执行(左图像),剩余的区域最大值显示在右侧。
现在,我们可以获得上面左图的形态梯度。我们还可以在右上图中使用小圆盘进行孔填充和扩张,以获得更平滑的轮廓 - 这定义了我们的标记图像。然后,使用我们的标记图像在渐变图像中应用分水岭变换,然后展开(侵蚀或扩张,取决于您如何看待它)分水岭线,我们得到以下图像:
我怀疑你可以轻易丢弃太大和太小的区域。然后,如果你有一些粗糙的预期尺寸的爪子,以及手掌,你可以丢弃不相关的区域。此时,只需扩展区域以形成单个组件,并在原始图像中显示生成的轮廓:
执行每个步骤的示例代码(相关步骤也在评论的Matlab代码中显示):
f = Import["http://imageshack.us/a/img407/4636/p1060993g.jpg"]
g = ColorConvert[f, "Grayscale"] (* g = rgb2gray(f); *)
(* First image shown: *)
geo = GeodesicOpening[g, DiskMatrix[5]] (* geo = imreconstruct(imerode(g, ... *)
(* strel('disk', 6)), g); *)
(* Second image shown: *)
marker = MaxDetect[geo] (* marker = imregionalmax(geo); *)
(* Watershed on gradient with markers. *)
mgrad = ImageSubtract[Dilation[geo, 1], Erosion[geo, 1]]; (* mgrad = ... *)
(* imdilate(geo,strel('square',3)) - imerode(geo,strel('square',3)); *)
ws = Image[ (* ws = watershed(imimposemin(mgrad, bwmorph(imfill(... *)
WatershedComponents[mgrad, (* imregionalmax(geo),'holes'),'dilate')))); *)
Dilation[FillingTransform[marker], DiskMatrix[1]]]]
(* Third image shown: *)
wsthick = Erosion[ws // ImageAdjust, DiskMatrix[5]]
(* Connected component selection based on some supposed sizes. *)
ccs = SelectComponents[wsthick, "Count", 1000 < # < 3000 || 6000 < # < 10000 &]
(* Final image (thick border on binarized filled dilated ccs) *)
res = ImageAdd[f, Dilation[MorphologicalPerimeter[FillingTransform[
MorphologicalPerimeter[Dilation[ccs, DiskMatrix[9]]]]], 2]]
答案 1 :(得分:4)
@ mmpg的答案中的方法可能不稳定,因为使用的算法需要设置参数,这些参数可能特定于每个图像。使用具有形状先验知识的参数模型似乎可以更好地解决这个问题。
Active Shape Models框架迭代地近似形状的边界。首先,用一些平均形状初始化它(图像只是插图,而不是算法的实际输出):
轮廓由锚点定义(以蓝色刻度显示,仅适用于手掌以避免混乱)。在每次迭代中,算法考虑每个锚点中的正交方向并估计每个距离处的边界概率(通常使用图像梯度,但在您的情况下,它应该更复杂 - 可能是纹理的差异,例如{之间的距离} {3}})。这里红点突出显示该分布的arg-maximums:
然后,新轮廓适合数据,以最大化这些分布乘以形状的先前分布。假设统一先验,新轮廓将如下所示:
在实践中,您希望有一个非平凡的形状分布。要估计这一点,您需要一组训练图像,其中手动标记pugmark蒙版。
您可以尝试histograms of textons。