数字图像处理笔记——边缘连接和直线检测(Edge linking and line detection)

边缘连接

我们得到边缘图以后会出现是一个问题,就是由于有的像素偏暗,会出现边缘不连续的现象,这种情况我们就要采用边缘连接算法。我们对每一个边缘上的点进行遍历,以这个像素为中心看一个矩形窗内的其他像素,如果存在边缘幅度响应M与边缘相角响应α都与中心像素差别不太大的像素,那么把这个像素也纳为边界内

边缘跟踪

现在我们就有一个闭合的边缘了,那么我们怎么样对边缘上的点进行排序呢,下图演示了MOORE边界跟踪算法的步骤

当我们得到上图所示的顺序以后我们就能用链式码对其进行表示,为了能够将不同角度同一形状的图像匹配起来,我们可以编码进行两步操作:1.重排编码顺序使得编码总是从最小值开始 2.只对前后方向的差值进行编码(要注意的是我们需要对差值进行模8操作,即如果前后差为-2,则我们需要对其编码为6)。我们在matlab中可以用bwtraceboundary函数来对边缘进行追踪

多边形拟合

当我们有了边缘点后如何将他们拟合成一个多边形呢?多边形拟合(polygonal fitting)算法如下

以上算法可以对图中的直线进行拟合,但是如果图中不只有一条直线,而是存在很多条直线呢(很多像素不只属于同一条直线)?这种情况下我们有Hough变换来解决这个问题。对于一条直线,我们可以把它的方程写为法线式

那么对于过某一点的直线,我们可以得到一个所有可能直线的集合,我们可以把这个集合中直线对应的角度θ和距原点距离ρ画出来,那么我们可以知道一条直线上的像素的曲线都会过同一个点,这个点对应的p和θ,就是这条直线的p和θ。我们如果把图像中所有像素的曲线画出来,找到对应通过曲线数最多的部分点,那么我们可以认为这部分店对应的直线是存在于图像中的。

一下是具体的算法步骤,在matlab中我们可以用houghlines函数来实现这个功能

举一个例子如下

最后提的一点就是如果我们想只提取图中大纹理的直线,我们也可以实现对图像进行平滑处理,再经过hough检测

猜你喜欢

转载自blog.csdn.net/shanwenkang/article/details/84647390