邻接矩阵判断是否连通_找连通区域交叉点方法

最近遇到这样一类问题,如何求图像中连通区域交叉点。直接上图说明。

01f8fcf74093aa582cccec96722a0f8e.png

图中

点为连通区域交叉点。那么如何找到交点的位置呢?难点在于实际的连通区域的宽窄大小不同,并且并不都是直线,也有一些曲线,本文介绍一种有效的方法用于搜索交叉点。
  • 图像细化

首先对图像进行细化处理,由于连通区域是有一定的宽度,在遍历整个连通区时不能有效的判断交叉点的特征,将图像细化后,图像交叉点的特征将更加明显。本文用到得到细化算法是查表法,这里不详细介绍,附上细化算法链接。细化后的效果如图所示。

e9cd988840df1fa838dec1318700ecf9.png
  • 去毛刺并找交点

由细化后的图像可以看出,细化效果并不是理想中的只将连通区域的主干提取出来,还有一些毛刺。

为去毛刺,首先一视同仁,定义毛刺与主干的连接处也为交点,只不过毛刺是比较短的分支。

如果从细化后的某一端点遍历整个连通区,统计每个点的8邻域,8邻域图像会被分为3类:

  1. 当前所在点的8邻域内只有一个点,那么当前点是端点,如图所示,红色点表示当前点,黑色点是8邻域内的点。

05427e2beda022bdc53f1ef71cb217d5.png

2.当前所在点的8邻域内有两个点,那么当前点是主干上的点,其中8邻域内的一个点是其上一个点,另一个点是其要遍历的下一个点。

ca6388f78bd34913e2d9e10f6920e428.png

3.当前所在点的8邻域内有大于等于三个点,那么当前点是交叉点。其中8邻域内的一个点是其上一个点,另外的点是其他分支的起始点。

590cc8ee4a3b0cf232185588424ce87c.png

现在连通区域内点的所有情况都被列出。去毛刺算法如下:

1)从细化后的连通区域某一端点开始搜索所有点,搜索方法是深度优先搜索;

2)每次都判断当前点是前面介绍的三种点的哪一种点,如果是主干上点,继续搜索;如果交叉点,那么继续遍历交叉点上的每个分支;如果是端点,那么结束当前搜索回到上一次搜索起点并统计该次搜索的点数

,这个点数
即为该分支的长度,那么根据分支长度可以判断是否为毛刺,设置毛刺长度阈值
。如果分支长度
,那么保留该分支并记录该分支起点为交叉点,如果分支长度
,那么判断该分支为毛刺,删除该分支。

3)直到所有点被遍历完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值