基于同步标记算法的钢轨表面缺陷检测

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于同步标记算法的钢轨表面缺陷检测
陈华伟;吴禄慎;袁小翠
【摘要】针对区域标记算法流程长、中间数据结构多、算法稳定性依赖于阈值化处理等问题,以钢轨图像为研究对象,提出一种像素标记同步搜索算法.展开数据结构和程序流程设计,着重解析像素标记过程中等价关系的识别、记录、拼接、排序和连通区域识别输出全过程.该算法在面向钢轨表面缺陷检测的轨缝和裂纹定位及参数提取中得到了验证,其在非实时要求的图像处理中具有较高稳定性.
【期刊名称】《计算机工程与设计》
【年(卷),期】2016(037)001
【总页数】5页(P127-131)
【关键词】缺陷检测;阈值化;连通区域标记;邻域搜索;等价标记
【作者】陈华伟;吴禄慎;袁小翠
【作者单位】南昌大学机电工程学院,江西南昌330031;南昌大学机电工程学院,江西南昌330031;南昌大学机电工程学院,江西南昌330031
【正文语种】中文
【中图分类】TP391.41
采用图像技术对钢轨表面缺陷(裂纹、掉块、擦伤等)进行识别,一般要遵循二值化预处理、缺陷区域分割和识别、缺陷参数化分析3个过程。

连通区域标记(connected components labeling,CCL)[1,2]通过对图像中的特征区域进行统一标识,实现缺陷部位的定位和识别。

算法应针对具体图像对象,以效率和准确度
为核心展开设计。

为应用区域标记,需要采用大津法、最大熵等方法对图像做二值化预处理[2]。


域标记时,直接将区域内的像素灰度值置为标记值,很显然,对二值图像采用整数标记,其标记值小于255。

在钢轨表面缺陷检测应用中,一张图片中的目标缺陷
区域数一般很少,因而可以采用整数值进行标记。

不失一般性地,采用8邻域搜索,方向为从左点开始的顺时针方向(如图1所示)。

记左点为<左>,则一个完整的邻域搜索方向为:<左>→<左上>→<上>→<右上>→<右>→<右下>→<下>→<左下>。

假设二值图像中,灰度值255表示白色,为背景,灰度值0表示黑色,为目标。

由于图像边界的像素点,没有完整的8个邻域点,为规避边界点的干扰,算法中
常直接将边界点置为背景点。

记当前标记值为n(n=1,2,3,…)。

逐行逐列扫描,搜索目标点(灰度值为0的像素点),针对目标点,对该点的8邻域点进行顺序搜索(从左点开始顺时针方向)判断,以确定该点的标记值,具体判断规则如下:
(1)如果<左>已标记,则随<左>赋标记值,并与<左上>、<上>、<右上>逐一对比判断是否等价(见第2节),转下一节点搜索。

反之,如果<左>未标记(包括灰度值为255的背景点和灰度值为标记值的已标记点),转(2)。

(2)如果<左上>已标记,则随<左上>赋标记值,并与<上>、<右上>逐一对比判
断是否等价,转下一节点搜索。

反之,如果<左上>未标记,转(3)。

(3)如果<上>已标记,则随<上>赋标记值,并与<右上>对比判断是否等价,转下一节点搜索。

反之,如果<上>未标记,转(4)。

(4)如果<右上>已标记,则随<右上>赋标记值。

此时,因为<左>、<左上>、<上>均未标记过,所以不存在等价关系。

反之,如果<右上>也未标记,则赋新的标记
值n=n+1(标记值加一)。

2.1 等价标记的识别与记录
采用上述基本算法,会导致一个区域内出现不同的标记值,这些标记值具有等价关系,应视为等价标记。

每次赋标记值时,都要判断当前节点与8邻域搜索方向上的左点、前一行的相邻点(<左上>、<上>、<右上>)的标记是否等价,同时记录该等价信息,以此为依据合并等价标记值。

以图2为例,对等价关系的识别与记录过程描述如下。

(1)逐行扫描,1号点赋标记值1;
(2)2号点随左点1赋标记值为1;
(3)针对3号点,由于上一行的相邻点均为背景点,为未标记点,所以3号点应赋新的标记值,其标记值为2;
(4)4号点随左点3赋标记值2。

由于4号点的左点3和右上点1均已标记,且标记值不同(分别为2和1),所以认为标记值1和2是等价标记,采用数组记录该等价对;
(5)5号点随左点4赋标记值2。

其左点4和上点1的标记值2和1为等价标记,由于该等价对已记录,所以不必再重复记录。

同样,其左点4与右上点2也存在该等价对,不必重复记录。

(6)6号点随左点5赋标记值2,其左点5与左上点1和上点2等价,等价标记值对为2和1,该值不再重复记录。

2.2 等价关系的整理
基于邻域搜索中记录的等价关系对,将具有相邻等价关系的标记值串联成等价关系链,在不相邻的等价关系处则会形成新的等价关系链。

一条等价关系链代表了一个目标区域。

为便于等价关系的整理,本文采用双链表数据结构存贮,内层链为等价关系链,外
层链为所有等价关系链的集合。

初始时,向内链中压入第一个等价关系对中的两个标记值(设为p和q),并将内链压入外链保存;接下来,遍历其它等价对。

针对某一等价对,将该等价对中的两个标记值与外链(即所有内链)中的所有标记值进行比对,分以下4种情况处理:
情况1:如果在某链中找到第一个标记值p,则将第二个标记值q加入该链;
情况2:如果在某链中找到第二个标记值q,则将第一个标记值p加入该链;
情况3:如果两个标记值均未找到,则创建一条新链,并压入外链保存;
情况4:如果两个标记值均找到,则再分两种情况处理:
(1)如果两个标记值存在于同一链中,则不处理;
(2)如果两个标记值存在于不同链中,则合并这两条链。

需要注意的是,在合并链
处理结束时,应从外链中删除被合并的链。

根据上述等价关系处理算法,可得标记区域数N的计算公式
式中:N0——初始标记值的个数;Ne——等价关系链中所含标记值的个数;Nc——合并整理后的等价关系链的个数。

例如,现有9个等价关系对:1-2,3-2,3-6,4-8,10-8,7-11,11-12,3-11,5-14,这些等价关系对中共有12个标记值。

此外,根据标记值的连续性,还有两个独立标记值(一个区域内只有一种标记值):9和13,共计14个标记值。

(1)第一个等价关系对1-2:创建内链1-2(记为链1),并存入外链;
(2)第二对3-2:符合情况2,与链1合并后变成1-2-3;
(3)第三对3-6:符合情况1,合并链处理后链1变成1-2-3-6;
(4)第四对4-8:符合情况3,创建新的内链4-8(记为链2);
(5)第五对10-8:符合情况2,与链2合并为4-8-10;
(6)第六对7-11:符合情况3,创建第3条链7-11(记为链3);
(7)第七对11-12:符合情况1,与链3合并后变为7-11-12;
(8)第八对3-11:符合情况4,将链3合并至链1,此时,链1变为1-2-3-6-7-11-12,同时删除链3。

(9)第九对5-14:符合情况3,产生第3条链5-14(记为链3);
本例中,有标记区域数N=14-12+3=5个。

连通区域F有两种:等价标记链所表示的区域Cj和独立标记所表示的区域Sk
式中:j=1,2,…,N1,N1为等价链标记区域数或等价链数;k=1,2,…,N2,N2为独立标记区域数;则连通区域数又可表示为
(1)为获得连通区域,需要对每个连通区域进行唯一标识。

由于一条等价关系链代表一个连通区域,但是一条等价关系链中可能存在多个标记值,因此必须建立多个标记值与唯一的区域标识之间的对应关系,称为标记值与区域标识映射关系,本文称LA映射:
1)独立区域内的标记值与区域标识之间是1→1映射关系。

对独立标记区域Sk,可将其唯一的标记值作为区域标识,记为LSk。

则该LA映射关系可表示为
LSk→LSk。

2)等价链标记区域内的标记值与区域标识之间是n→1映射关系。

对等价标记链所表示的区域Cj,可将本区域(链)中最小的标记值作为本区域标识,记为。

则该LA 映射关系可表示为。

上例中的LA映射列于表1,经映射处理后的5个区域的标识分别为:9,13,1,4,5。

(2)为便于后续处理,还需对区域标识做排序处理。

对区域标识集合,LSk),i=1,2,…,N,根据区域标识的大小进行排序,得到排序后的区域标识集合
对表1中的5个区域进行重排,区域标识序列变为:1,4,5,9,13。

(3)对排序后的区域标识做连续化处理。

将排序后的区域标识值修改成连续整数:1,2,3,4,5,结果见表1。

(4)使用上述整数区域标识对图像像素进行重新标记。

(1)邻域搜索同步标记
在程序处理中,采用双指针同步移动法提高算法效率。

首先创建图像像素灰度值数组指针pImageData和对应的像素标记值数组指针pImageMark,并为pImageMark中各元素赋初值1。

在逐行逐列扫描过程中,同步移动这两个指针,并根据标记算法,实时更新pImageMark中对应的像素标记值。

图像数据数组pImageData的初始化方法为图像总像素大小的int指针:
int*pImageData=new int (hImage*wImage)
其中,hImage和wImage分别为图像高度和宽度。

标记算法中,pImageData
为已知输入。

标记开始时,初始化标记数组pImageMark:
int*pImageMark=new int (hImage*wImage)
并设初始标记值为0:
memset(pImageMark, 0, sizeof(int)*hImage*wImage)
(2)记录等价标记
定义等价标记结构体:
struct EqualMark
{
int MarkValue1;
int MarkValue2;
}
定义等价标记对象和对象列表:
EqualMark equalMark;
list<EqualMark> listEqualMark;
对搜索过程中的等价标记值,使用equalMark临时记录,并压入listEqualMark 保存。

(3)等价标记整理至链表
定义一个双层链表,每个内层链表表示一条区域链,其链节点元素是标记值,外层链表是内层链表的集合,表示标记识别的所有区域,它的元素是一个指向内层链表的指针。

list<list<int>*>exList;//外层链
list<int>*pListInner=new list<int>;//内层链
接下来遍历所有等价标记listEqualMark,将有关联的等价标记串联加入内链,并最终加入外链。

第一个等价标记,创建新链:
EqualMark mark=listEqualMark.front();
pListInner->push_back(mark.MarkValue1);
pListInner->push_back(mark.MarkValue2);
exList.push_back(pListInner);
listEqualMark.pop_front();
后续等价标记需要查找已有链表,找到等价标记后,才能串联至对应的内层链:list<int>*pFindValue1,pFindValue2;//定义找到的内层链的头指针
while(listEqualMark不为空)
{
遍历exList,置pListInner为当前内链指针。

在链表中查找等价标记:
pFindValue1=find(pInnerList,mark.MarkValue1);
pFindValue2=find(pInnerList,mark.MarkValue2);
当等价标记中的两个值都在已整理的链表中时,合并这两条等价链:pFindValue1->merge(*pFindValue2);
pFindValue2->clear();
delete pFindValue2;//同时释放被合并对象的内存
当等价标记中只有一个值在链表中时,直接追加至该链:
If (pFindValue1)
pFindValue1->push_back(mark.MarkValue2);
if (pFindValue2)
pFindValue2->push_back(mark.MarkValue1);
当两个等价标记均未找到时,创建新链。

}
(4)区域映射与重标记
上述处理后,每个区域有多个标记值,通过映射处理,实现每个区域的单一映射值表示。

定义映射结构体:
struct MarkMap
{
int MarkValueOrigin; //初始标记值
int MarkValueMapped; //映射标记值
}
vector<MarkMap>vMarkMap;//定义映射集合
遍历链表exList,获得每条内层链的最小标记值MarkMin,置映射值为MarkMin:
vMarkMap[i].MarkValueMapped=MarkMin[i];
上面实现了区域的单一标记,但标记值不连续。

接下来,对区域标记值排序:vector <int> vMarkMapSort;//定义排序集合
vMarkMapSort[i]=vMarkMap[i].MarkValueMapped; //取值即为映射值
sort(vMarkMapSort.begin(),vMarkMapSort.end()); //排序
最后,根据排序结果,重新调整映射集合,进而重置原图像标记数组中每个像素的标记值:
vMarkMap[i].MarkValueMapped=vMarkMapSort[i];
pImageMark[j]=vMarkMap[pImageMark[j]]. Mark- ValueMapped;
上述算法在钢轨裂纹或轨缝图像识别[3,4]中进行测试,取得了很好的效果。

轨缝识别时,常根据经验知识,将像素面积(即区域内像素个数)大于m倍图像宽度wImage的区域认定为裂纹或轨缝区域。

图3(a)所示为一段钢轨灰度图,图像大小为30×100,图像中部为轨缝,预设区域面积倍数m=2,即认为如果存在像素面积area≥m×wImage=60的区域,则识别该区域为轨缝。

采用大津法获得图像最佳阈值为121,应用该阈值进行二值化预处理,接下来,进行区域标记,共识别出85个连通区域(黑色点块),并将像素面积大于60的区域用矩形框显著标示出来。

图3(b)中标示说明本段钢轨图像中只有一个区域满足该条件,该区域即为本段钢轨的轨缝区域。

对于轨道裂纹,一般根据先验知识,采用区域长度l、宽度w、长宽比r等参数进行识别,实验中设定鉴别条件为(l>wImage/3.0||w>wImage/3.0),或(r>4.0)。

即识别区域长度l(或宽度w)大于轨面宽度的1/3,或者识别区域长宽比r大于4时,将该区域识别为裂纹区域。

图3(c)所示为一段有裂纹的钢轨,采用最大熵法[5,6]进行轨面图像灰度的二值化处理,二值化后目标区域明显(如图3(d)所示)。

图3(d)最大区域标记准确定位该裂
纹区域。

上述连通区域标记算法要对每个点都进行8邻域搜索,并且有重复搜索,搜索完
毕还要对等价标记进行合并处理,对标记值进行排序和重标记处理,算法流程长、耗时,但是该方法或其改进数据结构或改进算法[7-9]能够准确标识所有目标区域,程序处理中不会出现死循环的现象,算法稳定性高。

对于非实时、性能要求不高的图像处理应用,该方法还是有很大的优势,例如本文的钢轨裂纹和轨缝识别中该方法就能够取得很好的效果。

同时,为了最大化该算法的应用效果,应针对不同图像对象,研究合适的阈值化[10]处理方法。

【相关文献】
[1]LIU Qiqi,GONG Xiaofeng.New algorithm for binary connec-ted component
labeling[J].Computer Engineering and Applications,2012,48(11):178-200(in Chinese).[刘奇琦,龚晓峰.一种二值图像连通区域标记的新方法[J].计算机工程与应用,2012,48(11):178-200.]
[2]LI Xiying,LU Lin,YU Wenjin.A method of license plate location based on connected components and gray level jump[J].Computer and Modernization,2014,3:104-108(in Chinese).[李熙莹,卢林,余文进.一种基于连通域和跳变的车牌定位方法[J].计算机与现代
化,2014,3:104-108.]
[3]REN Shengwei,LI Qingyong,XU Guiyang,et al.Research on robust fast algorithm of rail surface defect detection[J].Computer Science,2011,32(1):25-29(in Chinese).[任盛伟,李清勇,
许贵阳,等.鲁棒实时钢轨表面擦伤检测算法研究[J].中国铁道科学,2011,32(1):25-29.]
[4]ZHAO Hongwei,HUANG Yaping,WANG Shengchun,et al.Rail surface detect detection algorithm based on spatial filtering[J].Computer Science,2014,41(1):130-133(in Chinese).[赵宏伟,黄雅平,王胜春,等.一种基于空间滤波的钢轨表面擦伤检测改进算法[J].计算机科学,2014,41(1):130-133.]
[5]Tan Haifeng,Yang Guang,Zheng Nan,et al.An improvement of two-dimensional maximum entropy thresholding segmentation algorithm for SAR image[C]//International Conference on Computer Science and Electronics Engineering,2012:379-382.
[6]ZHANG Xinming,ZHANG Aili,ZHENG Yanbin,et al.Improved two-dimensional maximum entropy image thresholding and its fast recursive realization[J].Computer
Science,2011,38(8):278-283(in Chinese).[张新明,张爱丽,郑延斌,等.改进的最大熵阈值分割及其快速实现[J].计算机科学,2011,38(8):278-283.]
[7]Oleksandr Kalentev,Abha Rai,Stefan Kemnitz,et al.Connected component labeling on a 2D grid using CUDA[J].Journal of Parallel and Distributed Computing,2011,71(4):615-620.
[8]CHENG Qi,WEN Jianguo,YANG Dong.New area segmentation method for remote sensing binary image[J].Computer Engineering and Applications,2013,49(20):202-205(in Chinese).[程琦,文建国,杨冬.一种遥感二值图像目标区域分割的新方法[J].计算机工程与应
用,2013,49(20):202-205.]
[9]XIE Yizhuang,TAN Xubin,CHEN He.A new algorithm for connected components labeling[J].Transactions of Beijing Institute of Technology,2012,32(12):1273-1278(in Chinese).[谢宜壮,谭许彬,陈禾.一种新的连通域标记算法[J].北京理工大学学报,2012,32(12):1273-1278.]
[10]YUAN Xiaocui,WU Lushen,CHEN Huawei.Improved image processing algorithm for rail surface defects detection[J].Journal of Computer-Aided Design & Computer Graphics,2014,26(5):800-805(in Chinese).[袁小翠,吴禄慎,陈华伟.钢轨表面缺陷检测的图像与处理改进算法[J].计算机辅助设计与图形学报,2014,26(5):800-805.]。

相关文档
最新文档