我有这样的图像(阈值处理,噪声消除等完成):
我的最终输出应该是没有任何锯齿状边缘的图像,并且小于给定图像.通过这个,我的意思是说,两个图像之间的唯一区别必须是在新图像中,必须去除锯齿状边缘,而不是填充锯齿状边缘.就像这样(最终图像必须是红色边框,红色边框仅用于说明):
我正在考虑使用Hough变换,或者使用扩张然后使用糜烂的方法,但似乎没有任何工作(可能是我的错,因为我以前没有对它们进行过多的细节处理).
请注意,我想要的语言是MATLAB.
这有两个主要目的:
>使用Hough变换获取边缘
>因此,当使用regionprops时,’Extrema’属性会返回所需的品脱,如下所示:
问题,以更简洁的形式:
>我如何在MATLAB中提取这个T,这样它没有粗糙的边缘,但整体图形不大于原始图形,如上面的第二个图所示?换句话说,我将使用什么样的变换(在MATLAB中)来平滑图像的边界,尽可能少地丢失区域(但没有添加区域)使得粗糙度消失?
>有没有更有效的方法来提取角点(极值)点,如上图2所示,而无需通过步骤1?
编辑:
还有一些示例图像:
注意:所有考虑的图像都将由大约彼此相差90度的矩形组成,而不是其他图形.因此,例如,对具有弯曲边缘的图像进行平滑处理将超出对该问题的答案的范围(或者甚至,就此而言,梯形,尽管我认为平滑2个直边应该是相同的,不管是否边缘有另一个与之平行的边缘).
以下是一些图片,供参考:
最佳答案 我不确定我的答案是否符合您的要求.我把它放在这里因为我觉得评论太久了.
>因为您希望最终输出小于输入图像,否则会侵蚀输入图像.您可以选择适当的内核大小.
>对此侵蚀图像执行角点检测.这将为您提供所有强大的角落,但没有任何订单
>追踪侵蚀图像的边界.这应该给你一个有序的边界像素列表
>现在,在这些有序边界点的帮助下,您可以订购之前找到的角落
>过滤角点,形成大约90度的角度.考虑到每个3个有序角点(两个绿点和下图中的红点),你可以这样做.这只是为了说明,而不是我计算的角点.在这个操作结束时,你有所有红点除了其他黄色和绿色角点之外,下面的图像位于强角处)
>现在你可以找到连接2个连续红点的线的方程
要么
>将最小二乘线拟合到每两个连续红点之间的点(包括)
>因为您在侵蚀图像上进行了所有这些处理,该图像基本上小于原始图像,所以您应该获得更小的形状