Two_Pass实现连通域分析

  Two-Pass就是通过扫描两遍图像,就可以将图像中存在的所有连通区域找出并标记。
  基本思路:首先将图像二值化,将不是background的像素点都标记为同一个初始label,background的像素点都标记为0,然后第一遍扫描过程中同一个连通区域内的像素中可能会被赋予一个或多个不同label,这些同一连通域的不同label是相连的,在此过程中记录下它们的连通性;第二遍扫描就是根据第一遍记录下来的所有label的连通性来统一一个连通域内不同的label值。

此处我们考虑4邻域的情况,设图像的初始label值为L,第一次扫描过程中扫描到图像中某个点的label值为lab[x, y],该点左邻label值为left,上邻label值为up,该点label赋值的赋值逻辑为:
if lab[x, y]不为0:
  if left, up都为0:
    lab[x, y]赋值为L, L++
  if left, up只有一个为0:
    lab[x, y]赋值为left,up中非零的一方
  if left, up都不为0:
    lab[x, y]赋值为left, up中最小的一方
else:
  扫描到background处直接跳过

在第一遍的扫描过程中用Union-Find记录各个label值之间的连通性。
C++代码实现:

//
//  main.cpp
//  Connected_Area
//
//  Created by FanYizhe on 2019/3/7.
//  Copyright © 2019年 FanYizhe. All rights reserved.
//

#include <iostre
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值