区域转换为二值图像_连通区域分析

连通区域分析是图像处理的重要操作,通常用于二值图像,找出相同像素值并相邻的区域。本文介绍了两种经典算法:Two-Pass(两次遍历)和Seed-Filling(种子填充法),并提供了OpenCV API和C++实现。通过连通域分析,可以对图像中的对象进行标记、计算面积等后续处理。
摘要由CSDN通过智能技术生成

a44fa9a5e6c20e7322d2ce470f7f795f.png

连通域分析是非常常见的图像处理操作。连通区域分析一般是针对二值图像,将具有相同像素值且相邻的像素找出来并标记。例如针对上面的同心圆图像,将每个圆环完整的找出来并比标记上不同的颜色。这里涉及如何定义相邻,什么是连通区域,什么是连通区域分析几个概念。

连通区域分析简介

  • 如何定义像素相邻
    一般可以分4领域和8领域。分别如下图所示

1cb18c8218a7c2eb81be47cfddbe069f.png
  • 连通区域 (connected component):图像中具有相同的像素值且相邻的区域
  • 连通区域分析 (connected component analysis):将图像中的联通区域找出来并标记,也称为联通区域标记。

一般会先将图像二值化,将图像分为前景区域和背景区域。相当于是已经知道如何区提取有效像素值,然后进行连通域分析,而如何提取感兴趣的区域是一个非常的问题,这里不做讨论。有两种经典的连通区域分析算法:1、Two-Pass(两次遍历), 2、 Seed Filling(种子填充)。

连通域分析算法

连通域是相同像素值的相邻像素组成的集合,将每个连通域设置一个标记,就完成了连通域分析。这里主要的难点是如何确定一个像素属于哪个连通区域。
假设已经将图像二值化为0、1,也就是背景为0,,前景为1。需要做的工作是给相连通的像素值(等于1)设置一个标记。

Two-Pass(两次遍历)

two-pass算法,顾名思义需要两次遍历图像,第一次遍历给图像所有的像素设置一个标记,并记录各个标记属于哪个连通域,第二次遍历将每个像素标记为所属的连通域。
具体流程如下:

1、 第一次遍历图像
对所有感兴趣的像素(值为1)执行以下操作

  • a 如果左领域和上领域都为0(假设是从上到下,从左至右遍历):
    赋予像素一个新的label, 然后label ++。即 labelImg(x,y) = label++;
  • b 当前像素的label与领域像素相同
  1. 将领域像素所属的label中最小的赋值给当前像素
    即: labelImg(x,y)= min(Neighbors)
  2. 记录label所属的联通区域,也就是那些label是一个联通区域。
    labelSet[i] = {label_n, ... , label_m}。可以采用不同的记录方式。

2、第二次遍历图像
第一遍已经给像素分配了一个label,同时知道每个label所属的联通区域。所以只需要把分配的label跟换为所属的联通区域。
第二遍遍历完成后具有相同label的像素组成了一个联通区域,可以对联通区域进行进一步分析,例如计算面积,计算外接矩形,计算质心等等。

如下动态展示two-pass算法的过程:

8c517f158b405e5f29971fde0cda7880.gif

Seed-Filling(种子填充法)

种子填充法从一个种子开始向领域周围搜索,发现有相等的像素值则标记为相同的label,然后继续在领域搜索,直到周围都没有相同的像素值后就找到一个联通区域。然后再以其他的种子,继续搜索下一个联通区域。这里的种子就是一个感兴趣的像素(值大于1)。
具体流程如下
1、 遍历图像,如果像素值为1则执行以下操作:
a 将当前像素作为种子,并赋予一个新的label,然后将其所有领域的感兴趣的像素(值大于1)的位置加入栈中。
b

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值