二值图像连通区域标记matlab,二值图像快速连通区域计算方法与流程
本发明涉及图像处理技术领域,具体涉及一种二值图像快速连通区域计算方法。
背景技术:
连通分量标记(或者称连通分量分析,连通区域标记)是图论应用中的一种算法,给二值图像中的每个连通区域标上一个特定的标号。该算法可用来对图像的目标进行定位和计数。连通分量标记通常在计算机视觉领域中对二值图像的连通区域进行检测,也可以处理彩色图像和更高维的数据。当将其集成到图像识别系统或者是人机交互系统是,该算法也起到重要作用。现在在生产环境中时用的二值图像连通域的计算主要有两种方法,两次扫描法(two-pass algorithm)和种子填充法(Seed Filling)。
两次扫描法(two-pass algorithm),算法的大致流程为:从左往右从上到下扫描图像,背景像素保持0不变,遇到1值时,分析它的8邻域(只考虑已被扫描的的像素点,即左边、左上、上和右上这四个方向的像素值)。
1.如果这四个方向的值都是0,那么该位置就创建一个新的标号(在原标号上加1);
2.如果这四个方向的非0值(即标号)都一样,那么该位置标号就是其领域的非0标号;
3.如果这四个方向的非0值有两个不同的标号,那么该位置标号就选其中之一,并记录这两个不同的标号(因为这两个标号是连通的,故视为等同的标号);
该算法主要存在的问题是,虽然算法简单易行,但是需要扫描一幅图像两次。算法的时间复杂度较高。
子填充法(Seed Filling),算法的大致流程为:选取一个前景像素点作为种子,然后根据连通区域的两个基本条件(像素值相同、位置相邻)将与种子相邻的前景像素合并到同一个像素集合中,最后得到的该像素集合则为一个连通区域。
下面给出基于种子填充法的连通区域分析方法:
1.扫描图像,直到当前像素点不为0:a、将此像素点作为种子(像素位置),并赋予其一个label,然后将该种子相邻的所有前景像素都压入栈中; b、弹出栈顶像素,赋予其相同的label,然后再将与该栈顶像素相邻的所有前景像素都压入栈中;c、重复b步骤,直到栈为空;此时,便找到了图像B中的一个连通区域,该区域内的像素值被标记为label;
2.重复第1步,直到扫描结束;就可以得到图像中所有的连通区域。
该算法主要存在的问题是,在时间复杂度上有所提高,但是频繁的栈操作会影响机器的性能。
在实时的序列图像处理中,当视频尺寸过大时,实时处理非常的困难。或者处理的时候,程序中栈操作过于频繁,影响机器的性能,甚至有栈溢出的危险。
技术实现要素:
本发明的目的在于克服现有技术的不足,提供一种二值图像快速连通区域计算方法,提高处理的速度,使能够实时的处理至少720p、25fps的视频,降低进程栈的使用频率,从而使程序更加顺畅。
本发明的目的是通过以下技术方案来实现的:
二值图像快速连通区域计算方法,包括以下步骤:
S01:分割,将待测目标图像按水平方向或垂直方向,分割成N份;
S02:计算,分别计算每一份目标图像中的连通区域个数并计为M;
S03:标记,对每一个连通区域的端点坐标进行标记并记录其坐标点;
S04:合并,计算每一个连通区域的坐标点,将端点坐标点相同或相近的连通区域合并成一个连通区域,将合并得到的连通区域个数计为P,未合并的连通区域个数计为S,则原目标图像中连通区域的总数为P+S。
优选的,所述N的取值为计算机CPU的核数;其原理是利用计算机的多核和编程的多线程技术,可以将计算时间缩短为原来的若干分之一。
优选的,所述步骤S01中待测目标图像按水平方向或垂直方向,平均分割成N份。按照水平或垂直方向分割所得的图像边界点的坐标整齐,可以使得连通区域合并计算的步骤中变得更加简单,平均分配可以使得计算机在处理每一份图像的时间相等,从而在整体上节约了计算时间。按水平方向进行分割时,同一条切割线上的所有端点纵坐标相同,反之,按垂直方向进行切割时,同一切割线上的横坐标相同,根据这一特点可以判断出改端点是在哪一个图像上,如果量个坐标点完全相同或基本相同但存在细微误差,则表示该两个端点属于同一个连通区域,则对该两个连区域相互合并,以3个连通区域为例说明,连通区域A、连通区域B、连通区域C,如果连通区域A、连通区域B存在坐标点相同或相近的端点时,则认为连通区域A和连通区域B属于同一个连通区域,同时若连通区域C、连通区域B存在坐标点相同或相近的端点,则表示连通区域B、连通区域C属于同一个连通区域,从而可以推导出连通区域A、连通区域B、连通区域C三者属于同一个连通区域。
优选的,所述步骤S02中计算每一份连通区域的方法采用两次扫描法或子填充法,也就是说对于切分后的单个图像,依然采用传统方法,然而鉴于每一份图像变成了原来图像的N分之一,所以在处理时间上,也变成了原来的N分之一,从而在整体上将时间缩短为原来的N分之一,加快了计算速度,同时每一份图的处理变得更加简单,从而解决了栈溢出的问题。
优选的,所述步骤S01将待测目标图像分成N份以后,对每一份图像依次进行编号,若待测目标图像按水平方向分割则由上至下或由下至上依次编号;若待测目标按垂直方向进行分割则从左至右或从右至左依次进行编号。
优选的,所述每一份图像中连通区域端点坐标用K(X,Y)表示,其中K表示图像编号,X、Y分别表示横坐标和纵坐标。
优选的,所述坐标点是指待测目标图像中像素点的值,除了利用像素点的特性进行坐标点标记以外,还可以采取用户自定义的方式确定图像的坐标系。
优选的,所述端点坐标相近是指相邻两份图像两端点坐标的X和Y的值误差分别不超过一个像素点单位,其原因在于连通区域是指相邻像素点彼此连通的区域,因此当两个端点坐标值超过一个像素点时则表示这两个端点之间存在“隔离带”,即这两个端点所在的连通区域并非彼此连通的区域。
优选的,所述端点坐标是指连通区域分布在分割线上的端点坐标,连通区域本身具备端点然而只有在分割时分布在分割线上的端点才是本方案采集的端点,其余部位的端点坐标本方案不采集,采集的依据是根据分割线的坐标值,例如图像水平分割,则与水平分割线纵坐标相同的点全部采集,其余点则不采集。
优选的,所述分割线的线宽宽度不超过一个像素点单位,同理的,当分割线的线宽超过一个像素点值,则有可能会将本身不连通的区域误认为是连通的区域,因此在进行图像分割时,务必保证分割处图像的边沿丢失尺寸不超过1个像素点。
本发明的有益效果是:和传统的计算方法相比较,本发明的优势在于将待测图像按计算机的核心数分割相应的分数,运用计算机的多核和编程的多线程技术,将每一幅图多核同时进行处理,可以将计算时间缩短为原来的若干分之一,同时也降低进程栈的使用频率,从而使程序更加顺畅。
附图说明
图1为本发明的流程图;
图2为实施例1待测目标图像未分割前图像;
图3为实施例1待测目标图像分割后编号为1的图像;
图4为实施例1待测目标图像分割后编号为2的图像。
具体实施方式
下面结合附图1-4和具体实施例进一步详细描述本发明的技术方案,但本发明的保护范围不局限于以下所述。
实施例
二值图像快速连通区域计算方法,本实施例以双核计算机为例进行说明,即计算机的CPU核数为双核,同样的选择将待测目标图像分割成两份,如图2-4,图2是待测目标图像,图3和图4分别是分割以后的图样,在本实施例中分割方向选择的是水平方向分割,分割线的线宽像素点选择为1。图像编号选择由上至下,即图3标号为1图4标号为2。通过肉眼可以直接获得图2中连通区域的个数为4个分别标记为1、2、3、4,下面安装本发明提供的方法进行计算。通过图3、图4可以知道每一份目标图像中的连通区域个数之和M=5;
其中被分割线切开的图3和图4中只有连通区域1,定义待测图样即图2的左下角为坐标原点,坐标点的单位以像素点为单位,横坐标X表示像素点的列数,纵坐标Y表示像素点的行数,分别测量图3和图4中连通区域1位于分割线上的端点,可以看出图像3有两个端点分布在切割线上,测得其坐标点分别为1(137,567)和1(153,567);图4中分布在切割线上的端点也有两个,测得坐标点分别为2(137,565)和2(153,565),即坐标点1(137,567)和坐标点2(137,565)属于同一连通区域,坐标点1(153,567)和坐标点2(153,565)属于同一个连通区域,其纵坐标点相差一个像素点,是由于切割线的宽度为1个像素点,在图像分割过程中出现图像像素点丢失的现象,为了避免图像在分割过程中大范围的像素点丢失导致连通区域的计算误差,切割线的宽度应该越低越好,当期小于一个像素点时,测得的端点坐标点完全相同的两个区域可以互相合并成为一个连通区域;也就是说在本实施例中合并得到的连通区域个数P=1,未合并的连通区域个数S=2,待测目标图像中连通区域的个数P+S=3,因此该方法测得的连通区域个数并无误差与实际相同。
除以上实施例所举之外,本发明还可以根据计算机的核数选择待测目标图像的分割分数,同时为了提高计算精度,在进行图像分割时,分割线的宽度应该越小越好。
优选的,除上述实施例提到的水平分割待测目标图像以外,还可以选择垂直将图像进行分割,并根据分割线所在的坐标位置,查找位于分割线上的连通区域端点坐标,并将端点坐标值相同或相近的连通区域进行合并成为一个连通区域,为了方便分割区域的拼接,对于4核及其以上的计算机处理时需要将待测目标图像分割成多份,因此可以对每一条分割线进行编号,位于同一分割线上的坐标进行相同的编号,从而使得连通区域在合并时可以简单准确的完成拼接。
以上所述仅是本发明的优选实施方式,应当理解本发明并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文所述构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本发明的精神和范围,则都应在本发明所附权利要求的保护范围内。
二值图像连通区域标记matlab,二值图像快速连通区域计算方法与流程相关推荐
- 用matlab给图片标记区域,MATLAB二值图像连通区域标记(两步法)
posted on2012-12-06 16:24Dsp Tian 两步法中第二步是比较麻烦的,其中用到了不相交集合的一些理论,尤其是不相交集合森林,这里的find_set函数就是参考<算法导论 ...
- python 连通区域_二值图像连通区域标记
原像素矩阵M为: 根据原像素矩阵M大小,初始化标记矩阵labelM: 算法流程 1. 首先要确定是标记8邻域连通还是4邻域连通,如果是8邻域连通,就用模板1,如果是4邻域连通,就用模板2.中间像 ...
- opencv(十三)-快速连通区域分析
索引目录 1.连通区域标记算法 2.剔除小连通区域 参考 1.连通区域标记算法 连接区域标记算法(connected component labeling algorithm)是图像分析中最常用的算法 ...
- matlab函数_连通区域 bwareaopen bwarea
matlab函数_连通区域 1. matlab函数bwareaopen──删除小面积对象 格式:BW2 = bwareaopen(BW,P,conn) 作用:删除二值图像BW中面积小于P的对象,默认情 ...
- matlab函数_连通区域regionprops的相关解释
声明:内容来源:https://www.cnblogs.com/einyboy/archive/2012/08/03/2621820.html 最近在学习对于图像的连通域的求取方法,尤其对于多连通域的 ...
- 两种连通区域标记算法
一. One-Pass对应的标记算法(Label.h) 使用: unsigned char label = (unsigned char )fspace_2d(imgMask2.row,imgMask ...
- 【转】matlab函数_连通区域
转载自einyboy的博文Matlab的regionprops详解 1. matlab函数bwareaopen──删除小面积对象 格式:BW2 = bwareaopen(BW,P,conn) 作用:删 ...
- matlab 图像连通域,matlab二值图像连通域
这就是说bwlabel是用来标记二维的二值图像中的connected components的,简言之,就是黑背景下面有多少白的块(连通组件?真别扭),反正就是从黑背景甄别白块块的.就...... 8. ...
- Matlab实现对图片中的圆形区域标记并计数
Matlab对图片中的圆形区域标记并计数 Part 1 Part 2 Part 1 我们拿到的是这样一张卫星图 要求对中间部分的几个大油罐(白色圆形区域)进行计数,就是下图中间的部分(图片被裁剪后) ...
- Matlab二值图像进行轮廓提取
0 前言 本文主要总结一下在matlab中可用于进行轮廓提取的函数. 1 bwperim 根据参考资料[2]的提示,可以使用bwperim()函数进行轮廓提取,具体代码如下: %读取原图 im = i ...
最新文章
- Python 扩展 Op
- 独家|深度学习训练和推理之间有什么差异?
- [Silverlight资源]处理bmp,gif及ico图像类文件
- php处理json请求(php获取post请求的json数据的实现方法)
- 全局脚手架了解一下【fle-cli】
- 转:SCI、EI和ISTP收录号的查询方法
- Linux shell编程学习笔记-----第十六章
- Linux usb bus日志如何打开,从linux usb bus节点来认识usb linux usb认识
- mysql 镜像数据_mysql官方镜像数据存储问题
- [转]博士的学习经验!读后,令人茅塞顿开的科研经典之作
- C#下的Raw Socket编程实现网络封包监视
- 拼接sql语句参数绑定
- 英语对混职场有用么?
- nginx自签ssl证书
- Extjs Design 可视化开发工具
- 打开word文档提示文件未找到_Word格式转换大全!三分钟把100份Word文档转为PDF、PPT、JPG文件...
- 以虎嗅网4W+文章的文本挖掘为例,展现数据分析的一整套流程
- 传统语音增强——基于先验信噪比的维纳滤波语音降噪算法
- 第一代程序员王小波,逝世 25 周年
- S7-200SMART 模拟量输入输出