您的当前位置:首页正文

基于边缘检测的图像识别系统研究和实现

2022-04-18 来源:好走旅游网
ELECTRONICS WORLD・技术交流引言:计算机视觉(Computer Vision)是在数字图像处理的基础上发展起来的新兴学科;从信息处理的层面研究视觉信息的认知过程,研究视觉信息处理的计算理论和计算方法。它作为一门综合性的交叉学科,在航空航天、医学影像、工业控制、地理遥感信息处理等方面发挥的重要的应用。

1 方案设计

本文通过航空航天项目为研发背景配合民用图片作为效果说明。本文依据项目设计图像处理系统实现对输入的各种传感器一维数据的拟合成二维数据,形成数字图像形式,然后通过平滑,分割,边缘提取,特征提取(分类)等步骤处理,形成新的数字图像(二维数据),最后将处理后的二维数据再转换成其他传感器所需要的数据流,供其他设备或者传感器进行应用,整个图像处理系统在QT平台上用C/C++语言实现。如图1所示。

图1 系统数据流示意图2 主要实现过程

2.1 图像生成

对原始数据进行拟合和提取形成图像处理所需的二维矩阵。2.2 图像平滑在本文描述的系统中采用中值滤波对图像进行图像预处理。2.3 图像边缘检测

图像边缘是指局部区域亮度有阶跃变化的像素点的集合。边缘广泛存在于物体与背景之间、物体与物体之间、基元与基元之间,它是图像分割所依赖的重要特征。边缘检测算子检查每个像素的邻域并对其灰度变化率进行量化,也包括方向的确定。大多数使用基于方向导数掩模求卷积的方法。边缘检测算子通常由两个边缘检测模板组成。图像中的每个像素分别用这两个模板做卷积,得到两个方向上的梯度G_1和G_2,为了减少运算量,有时也使用近似值G=|G_1 |+|G_2 |。梯度方向。

本文描述的系统采用的是sobel算子为基础构建的Canny

算子:

(1)Sobel算子的提出者Irwin Sobel在1968-1973年提出了该算法,Sobel算子对于象素的位置的影响做了加权,可以降低边缘模糊程度,因此检测效果更好。

(2)Canny算子是John F. Canny于1986年提出的一个多级边缘检测算法。Canny创立了边缘检测计算理论,其目标是找到一个最优的边缘检测算法,最优边缘检测的含义是:

1)好的检测:能够尽可能多的标识出实际边缘;2)好的定位:标识出的边缘尽可能接近实际边缘;3)最小响应:图像中的边缘只能标识一次,并且尽可能避免噪声的干扰。

实现步骤:

1)中值平滑:通常采用3×3模板进行滤波实现降噪。

2)计算梯度:通常采用Soble算子分别计算水平方向和垂直方向北京基上的梯度。

3)非极大值抑制(Non-maximum 科于银边suppression):判断当前梯度值在梯度京方向上是否为局部最大值,是则保成缘留,否则置零。梯度方向垂直于轮技检术廓方向,通过在梯度方向上找局部有测最大值,可以细化边缘。

限的按梯度方向可分为0~45度、公图司45~90度、90~135度和135~180度4成像种情况来分别进行插值运算。

都识(3)双阈值迟滞和边缘跟研别发踪:

中系对非极大值抑制图像进行双阈

心统值操作,用高阈值来检测边缘,用 研刘低阈值来连接边缘。使用高阈值得 究到的二值图像含有很少的假边缘,林和实但由于阈值较高,图像边缘可能断现裂,因此需要使用低阈值进行边缘连接。这样就既能减少假边缘的数量,又能尽可能地保证边缘闭合;双阈值图像处理后再进行边缘跟踪,实现略。

效果图(只截取关键过程的图形效果)如图2所示:

图2

边缘检测完成后,需要根据边缘提取轮廓,然后对轮廓进行形态学处理,形成封闭区域,为最后的特征提取做准备。2.4 轮廓提取

1999年Bribresea提出了顶点链码(Vertex Chain Code),顶点链码具有平移不变性、旋转不变性和镜像变换不变性。对于正四边点阵上的图像,可以有三种不同性质的顶点,分别用编码1、2、3来标记,如图3所示。

• 191 •

ELECTRONICS WORLD・技术交流图3

(1)顶点链码

对二值图像中的任意一点(x,y),取其右下方2x2邻域,所有的可能的组合及顶点编码链码如(图)所示。

其中,每行前面的数字表示其顶点编码值,取值范围为:0、1、2、3、5;每种组合下方的数字表示其组合编号,取值范围为:0x00、0x01、0x02、…、0x0F。

组合编号计算规则:在2x2邻域内,每个像素点的值为0或1,按从上到下,从左到右的顺序进行组合,得到一个4位二进制数,即为该组合的编号。

组合编号与顶点编码之间存在对应关系,只要计算出组合编号,就可以直接查表得到该点的顶点编码值。

(2)单边界提取

链码方式描述轮廓需要记录轮廓的起点和轮廓上每一点相对于前一点的链码值列表。以8-领域链码为例,首先按照从左至右,从上至下的顺序查找轮廓起点;再按照右、右下、下、左下的顺序查找第二个轮廓点;然后按照右、右下、下、左下、左、左上、上、上右的顺序查找其它轮廓点,直到找到轮廓起点为止。

八连通边界实现过程本文略。2.5 距离变换

距离变换(Distance Transform)是计算并标识空间点距离的过程。正距离变换是对前景像素进行距离变换,每个像素的灰度值是该像素与离其最近的背景像素之间的距离,最终将二值图像变换为灰度图像,距离变换可以通过两次扫描来实现。通常选用3×3的变换模板进行扫描。第一次正向扫描,即从上而下,从左向右;第二次逆向扫描,即从下向上,从右向左。

图像进行3×3街区距离变换处理过程和中值滤波比较类似,实现过程参考中值滤波的实现。

效果图3×3街区距离变换效果图(为了展示效果,对输出图像进行了对比度增强),如图4所示。

图4

3.特征提取

通过上述几个主要步骤,根据距离变换找到的封闭区域的重

• 192 •

心,使用缺陷检测或者其他凹点检测类等方法将二值图中的区域分割开,为最后的特征提取和识别做准备。

本文使用的opencv提供的支持向量机函数作为分类的工具 ,通过两个步骤完成图像识别的功能。

(1)模型训练

将完成二值(黑白)处理后的图像,以及将当做训练集的图像作为输入,调用opencv中SVM的训练接口接口,先进行模型训练,然后将模型保存在xml文件当中。

//训练,保存模型CvSVM svm;

svm.train(trainingData, classes, Mat(), Mat(), SVM_params);svm.save(“svm.xml”);(2)加载模型实现分类

针对未知的图像,经过上面的处理过程到得二值图(黑白)作为输入准备,将图像中每一个封闭区域作为一个单独的向量,作为训练后的svm模型的输入,遍历二值图中的所有封闭区域,调用SVM的预测接口,得到最后的结果

for (int i = 0;i < number;i++){

Mat inMat = imread(files[i].c_str()); Mat p = inMat.reshape(1, 1);p.convertTo(p, CV_32FC1); int response = (int)svm.predict(p); if (response == 0) result++;}

用红色表示A目标,用蓝色表示B目标,用绿色表示C目标。预测前和预测后的效果图示意,如图5所示。

图5

4 结束语

本文研究实现的是用于特定范围的图像识别处理系统,整个图像处理系统完全自主开发,只是在最后进行特征提取和预测这个过程使用了开源的第三方库的接口进行辅助处理。

整个系统在某特定范围已经取得了应用,起到了一定的经济和社会效益。但是就整个图像处理系统而言,技术属于传统技术范畴,但完全自主开发。

最后随着技术的进步,图像处理的方向未来也应该采用AI的新

技术才会光明的前途。

作者简介:刘林(1981—),男,重庆人,硕士研究生,主任工程师,研究方向:图像处理,嵌入式系统,QT系统开发。

因篇幅问题不能全部显示,请点此查看更多更全内容