图像处理 - 减少对象厚度而不删除

时间:2012-01-31 12:45:04

标签: c# algorithm language-agnostic image-processing

我有一张如下图片。

我想要的是单色图像,白色部分保持白色,其余部分为黑色。然而,棘手的部分是我还想将白色部分减少为厚度为一个像素。

这是我坚持的第二部分 我的第一个想法是做一个简单的阈值,然后使用一种“生命游戏”类型的迭代过程,如果一侧有邻居但没有另一侧(即它是边缘),则删除白色像素但是我有一个感觉这会随着时间的推移减少线条的末端,所以我最终会得到一张空白的图片。

在给定原始图像的情况下,我可以使用什么算法来获取我想要的图像?

(我选择的语言是C#,但一切都很好)


原始图片:

Original Image

2 个答案:

答案 0 :(得分:2)

在检测到给定高度的形态学扩展最大值之后:

enter image description here

然后细化给出:

enter image description here

您还可以操纵高度参数,或修剪细化图像。

Mathematica中的代码:

img = ColorConvert[Import["http://i.stack.imgur.com/zPtl6.png"],  "Grayscale"];
max = MaxDetect[img, .55]
Thinning[max]

编辑我遵循了自己的建议,.4的高度给出了更准确本地化的细分:

enter image description here

答案 1 :(得分:0)

我建议您研究二元形态转换,例如侵蚀和膨胀。 OpenCV()http://opencv.willowgarage.com/wiki/等图形库以及统计/矩阵工具Gnu Octave http://octave.sourceforge.net/image/function/bwmorph.html支持这些操作。