二值图像连通域标记快速算法实现

二值图像连通域标记快速算法实现
二值图像连通域标记快速算法实现

二值图像连通域标记快速算法实现

算法描述

首先,在进行标记算法以前,利用硬件开辟独立的图像标记缓存和连通关系数组,接着在视频流的采集传输过程中,以流水线的方式按照视频传输顺序对图像进行逐行像素扫描,然后对每个像素的邻域分别按照逆时针方向和水平方向进行连通性检测和等价标记关系合并,检测出的结果对标记等价数组和标记缓存进行更新,在一帧图像采集传输结束后,得到图像的初步标记结果以及初步标记之间的连通关系,最后,根据标号对连通关系数组从小到大的传递过程进行标号的归并,利用归并后的连通关系数组对图像标记缓存中的标号进行替换,替换后的图像为最终标记结果,并且连通域按照扫描顺序被赋予唯一的连续自然数。

图 1 标记算法流程

本文快速二值图像连通域标记算法分为三个环节:

1.图像初步标记:为每个像素赋予临时标记,并且将临时标记的等价关系记录在等价表中

2.整理等价表:这一环节分为两个步骤:

(1)将具有等价关系的临时标记全部等价为其中的最小值;

(2)对连通区域以自然数顺序重新编号,得到临时标记与最终标记之间的等价关系。

3.图像代换:对图像进行逐像素代换,将临时标记代换为最终标记.经过3个环节处理后,算法输出标记后的图像,图像中连通域按照由上到下,由左至右出现的顺序被标以连续的自然数。

1 图像初始标记

标记算法符号约定:算法在逆时钟方向检测连通域时用w1,w2表示连续两行的图像数据,在紧接着的顺时钟方向连通域检测时用k0,k表示连续两行经过

逆时钟方向标记后的图像数据。其在工作窗口的位置在图2、3中分别说明;对初始逆时针方向临时标记用Z表示。Z初始标记值为1。

二值图像连通域标记算法采用8连通判断准则,通过缩小标记范围剔除了图像的边界效应。为了简化标记处理过程,使标记处理在硬件对一帧图像传输操作时间内结束,标记处理利用中间数据缓存分为连续的两种类型,其中类型1用于直接图像序列传输,硬件发起图像序列传输时,类型1采用逆时钟顺序连通域检测,对2×3工作窗口中的二值像素进行初始标记。类型2对经过类型1初始标记过的图像数据再进行水平方向的连通域检测和归并,然后把标记结果存入图像存储区。

图像初始标记类型1:

步骤1读取像素w1(2)、w1(1)、w1(0)、w0(2)、w0(1),以及相应的二值像素值。

步骤2读取像素w0(1),按照逆时针方向依次与w1(0)、w1(1)、w1(2)、w0(2)比较,若w0(1)= w1(0),则k0(1)=k(2);若w0(1)= w1(1),则k0(1)=k(1);若w0(1)= w1(2),则k0(1)=k(0);若w0(1)= w0(2),则k0(1)=k0(0);否则(即w0(1)≠(w1(2)、w1(1)、w1(0)、w0(2)),k0(1)= Z;Z ++。

步骤3写入等价关系表,以Z为地址将Z写入等价关系数组。

图 2 逆时钟方向初始标记的工作窗

图像初始标记类型2:

步骤1判断经过逆时针方向标记后,如果w0(1)= w0(2)= 1,而标记灰度k0(1)≠k0(0),则进行下一步骤。

步骤2 假设k0(1)> k0(0),判断lab(k0(1))=k0(1)或者lab(k0(1))=k0(0),则lab(k0(1))=k0(0),否则对标记数组进行追踪置换。跳转至步骤3。

步骤3 假设k0(1)< k0(0),判断lab(k0(0))=k0(0)或者lab(k0(0))=k0(1),则lab(k0(0))=k0(1),否则对标记数组进行追踪置换。

追踪置换方法:步骤2的追踪置换令t= lab(k0(0));若lab(t)≠t,则

令t= lab(t),重复执行,直lab(t)=t;步骤3的追踪置换令t1= lab(k0(1)),对lab(k0(1))同样执行上述追踪过程。

图 3 水平方向初始标记的工作窗

2 等价表整理与图像代换

首先,从等价表地址1开始扫描等

价表,依次检查其中各个临时标记是否存在等价关系,若存在,则以标记值作为等价表地址的数据更新等价表。由于整理过程从等价表地址1开始,因此对整个等价表的扫描可以一遍结束。

图像代换环节对临时标记图像中的每个像素进行代换,生成最终的标记后图像。具体做法是:设图像中坐标为(n,m)的像素的临时标记值为S,则将lab (S)写入图像中(n,m)位置。代换后得到的图像,其中的连通区域按照由上到下,由左至右出现的顺序被标以惟一的自然数。

3 算法特点分析

算法设计具有以下特点:

a.图像初步标记过程中,在记录标记等价信息的同时对等价表进行初步整理,这样安排,一方面可以保证区域之间存在复杂连通关系时,等价表能够保存已经检测到的全部等价关系;另一方面,在以硬件电路实现标记算法时,图像初步标记和等价表初步整理的过程可以并行执行,等价表的初步整理,能够简化随后的等价表整理操作,相当于压缩了标记执行的全过程。

b.在本算法中,采取两方面措施减少临时标记数量:其一,反复利用8邻域范围内生成的所有标记信息,在逆时针顺序8邻域范围标记后借助图像传输的顺序进行水平方向的等价标记归并,降低了需要赋予新标记值的概率;其二,在等价表整理时,归并等价标记时按照等价表地址从小到大的的顺序进行比较替换,使等价标记取较小值并且不会遗漏等价标记。其三,结合视频数据流传输方式,采用乒乓存储结构进行流水线处理,同时进行图像标记和图像标记替换。使图像标记达到实时处理的效果。

二值图像连通域标记算法与代码

二值图像连通域标记算法与代码 这里列举二值图像连通域标记算法包括直接扫描标记算法和二值图像连通域标记快速算法 一、直接扫描标记算法把连续区域作同一个标记,常见的四邻域标记算法和八邻域标记算法。 1、四邻域标记算法: 1)判断此点四邻域中的最左,最上有没有点,如果都没有点,则表示一个新的区域的开始。 2)如果此点四邻域中的最左有点,最上没有点,则标记此点为最左点的值;如果此点四邻域中的最左没有点,最上有点,则标记此点为最上点的值。 3)如果此点四邻域中的最左有点,最上都有点,则标记此点为这两个中的最小的标记点,并修改大标记为小标记。 2、八邻域标记算法: 1)判断此点八邻域中的最左,左上,最上,上右点的情况。如果都没有点,则表示一个新的区域的开始。 2)如果此点八邻域中的最左有点,上右都有点,则标记此点为这两个中的最小的标记点,并修改大标记为小标记。 3)如果此点八邻域中的左上有点,上右都有点,则标记此点为这两个中的最小的标记点,并修改大标记为小标记。 4)否则按照最左,左上,最上,上右的顺序,标记此点为四个中的一个。代码实现: #include #include #include //连通区域属性结构 typedef struct tagMarkRegion { std::list MarkPointList;//点列表 RECT rect; }MarkRegion; //定义MarkMap 结构,用来存放等价对 typedef struct tagEqualMark { int MarkValue1; //标记值 int MarkValue2; //标记值 } EqualMark; //定义MarkMapping 结构,用来存放标记映射关系 typedef struct tagMarkMapping

(整理)MATLAB 标注连通域.

matlab 标注连通域 clear; clc; f=imread('c:\1.jpg'); gray_level=graythresh(f); f=im2bw(f,gray_level); [l,n]=bwlabel(f,8) imshow(f) hold on for k=1:n [r,c]=find(l==k); rbar=mean(r); cbar=mean(c); plot(cbar,rbar,'Marker','o','MarkerEdgeColor','k','MarkerFaceColor','k','MarkerSize',10); plot(cbar,rbar,'Marker','*','MarkerEdgecolor','w'); end 主要概念: 1. 2.4连接 8连接 0 1 0 1 p 1 ===> 4连接,p为当前像素点。 0 1 0 1 1 1 1 p 1 ====》8连接,p为当前像素点。 1 1 1 3.bwlabel()函数 语法: [ L, num]=bwlabel(f,conn) 其中f是一副二值图像,conn用来指定期望的连接(不是4就是8),默认为8,输出L称为标记矩阵,参数num给出所找到连接分量的总数。 4.find()函数 该函数非常有用,会返回指定条件的索引值,在标记矩阵中的作用是返回对应对象的索引。 I = FIND(X) returns the linear indices corresponding to the nonzero entries of the array X. X may be a logical expression. Use IND2SUB(SIZE(X),I) to calculate multiple subscripts from the linear indices I. find(bwlabel(bw)==2)表示的意思是连通域2中的数值所在向量的位置。

基于FPGA的二值图像连通域标记快速算法实现

基于FPGA的二值图像连通域标记快速算法实现 摘要:在图像自动目标识别和跟踪过程中,首先对图像目标进行阈值分割提取,得到的二值图像通常包含多个连通区域,系统利用图像目标的形状特性对可疑高威胁的飞行目标进行自动识别。因此,需要对各连通区域块进行分别检测判断,本文采用改进的适合FPGA实现的快速标记算法对各连通域进行检测提取。 关键词:FPGA,二值图像连通域,快速标记算法,可编程逻辑 贺明 1 引言 在图像自动目标识别和跟踪过程中,首先对图像目标进行阈值分割提取,得到的二值图像通常包含多个连通区域,系统利用图像目标的形状特性对可疑高威胁的飞行目标进行自动识别。因此,需要对各连通区域块进行分别检测判断,本文采用改进的适合FPGA实现的快速标记算法对各连通域进行检测提取。 实现二值图像连通体检测通常采用的方法有下几种[1] [2] [3]:区域生长法:首先对图像进行逐行(列)扫描,每遇到一个未标记的“1”像素点,就分配其一个未使用过的标号,然后对其领域进行检测,如有未标记过的“1”像素,则赋予相同的标号。反复进行这一操作.直到不存在应该传播标号的“1”像素。然后继续图像行(列)扫描,如检测判未标记的“1”像素则赋予其新的标号,并进行与以上相同的处理。整个图像扫描结束,算法也就终止。这种方法可准确地检测出各种类型的连通体.但处理时间也较长.因为要逐一检测每一“1”像素的邻域,且出现“1”像素的重复扫描。跟踪算法:二值图像中每个取值为“1”的像素被标记一个与其坐标相关的标号,如由n,m串构成的数。热后,扫描标记后的图像,并将每十像素的标号改为其邻域内的最小标号。反复执行这个过程,直到不需要作标记更改为止。用这种方法处理小而凸的目标时,收敛速度较慢。 本文以适合FPGA实现为目的,提出一种具有计算规则性的快速二值图像连通域标记算法。与传统的二值图像标记算法相比,该算法具有运算简单性、规则性和可扩展性的特点,适合以FPGA实现。选用在100MHz工作时钟下,处理384×288像素的红外图像能够达到400帧/秒以上的标记速度,足够满足实时目标识别系统的要求。处理速度可以满足大部分实时目标识别系统的要求。该算法同样可以软件编程方式应用于嵌入式DSP系统中。 2 算法描述 首先,在进行标记算法以前,利用硬件开辟独立的图像标记缓存和连通关系数组,接着在视频流的采集传输过程中,以流水线的方式按照视频传输顺序对图像进行逐行像素扫描,然后对每个像素的邻域分别按照逆时针方向和水平方向进行连通性检测和等价标记关系合并,检测出的结果对标记等价数组和标记缓存进行更新,在一帧图像采集传输结束后,得到图像的

二值化图像8联通域标记

//基于区域生长法的连通域标记(C语言) 区域生长法利用区域生长的思想,一次生长过程可以标记一整个连通区,只需对图像进行一次扫描就能标记出所有连通区。算法描述如下: Step1、输入待标记图像bitmap(二值化原图,SDRAM内,u16,只有0x0000与0xffff),初始化一个与输入图像同样尺寸的标记矩阵labelmap(SDRAM内,大小与二值化原图相同,u16,初值0x0000),一个队列queue(SDRAM内,大小与二值化原图相同)以及标记计数labelIndex (unsigned char,最大值255,初值0); Step2、按从左至右、从上至下的顺序扫描bitmap,当扫描到一个未被标记的前景像素p时(0xffff,2个字节,unsigned short int),labelIndex加1,并在labelmap中标记p(相应点的值赋为labelIndex),同时,扫描p的八邻域点,若存在未被标记的前景像素,则在labelmap 中进行标记,并放入queue中,作为区域生长的种子; Step3、当queue不为空时,从queue中取出一个生长种子点p1,扫描p1的八邻域点,若存在未被标记过的前景像素,则在labelmap中进行标记,并放入queue中; Step4、重复Step3直至queue为空,一个连通区标记完成; Step5、转到Step2,直至整幅图像被扫描完毕,得到标记矩阵labelmap和连通区的个数labelIndex。 该算法最坏情况下,将对每个像素点都进行一次八邻域搜索,算法复杂度为O(n)。 //辅助队列 typedef struct QNode { int data; struct QNode *next; }QNode; typedef struct Queue { struct QNode* first; struct QNode* last; }Queue; void PushQueue(Queue *queue, int data) { QNode *p = NULL; //p = (QNode*)malloc(sizeof(QNode)); p->data = data; if(queue->first == NULL) { queue->first = p; queue->last = p; p->next = NULL; } else

第7章 边沿检测与提取,轮廓跟踪

第7章边沿检测与提取,轮廓跟踪 我们在第三章介绍平滑与锐化时引入了模板操作,今天还要用到它。 7.1边沿检测 我们给出一个模板和一幅图象。不难发现原图中左边暗,右边亮,中间存在着一条明显的边界。进行模板操作后的结果如下: 。 可以看出,第3、4列比其他列的灰度值高很多,人眼观察时,就能发现一条很明显的亮边,其它区域都很暗,这样就起到了边沿检测的作用。 为什么会这样呢?仔细看看那个模板就明白了,它的意思是将右邻点的灰度值减左邻点的灰度值作为该点的灰度值。在灰度相近的区域内,这么做的结果使得该点的灰度值接近于0;而在边界附近,灰度值有明显的跳变,这么做的结果使得该点的灰度值很大,这样就出现了上面的结果。 这种模板就是一种边沿检测器,它在数学上的涵义是一种基于梯度的滤波器,又称边沿算子,你没有必要知道梯度的确切涵义,只要有这个概念就可以了。梯度是有方向的,和边沿的方向总是正交(垂直)的,例如,对于上面那幅图象的转置图象,边是水平方向的,我们可以用 梯度是垂直方向的模板检测它的边沿。 例如,一个梯度为45度方向模板,可以检测出135度方向的边沿。 1.Sobel算子

在边沿检测中,常用的一种模板是Sobel算子。Sobel算子有两个,一个是检测水平边沿的 ;另一个是检测垂直平边沿的。与和 相比,Sobel算子对于象素的位置的影响做了加权,因此效果更好。 Sobel算子另一种形式是各向同性Sobel(Isotropic Sobel)算子,也有两个,一个是检测水平边 沿的,另一个是检测垂直平边沿的。各向同性Sobel 算子和普通Sobel算子相比,它的位置加权系数更为准确,在检测不同方向的边沿时梯度的幅度一致。 下面的几幅图中,图7.1为原图;图7.2为普通Sobel算子处理后的结果图;图7.3为各向同性Sobel算子处理后的结果图。可以看出Sobel算子确实把图象中的边沿提取了出来。 图7.1原图 图7.2普通Sobel算子处理后的结果图

轮廓特征和拓扑关系的图像检索方法

902008,44(5)Computer-EngineeringandApplications计算机工程与应用 一种基于轮廓特征和拓扑关系的图像检索方法 曾接贤,毕东格 ZENGJie-xian,BIDong-ge 南昌航空大学无损检测技术教育部重点实验室,南昌330063 KeyLaboratoryofNondestructiveTest,MinistryofEducation,NanchangHangkongUniversity,Nanchang330063,China E-mail:zengjx58@163.com ZENGJie-xian,BIDong-ge.Imageretrievalmethodbasedoncontourcharacterandspatialtopology.ComputerEngi-neeringandApplications,2008。44(5):90-92. Abstract:AnewmethodforCBIRbasedonshapeFourierdescriptorispresented.Thefirststepofthismethodispre-processingtheimage,thencarryingtheimagesegmentationbasedontopologyrelationship,andthenusecontourtrackingmethodtoobtainthecontourfeaturewhichlaterdescribedbyFourierdescriptorusingFFT,atlast,usingblockdistancetomeasurethesimilaritybetweentheoriginalpictureandtargetpicture.Inordertoverifytheeffectivenessofthemethod,weexperimentedunderMATLABandVC++environment.Byseveralexperiments,theresultsshowthatthismethodiseffectiveandalsobyalgorithmanalysis,weconcludethatthemethodisrationalforimageretrieval. Keywords:shapedescribing;Fourierdescriptor;spatialtopology;comparability 摘要:提出了一种利用轮廓特征和拓扑关系的图像检索方法。首先对图像进行预处理,然后根据空间拓扑关系进行区域分割,再对各个区域进行轮廓跟踪,并用傅立叶描述子对所提取区域的轮廓进行描述,最后用街区距离进行相似度的判定。为了验证该算法的有效性,在MATL^.B和VC++环境下进行了实验,通过实验结果和算法分析,证明了该方法的合理性和有效性。 关键词:形状描述;傅立叶描述子;空间拓扑关系;相似度 文章编号:1002—8331(2008)05—0090—03文献标识码:A中图分类号:TP391.3 1引言 在计算机视觉中,形状特征属于图像的中间层特征。形状特征作为刻画图像中物体和区域特点的重要特征,是描述高层视觉特征(如目标、对象等)的重要手段,而目标、对象对获取图像语义尤为重要。利用形状特征进行检索可提高检索的准确性和效率fl】。但是基于形状特征的图像检索,主要存在有四个问题:一是图像分割算法还不能做到自适应;二是形状描述子难于提取[21。三是特征空间的相似性与人视觉系统感受到的相似性也有差别,四是由于视点的变化可能会产生各种失真。所以,基于形状的图像检索还缺乏比较完善的数学模型,目标变形时检索结果也不可靠;另外,要全面描述形状对计算和存储都有较高的要求。 基于空间关系的查询,其主要优点是能比较完整地表达图像各部分的信息,并能比较方便地无示例或用自然语言查询。空间位置关系的特征还可加强对图像内容的描述区分能力t3]。空间关系是图像内部目标的重要特征131,但是如果单独用空间关系描述物体的特征就显得模糊,常常很难用一个确定的表达式描述清楚,它们常由一组互相联系又有矛盾的条件所限定,每个条件在具体情况下得到不同程度的满足。常用的空间关系一般包括朝向关系和拓扑关系,它们都可以通过自然语言来描述。由于空间关系的模糊性,根据空间关系来确定检索对象的相似性是一个复杂的工作。 物体的形状及其空间关系既是图像中的核心内容,也是人们识别图像、分类图像的重要依据。但是目前基于形状和空间关系的图像检索还仅处于研究二值商标图像。在文献【1]提出了.利用小波分解技术的形状和空间关系的图像检索方法,但是小波分解的多分辨率和小波分解的方向性,使得该描述子不具有旋转和尺度变换的不变性。如果检索的图像内容包括运动的物体,则不能得到好的检索结果。 鉴于此,提出了一种基于轮廓特征和拓扑关系的图像检索方法。首先利用空间拓扑关系进行图像分割;然后提取区域轮廓特征,并用傅立叶描述子进行描述;最后再把该描述子应用于基于形状的图像检索中。通过实验验证了该算法的有效性和合理性。 基金项目:国家自然科学基金(theNational‘NaturalScienceFoundationofChinaunderGrantNo.60675022);江西省自然科学基金(theNaturalScienceFoundationofJiangxiProvinceofChinaunderGrantNo.0311019);江西省教育厅资助科研课题(theResearchPmjectofDe一 ● partment ofEducationofJiangxiProvince)。 作者简介:曾接贤(1958一),男,教授,主要从事工程图学、计算机图形学和计算机视觉等方面的研究;毕东格(1981一),女,硕士研究生,主要研究方向为计算机视觉与图像处理。 收稿日期:2007-06—27修回13期:2007—09—07

二值图像连通域标记算法与代码 收藏

二值图像连通域标记算法与代码收藏 10:19:42二值图像连通域标记算法与代码 这里列举二值图像连通域标记算法包括直接扫描标记算法和二值图像连通域标记快速算法 一、直接扫描标记算法把连续区域作同一个标记,常见的四邻域标记算法和八邻域标记算法。 1、四邻域标记算法: 1)判断此点四邻域中的最左,最上有没有点,如果都没有点,则表示一个新的区域的开始。 2)如果此点四邻域中的最左有点,最上没有点,则标记此点为最左点的值;如果此点四邻域中的最左没有点,最上有点,则标记此点为最上点的值。 3)如果此点四邻域中的最左有点,最上都有点,则标记此点为这两个中的最小的标记点,并修改大标记为小标记。 2、八邻域标记算法: 1)判断此点八邻域中的最左,左上,最上,上右点的情况。如果都没有点,则表示一个新的区域的开始。 2)如果此点八邻域中的最左有点,上右都有点,则标记此点为这两个中的最小的标记点,并修改大标记为小标记。 3)如果此点八邻域中的左上有点,上右都有点,则标记此点为这两个中的最小的标记点,并修改大标记为小标记。 4)否则按照最左,左上,最上,上右的顺序,标记此点为四个中的一个。 代码实现: #include #include #include //连通区域属性结构 typedef struct tagMarkRegion

{ std::list MarkPointList;//点列表 RECT rect; }MarkRegion; //定义MarkMap 结构,用来存放等价对 typedef struct tagEqualMark { int MarkValue1; //标记值 int MarkValue2; //标记值 } EqualMark; //定义MarkMapping 结构,用来存放标记映射关系typedef struct tagMarkMapping { int nOriginalMark; //第一次扫描的标记 int nMappingMark; //等价整理之后对应标记 } MarkMapping; /* 功能说明:八连通标记 参数说明:I,表示图像数据指针 ImageWidth,表示图像宽 ImageHeight,表示图像高

用vc++实现连通区域标记

用阳卡争|饕现唐≯’雾蓬通区匆《稼萄参I|i |i。;:: 一、引言 用图像处理方法做目标检测的一般顺序是:图像预处理、边缘检测、阈值分割、区域标记、形状判断分析。 进行区域标记之前的图像一般已经被处理为二值图像。如图1所示,二值图像中可能有多个连通区域。进行图像检测的时候往往关心的是每个连通区域各自的特性。这就需要使用区域标记的方法把不同的连通区域区分开来。 图1经过前期处理所得到的二值图像 二、连通区域 像素间的连通性是确定区域的一个重要概念。在二维图像中,假设目标像素周围有m(m<=8)个相邻的像素,如果该像素灰度与这m个像素中某~个点A的灰度相等,那么称该像素与点A具有连通性。常用的连通性有4连通和8连通。4连通一般选取目标像素的上、下、左、右四个点。8连通则选取目标像素在二维空间中所有的相邻像素。我们以下讨论的都采用了在实践中常选用的8连通区域。 将所有具有连通性的像素作为一个区域则构成了一个连通区域。那么对于图1,每个分离的白色目标区域被认为是一个连通区域。要注意的是,黑色背景同时也是一个连通区域。当然背景也可能被目标分成多个连通区域。目标和背景都是相对而言的。 三、标记算法 图像处理中有很多不同的标记算法。有些简单的算法只 玉案静。。豫玲。褰建永金赞 适合标记方形、圆形等规则的形状,并不是很实用。像素标记法和游程连通性分析是两种实用的方法,能够标记出符合连通性质的所有连通区域。这里我们只介绍易于理解的像素标记法,游程连通性分析可以参看《图像处理和分析上册》章毓晋编著P.206的介绍。 假设图像中目标像素的灰度为1,背景像素灰度为o。标记算法只对目标像素进行标记,而不针对背景像素。 首先对一幅图像从左到右、从上到下进行扫描。假如当前像素的灰度值为0,就移到下一个扫描位置。假如当前像素的灰度值为1,检查它左、左上、上、右上这4个相邻像素(根据所采用的扫描次序,当我们到达当前像素时这4个相邻像素已经被处理过)。如果上述4个相邻像素的灰度值都为0,就给当前像素一个新的标记值。如果4个相邻像素中只有一个像素P的灰度值为l,就把P像素的标记值赋给当前像素。如果4个相邻像素中有m(1<m<=4)个像素的灰度值为l,则按照左、左上、上、右上的优先顺序,确定当前像素的标记值。然后对这m个像素所拥有的标记值做等价对,并将其归入一个等价对数组中。例如,4个像素的灰度值都为1时,将左边像素的标记值赋给当前像素,然后做出左等价左上,左等价上,左等价右上三个等价对,最后将这三个等价对加入等价对数组。第一次扫描结束后,所有灰度值为1的点都已经被标记过,但有些标记是等价的。 整理等价对数组,把等价对整理为等价关系。进行第二次图像扫描,根据整理所得的等价关系来进行重新标记。第二次扫描结束之后,所有灰度值为1的目标区域都被标记了不同的标记值。根据不同的标记值就可以区分不同的连通区域。 四、算法实现 本文采用Vc++实现“像素标记法”。这里所处理的图像为二值化之后的8位BMP图像。关于图像的读入、显示等方面,很多文章都有详细的叙述,这里就不再赘述了。 利用VC++的Classwizard创建cImage类,增加如下成员变量。 Iongm_JngWldth://图像宽 Iongm_JngwldthBytes://图像宽所占字节数

轮廓跟踪

轮廓跟踪 (2009-05-25 15:10:14) 转载▼ 标签: 杂谈 在识别图象中的目标时,往往需要对目标边缘作跟踪处理,也叫轮廓跟踪。顾名思义,轮廓跟踪就是通过顺序找出边缘点来跟踪边界的。若图象是二值图象或图象中不同区域具有不同的象素值,但每个区域内的象素值是相同的,则如下算法可完成基于4连通或8连通区域的轮廓跟踪。 步骤1:首先按从上到下,从左到右的顺序扫描图象,寻找没有标记跟踪结束记号的第一个边界起始点A0,A0是具有最小行和列值的边界点。定义一个扫描方向变量dir,该变量用于记录上一步中沿着前一个边界点到当前边界点的移动方向,其初始化取值为(1)对4连通区域取dir=3; (2)对8连通区域取dir=7; 步骤2:按逆时针方向搜索当前象素的3*3邻域,其起始搜索方向设定如下: (1)对4连通区域取(dir+3)mod 4; (2)对8连通区域,若dir为奇数取(dir+7)mod 8;若dir为偶数去(dir+6)mod 8; 在3*3邻域中搜索到的第一个与当前像素值相同的像素便为新的边界点An,同时更新变量dir为新的方向值。 步骤3:如果An等于第二个边界点A1且前一个边界点An-1等于第一个边界点A0,则停止搜索,结束跟踪,否则重复步骤2继续搜索。 步骤4:由边界点A0、A1、A2、……、An-2构成的边界便为要跟踪的边界。 上述算法是图象轮廓跟踪最基本的算法,它只能跟踪目标图象的内边界(边界包含在目标点集内),另外,它也无法处理图象的孔和洞 轮廓跟踪问题 [m,n]=size(yy); U=zeros(m,n); for i=1:m for j=1:n if yy(i,j)==255 U(i,j)=yy(i,j); break; end; end; end; figure,imshow(U); [m,n]=size(yy); V=zeros(m,n);

计算连通域的面积

计算连通域的面积 matlab函数_连通区域 1、 matlab函数bwareaopen——删除小面积对象 格式:BW2 = bwareaopen(BW,P,conn) 作用:删除二值图像BW中面积小于P的对象,默认情况下使用8邻域。 算法: (1)Determine the connected components. L = bwlabeln(BW, conn); (2)Compute the area of each component. S = regionprops(L, 'Area'); (3)Remove small objects. bw2 = ismember(L, find([S.Area] >= P)); 2、matlab函数bwarea——计算对象面积 格式:total = bwarea(BW) 作用:估计二值图像中对象的面积。 注:该面积和二值图像中对象的像素数目不一定相等。 3、matlab函数imclearborder——边界对象抑制 格式:IM2 = imclearborder(IM,conn) 作用:抑制和图像边界相连的亮对象。若IM是二值图,imclearborder将删除和图像边界相连的对象。默认情况conn=8。 注:For grayscale images, imclearborder tends to reduce the overall intensity level in addition to suppressing border structures. 算法: (1)Mask image is the input image. (2)Marker image is zero everywhere except along the border, where it equals the mask image. 4、matlab函数bwboundaries——获取对象轮廓 格式:B = bwboundaries(BW,conn)(基本格式) 作用:获取二值图中对象的轮廓,和OpenCV中cvFindContours函数功能类似。B是一个P ×1的cell数组,P为对象个数,每个cell 是Q×2的矩阵,对应于对象轮廓像素的坐标。 5、matlab函数imregionalmin——获取极小值区域 格式:BW = imregionalmin(I,conn) 作用:寻找图像I的极小值区域(regional maxima),默认情况conn=8。 Regional minima are connected components of pixels with a constant intensity value, and whose external boundary pixels all have a higher value. 6、matlab函数bwulterode——距离变换的极大值 格式:BW2 = bwulterode(BW,method,conn) 作用:终极腐蚀。寻找二值图像BW的距离变换图的区域极大值(regional maxima)。用于距离变换的距离默认为euclidean,连通性为8邻域。

二值图像连通域标记快速算法实现

二值图像连通域标记快速算法实现 算法描述 首先,在进行标记算法以前,利用硬件开辟独立的图像标记缓存和连通关系数组,接着在视频流的采集传输过程中,以流水线的方式按照视频传输顺序对图像进行逐行像素扫描,然后对每个像素的邻域分别按照逆时针方向和水平方向进行连通性检测和等价标记关系合并,检测出的结果对标记等价数组和标记缓存进行更新,在一帧图像采集传输结束后,得到图像的初步标记结果以及初步标记之间的连通关系,最后,根据标号对连通关系数组从小到大的传递过程进行标号的归并,利用归并后的连通关系数组对图像标记缓存中的标号进行替换,替换后的图像为最终标记结果,并且连通域按照扫描顺序被赋予唯一的连续自然数。 图 1 标记算法流程 本文快速二值图像连通域标记算法分为三个环节: 1.图像初步标记:为每个像素赋予临时标记,并且将临时标记的等价关系记录在等价表中 2.整理等价表:这一环节分为两个步骤: (1)将具有等价关系的临时标记全部等价为其中的最小值; (2)对连通区域以自然数顺序重新编号,得到临时标记与最终标记之间的等价关系。 3.图像代换:对图像进行逐像素代换,将临时标记代换为最终标记.经过3个环节处理后,算法输出标记后的图像,图像中连通域按照由上到下,由左至右出现的顺序被标以连续的自然数。 1 图像初始标记 标记算法符号约定:算法在逆时钟方向检测连通域时用w1,w2表示连续两行的图像数据,在紧接着的顺时钟方向连通域检测时用k0,k表示连续两行经过

逆时钟方向标记后的图像数据。其在工作窗口的位置在图2、3中分别说明;对初始逆时针方向临时标记用Z表示。Z初始标记值为1。 二值图像连通域标记算法采用8连通判断准则,通过缩小标记范围剔除了图像的边界效应。为了简化标记处理过程,使标记处理在硬件对一帧图像传输操作时间内结束,标记处理利用中间数据缓存分为连续的两种类型,其中类型1用于直接图像序列传输,硬件发起图像序列传输时,类型1采用逆时钟顺序连通域检测,对2×3工作窗口中的二值像素进行初始标记。类型2对经过类型1初始标记过的图像数据再进行水平方向的连通域检测和归并,然后把标记结果存入图像存储区。 图像初始标记类型1: 步骤1读取像素w1(2)、w1(1)、w1(0)、w0(2)、w0(1),以及相应的二值像素值。 步骤2读取像素w0(1),按照逆时针方向依次与w1(0)、w1(1)、w1(2)、w0(2)比较,若w0(1)= w1(0),则k0(1)=k(2);若w0(1)= w1(1),则k0(1)=k(1);若w0(1)= w1(2),则k0(1)=k(0);若w0(1)= w0(2),则k0(1)=k0(0);否则(即w0(1)≠(w1(2)、w1(1)、w1(0)、w0(2)),k0(1)= Z;Z ++。 步骤3写入等价关系表,以Z为地址将Z写入等价关系数组。 图 2 逆时钟方向初始标记的工作窗 图像初始标记类型2: 步骤1判断经过逆时针方向标记后,如果w0(1)= w0(2)= 1,而标记灰度k0(1)≠k0(0),则进行下一步骤。 步骤2 假设k0(1)> k0(0),判断lab(k0(1))=k0(1)或者lab(k0(1))=k0(0),则lab(k0(1))=k0(0),否则对标记数组进行追踪置换。跳转至步骤3。 步骤3 假设k0(1)< k0(0),判断lab(k0(0))=k0(0)或者lab(k0(0))=k0(1),则lab(k0(0))=k0(1),否则对标记数组进行追踪置换。 追踪置换方法:步骤2的追踪置换令t= lab(k0(0));若lab(t)≠t,则

基于连通域算法的区域测量

第8卷 第9期 2008年5月1671-1819(2008)9-2492-03  科 学 技 术 与 工 程 S c i e n c e T e c h n o l o g ya n d E n g i n e e r i n g  V o l .8 N o .9 M a y 2008 2008 S c i .T e c h .E n g n g . 基于连通域算法的区域测量 李仪芳 刘景琳 (广东技术师范学院电子与信息学院,广州510665) 摘 要 基于数字图像处理的原理,提出用八连通域算法对有多个连通区域的二值图像进行面积测量。通过逐行逐列地扫描图像,按照一定的规则标记连通区域,得到对象的个数,同时统计每个区域所含的像素,通过标尺转换可以得出区域的面积。结果表明,该算法能有效地提取八连通区域,可用于计算显微图像颗粒物的面积和粒径。关键词 区域标记 像素测量 八连通域算法中图法分类号 T P 391.77; 文献标识码 A 2008年1月21日收到 广东省第二批产业技术研究研发计划 项目(2007B 010200041)资助 第一作者简介:李仪芳(1983—),女,广东三水人,广东技术师范学院助教,硕士,研究方向:图像处理和光电技术。E -m a i l :a n g e l i -n a 2008@y a h o o .c o m .c n 二值图像中连通域的提取是图像处理和分析中的一个重要处理过程,可以用于显微图像的对象识别和测量,红外图像的目标定位等领域。灰度图像经过阈值分割后常包括多个连通的区域,需要将连通区域搜索标记出来以便测量。但常见算法是关于四连通区域的研究,其中文献[1,2]中描述或采用的是区域标号法,但文献[1]中描述的算法在实现时并不能达到预定的结果。而且区域生长法计算复杂度过高;像素标记法和行程标记法必须全部扫描完图像才能得到连通域,随着图像幅度和连通域个数的增加,计算复杂度增长。现提出用八连通域算法 [3] ,它不仅能在对图像一次扫描中标记连 通域即计算对象的个数,而且可实现边扫描边提取像素,即累计每个连通域所含像素的个数。 1 区域标记 算法实现逐行逐列扫描,对图像内每个连通的黑色区域进行标记操作,求得对象的数目。图1为6×12图像点阵,图中有三个连通区域,即三个对 象,分别用1,2,3标号。设前景点灰度取1,背景点取值为0。在算法中,定义了多个数组N (i ),其中i 代表连通区域的标号,∑N (i )表示区域内部包含的像素个数。如第1个区域,∑N (1)=7;对第2个区域,∑N (2)=6。下面以标记区域1为例,说明标记的具体算法。 图1 八连通域算法说明图 ① 初始化N (i )=0,i =0。② 从左到右,从上到下逐行扫描图像;如果没有遇到“1”,则继续扫描。若遇到“1”,如(1,1),则依次判断该像素点的

基于图像边界跟踪的顶点矩阵算法

—231— 基于图像边界跟踪的顶点矩阵算法 李雨田,晋小莉 (西安工业大学机电工程学院,西安 710032) 摘 要:分析传统图像边界跟踪中存在的问题,根据Freeman 链码跟踪方法提出一种改进的基于像素顶点矩阵的边界跟踪方法,定义图像的像素顶点矩阵,并利用像素顶点矩阵跟踪边界,制定边界跟踪的搜索规则,同时抽取边界的顶点链码,生成围线树结构,用像素顶点的链码值表示边界。实验结果表明,该算法优于一般的链码跟踪方法,具有广泛应用性。 关键词:边界跟踪;像素顶点矩阵;链码 Vertex Matrix Algorithm Based on Image Boundary Tracking LI Yu-tian, JIN Xiao-li (School of Electrical and Mechanical Engineering, Xi’an Technology University, Xi’an 710032) 【Abstract 】The problems in traditional image border tracking are analyzed. According to Freeman chain code boundary tracking method,a pixel-based boundary tracking method of vertex is given. The image pixel vertex matrix is defined. The pixel matrix is used to track the boundary vertex. The boundaries track search rules is set up. The apex of the boundary chain code is abstracted, and the tree structure is generated. The pixel vertex chain code value is used to indicate the boundary. Experimental results show this algorithm is better than the Freeman chain code tracking methods, and has a wider versatility. 【Key words 】boundary tracking; pixel vertex matrix; chain code 计 算 机 工 程Computer Engineering 第36卷 第1期 Vol.36 No.1 2010年1月 January 2010 ·图形图像处理· 文章编号:1000—3428(2010)01—0231—02 文献标识码: A 中图分类号:TP391 图像处理是计算机学科的一个重要研究领域,也是计算机图形处理的一项核心技术。边界是图像最基本的特征,包含了可用于识别的有用信息。边界存在于目标与背景、目标与目标、区域与区域之间,给人们描述或识别目标以及解释图像提供了有价值的特征参数。 1 边界的表示方法 边界的表示方法有很多,链码表示最早于1961年由Freeman 提出,如图1所示,用0,1,2,3这4个代码表示四方向链码,用0,1,2,3,4,5,6,7这8个代码表示八方向链码。 1 42 23 (a)四方向链码 (b)八方向链码 图1 四方向链码和八方向链码 从图像边界上的任一像素点开始,按某一方向行走(逆时 钟或顺时针),并用码记录相邻像素间的行走方向,直到回到起始点为止,就构成了图像的Freeman 链码。图像边界可由Freeman 链码唯一表示。 2 边界跟踪的研究现状与存在的问题 边界跟踪算法存在的问题主要有以下2个方面: (1)漏追踪和重复追踪,即丢失外轮廓或内轮廓。文献[1]为了避免丢失内轮廓,采用边界填充的办法,显然这很费时。 (2)破坏连通性,将一个轮廓跟踪成多个轮廓。为解决该问题,文献[2]采用2种标记色分别标记边界像素和与边界近邻的背景像素,以解决漏追踪和重复追踪问题。 顶点链码出现较晚,基于顶点链码的跟踪算法也较少,现有的边界跟踪算法大都是基于Freeman 链码给出的,文 献[3]给出的边界标定自动机获得的是边界的顶点链码,但该文也没有给出图像的围线树结构的生成算法。 本文给出一种能正确跟踪任意复杂图像边界的基于像素顶点矩阵边界跟踪算法,通过跟踪边界获得边界的顶点链码。 3 边界跟踪与围线树结构的生成 边界跟踪包括3个步骤[4]: (1)确定作为搜索起点的边缘点,根据算法不同,可以是一个点或多个点,起点的选择很重要,整个算法对此点的依赖很大。 (2)确定和采取一种合适的数据结构和搜索机理,在已发现的边界点基础上确定新的边界点,这里要注意研究先前的结果对选择下一个检测点和下一个结果的影响。 (3)确定搜索终结的准则或终止条件,并在满足条件时停止进程,结束搜索。 3.1 定义像素顶点矩阵 文献[5]提出用边界像素的顶点来标记区域边界的方法。 基金项目:西安工业大学校长基金资助项目“CNC 数控雕刻机技术开发与研制”(605-01000841) 作者简介:李雨田(1981-),男,硕士研究生,主研方向:数控技术,图像处理;晋小莉,教授 收稿日期:2009-09-20 E-mail :liyutian721@

计算机图形学四连通区域种子填充算法实验

《计算机图形学实验》报告 任课教师:钱文华 2016年春季学期 实验:四连通区域种子填充算法 实验时间:2016年12月8日 实验地点:信息学院2204 实验目的:掌握种子填充算法的原理,并会用种子填充算法和opengl

并结合使用c++语言编写程序绘制多边形。 实验原理:种子填充算法又称为边界填充算法。其基本思想是:从多边形区域的一个内点开始,由内向外用给定的颜色画点直到边界为止。如果边界是以一种颜色指定的,则种子填充算法可逐个像素地处理直到遇到边界颜色为止。内点的检测条件:if(interiorColor!=borderColor&&interiorColor!=fillColor)。 种子填充算法常用四连通域和八连通域技术进行填充操作。从区域内任意一点出发,通过上、下、左、右四个方向到达区域内的任意像素。用这种方法填充的区域就称为四连通域;这种填充方法称为四向连通算法。从区域内任意一点出发,通过上、下、左、右、左上、左下、右上和右下八个方向到达区域内的任意像素。用这种方法填充的区域就称为八连通域;这种填充方法称为八向连通算法。 一般来说,八向连通算法可以填充四向连通区域,而四向连通算法有时不能填充八向连通区域。 四向连通填充算法: a)种子像素压入栈中; b)如果栈为空,则转e);否则转c); c)弹出一个像素,并将该像素置成填充色;并判断该像素相邻的四连通像素是否为边界色或已经置成多边形的填充色,若不是,则将该像素压入栈; d)转b); e)结束。

四连通填充算法利用到了递归的思想。 本实验只包括四连通填充算法 程序代码:#include #include #include #include void init(void) { glClearColor(1.0,1.0,1.0,0.0); glMatrixMode(GL_PROJECTION); gluOrtho2D(0.0,300.0,0.0,300.0); } void setPixel(int x,int y,long fillColor){ glColor3f(fillColor<<16,fillColor<<8,fillColor); glBegin(GL_POINTS); glVertex2i(x,y); glEnd(); } void boundaryFill4(int x,int y,long fillColor,long borderColor) { unsigned char params[3]; long interiorColor; glReadPixels(x,y,1,1,GL_RGB,GL_UNSIGNED_BYTE,params); interiorColor=RGB(params[0],params[1],params[2]); if(interiorColor!=borderColor&&interiorColor!=fillColor)

相关文档
最新文档