【发布时间】:2014-10-28 17:48:31
【问题描述】:
我有一张这样的图片(阈值化、去噪等已完成):
我的最终输出应该是没有任何锯齿状边缘的图像,并且小于给定图像。我的意思是说,两张图片之间的唯一区别在于,在新的一张中,锯齿状边缘必须移除,而不是锯齿状边缘填充。像这样(最终的图像必须是红色边框内的区域,红色边框仅用于说明):
我正在考虑使用 Hough 变换,或者使用膨胀然后腐蚀,但似乎没有任何效果(可能是我的错,因为我之前没有与它们进行过详细的研究)。
请注意,我希望使用的语言是 MATLAB。
这有两个主要目标:
- 使用霍夫变换自己获取边缘
- 这样在使用 regionprops 时,'Extrema' 属性会返回所需的品脱,如下所示:
问题,以更简洁的形式:
- 我将如何在 MATLAB 中提取这个 T,使其没有粗糙的边缘,但整体数字不大于原始数字,如上图第二个所示?换句话说,我将使用哪组转换(在 MATLAB 中)来平滑图像的边界尽可能少地丢失区域(但不添加区域),例如那种粗犷消失了?
- 是否有更有效的方法来提取如上图 2 所示的角(极值)点,而无需执行第 1 步?
编辑: 更多示例图片:
注意:考虑的所有图像都将由彼此大约成 90 度的矩形组成,而不是其他图形。因此,例如,平滑具有弯曲边缘的图像将超出该问题的答案范围(或者甚至,就此而言,梯形,尽管我认为平滑 2 个直边应该是相同的,无论是否边缘是否有另一个平行)。
这里还有几张图片,供参考:
【问题讨论】:
-
你有什么问题?
-
对不起。我已经更新了问题,以便问题更加突出
-
您能否展示一些您希望该算法适用的图像。我认为编写适用于该图像的代码相对容易,但很难概括它,还是您只关心该图像?
-
我进一步认为,由于您的限制,即使对于此图像,问题也不是那么容易,因此红线应该位于图像内部。无论如何,我建议你看看
bwtraceboundary。它为您提供了一个 2 元素向量,因此您可以跟踪边界并从中获得边界([row col])的 2 元素向量。对此执行diff并找出边界改变方向的点。一旦你得到这些点,你只需对它们进行后处理以满足你的约束。您可能无法得到完全正确的解决方案,但这是我目前能想到的。 -
你要求你的红线段必须是轴对齐的,或者它们可以有任何斜率吗?
标签: image matlab image-processing