数字图像处理实习
—多长度尺寸测量
姓名:张慧 班级:信息10-1 学号:36
目 录
一. 课程设计任务 .......................................................................................................................... 1
1.1 设计目的 ................................................................................................................. 1 1.2 设计要求 ................................................................................................................. 1
二. 课程设计原理及设计方案 ...................................................................................................... 3
2.1 设计原理 ................................................................................................................. 3 2.2 设计方案 ................................................................................................................. 5 2.3 设计流程图 ........................................................................................................... 11
三. 课程设计的步骤及结果图 .................................................................................................... 12
3.1步骤 ........................................................................................................................ 12
3.2结果图 ..................................................................................................................................... 13 四. 课程设计总结 ........................................................................................................................ 15 五. 参考文献 ................................................................................................................................ 16
信息10-1 张慧 36 一. 课程设计任务
1.1 设计目的
数字图像处理,就是用数字计算机及其他有关数字技术,对图像进行处理,以达到预期的目的。随着计算机的发展,图像处理技术在许多领域得到了广泛应用,数字图像处理已成为电子信息、通信、计算机、自动化、信号处理等专业的重要课程。
数字图像处理课程设计是在学习完数字图像处理的相关理论后,进行的综合性训练课程,其目的是:
使学生进一步巩固数字图像处理的基本概念、理论、分析方法和实现方
法;
增强学生应用VC++6.0编写数字图像处理的应用程序及分析、解决实际
问题的能力;
尝试所学的内容解决实际工程问题,培养学生的工程实践能力。 本实验是MVIPS 图像处理软件结合 MV-ERP/MRP /LSP系列机器视觉创新实验开发平台而设计的。本实验对工业流水线生产现场的高精度时实尺寸测量,供出了一种全新的测量方法。通过实验,可进一步提高同学们对机器视觉技术的了解,增强同学们的动手能力,巩固和掌握图像处理技术的基本技能。
1.2 设计要求
在加工制造领域,需要对很多零部件尺寸进行测量,以验证零件是否符合加工要求。一般这种测量可以通过千分尺或游标卡尺完成。但对于很多易碎或易变形的零件,类似的测量几乎难以完成。在这种场合,一般要求采用非接触测量方法,图像测量就是其中的方法之一。试设计一应用软件,能够对标准形状的零件进行图像测量。
要求完成功能:
1、能够读取和存储图像,对图像进行去噪和对比度增强; 2、能够根据控制点对图像失真进行几何校正;
3、根据控制点对图像进行定标,建立像素与实际尺寸之间的对应关
- 1 -
信息10-1 张慧 36 系;
4、对于非标准零件,利用人工鼠标操作,测量任意指定点间的距离; 5、对圆形标准零件进行自动尺寸测量(提高部分); 6、设计软件界面。
1.3实验器材
1) 嵌入式计算机(自备)
2) MVIPS图像处理软件及加密狗一套;
3) Microvison系列机器视觉创新教学实验平台一套; 4) Microvison工业数字相机(1394、USB接口); 5) 百万像素高分辨率镜头;
6) 机器视觉LED背光源及控制器一套;
- 2 -
信息10-1 张慧 36 二. 课程设计原理及设计方案
2.1 设计原理
2.1.1滤波去噪
由于图像中不可避免地存在噪声,故在图像预处理过程中需要对噪声进行滤除。一些常见的噪声有椒盐噪声、脉冲噪声、高斯噪声等。椒盐噪声是含随机出现的黑白亮度值,脉冲噪声是只含有随机的白强度值(正脉冲噪声)和黑强度值。与强两者不同,高斯噪声是含有亮度服从高斯或正态分布的噪声。图像的平滑处理在空间域和频域采取不同的方法,空间域滤波是在图像空间借助模版进行邻域操作,一般分为线性和非线性两类。
1. 线性平滑滤波器对去除高斯噪声有很好的效果,大多数情况下对其他来性的噪声也有很好的效果。最简单的线性滤波是均值滤波,即对局部进行均值计算,每一像素点的灰度值用其邻域内的各点灰度值的均值来置换。但是邻域N的大小控制着滤波程度,大尺度滤波器会加大滤波程度,作为消除大噪声的代价,大尺度滤波器会导致细节的损失和计算量的增加,使得图像的尖锐部分变模糊。
2. 中值滤波法是一种较好的非线性滤波方法,它将每一象素点的灰度值设置为该点某邻域窗口内的所有象素点灰度值的中值,在去除图像脉冲噪声、椒盐噪声的同时,又能保留图像的边缘细节,有效地保持图像轮廓的清晰。
设G(x,y)表示原始图像在(x,y)处的灰度值,选用N*N的正方形窗口(N一般取3或5),F(x,y)表示滤波后的图像在(x,y)处的灰度值,Med{}表示对窗口求中值,则中值滤波的输出可表达为:
F(i,j)Med{G(xn,ym) (1-N)/2n,m(N-1)/2}
2.1.2几何校正
数字图像几何变形是指图像上的像元在图像坐标系的坐标与其在实际元件等参考坐标系之间的坐标不一致,从而导致图像行列式不均匀、像元大小和位置与实际对应不准确、形状不规则等。图像的总体几何变形是平移、
- 3 -
信息10-1 张慧 36 缩放、旋转、偏扭、弯曲及其其他变形的综合作用结果。对于图像的几何校正有直接和间接两种方法,其关键环节在于:一是像素坐标变换;而是像素亮度值冲采样。
在对工件进行图像采集时,主要涉及到的几何变形是投影畸变,形象的说获得的图像就像是影子近大远小,因此只要在采集图像时设置四个控制点,根据我们已知控制点的标准图像和获得的畸变的控制点图像建立传输函数,利用传输函数对元件的畸变图像反变换获得理想的元件图像。
2.1.3测量定标
元件尺寸的图像测量,是建立在实际尺寸与像素关系已知的基础上的,通过检测元件的像素个数,以及像素与实际尺寸的对应关系(图像分辨率)求得元件的实际尺寸。
对于扫描仪等设备获取的图像,因为其设备为固定高度且步进电机匀速扫描采集信息,则可以获取元件图像的像素分辨率(像素/英寸dpi),然后直接利用此分辨率进行测距计算。
而大部分图像,包括相机、摄像头获取,或者从屏幕上截取得到,其图像分辨率已经发生变化,或者根本没有任何实际意义,这是就需要对图像进行尺寸定标。在获取元件图像的同时,放置已知具体实际尺寸的标定物,在获取图像后与元件图像一起进行相同的几何校正等一系列操作,最终求的其像素数,从而获得像素数与实际尺寸的比例关系,设为分辨率dpi,进行元件实际尺寸的测量计算。
2.1.4增强对比度和二值化处理
经过几何校正后的图像则可以用于尺寸测量,但由于背景的影响,在检测元件边缘时会有较大的误差,因而更好的办法是增强对比度后设置门限,对图像进行二值化处理。
1. 在数字图像处理中,二值图像占有非常重要的地位,二值化后的图像更容易检测元件图像的边缘。图像的二值化有利于图像的进一步处理,使图像变得简单,而且数据量减小,能凸显出感兴趣的目标的轮廓。其次,要进行二值图像的处理与分析,首先要把灰度图像二值化,得到二值化图像。
2. 为了方便选取二值化所需的阈值,我们希望图像的直方图是一个标
准的双峰一谷,则直接在谷底处取得阈值,使一侧为0另一侧为1,因此需要对图像首先进行对比度增强。如果原图象f(x,y)的灰度范围是[m,M],我们希望调整后的图象g(x,y)的灰度范围是[n,N],利用VC++图象处理工具箱中的函数,可以很容易实现上述线性变换的对比度增强。
- 4 -
信息10-1 张慧 36 2.1.5投影法自动测距
投影法就是统计目标像素在水平方向(x轴)和竖直方向(y轴)上累计的个数,然后画出统计图形。根据本次统计图形的零极点判断元件图像的边缘,测得边缘之间的距离即为所求元件的尺寸。
对于统计图像峰值的判断,可以采用一阶甚至二阶差分,判断统计图像两侧异号或者突变的点,即元件的边缘位置。
2.1.6手动两点测距
应用最简单方法,测得图像上两点像素的坐标,计算出两点间的像素数,然后根据读取或者测得的图像分辨率计算出任意两点间距离。
2.2 设计方案
根据以上设计原理的选择,结合VC++6.0的进行图像处理,主要是图像轮廓提取和图像的尺寸计算
/*********************************************************************** * 函数名称: * ContourDIB() * 参数:
* LPSTR lpDIBBits - 指向源DIB图像指针
* LONG lWidth - 源图像宽度(象素数,必须是4的倍数) * LONG lHeight - 源图像高度(象素数) * 返回值:
* BOOL - 运算成功返回TRUE,否则返回FALSE。 * 说明:
* 该函数用于对图像进行轮廓提取运算。
* 要求目标图像为只有0和255两个灰度值的灰度图像。
***********************************************************************/ int L=0,H=0;
//图像的长 宽
char *Quality=NULL; //是否合格
BOOL CDibImage::ContourDIB(LPSTR lpDIBBits, LONG lWidth, LONG lHeight) {
lpSrc; lpDst;
// 指向源图像的指针
// 指向缓存图像的指针 // 指向缓存DIB图像的指针
- 5 -
LPSTR LPSTR LPSTR
lpNewDIBBits;
信息10-1 张慧 36 HLOCAL long i,j,z;
hNewDIBBits;
//循环变量
unsigned char find_L,find_H,Start_L,Start_H,flag_L,flag_H; //寻找到边界点标志 unsigned int Q_L_MIN=100,Q_H_MIN=80, Q_L_MAX=360,Q_H_MAX=120; //产
品合格标志 目前是手动在程序中输入
unsigned char n,e,s,w,ne,se,nw,sw; unsigned char pixel;
//像素值
// 暂时分配内存,以保存新图像
hNewDIBBits = LocalAlloc(LHND, lWidth * lHeight); if (hNewDIBBits == NULL) { }
lpNewDIBBits = (char * )LocalLock(hNewDIBBits); // 初始化新分配的内存,设定初始值为255 lpDst = (char *)lpNewDIBBits;
memset(lpDst, (BYTE)255, lWidth * lHeight); for(j = 1; j // 指向源图像倒数第j行,第i个象素的指针 lpSrc = (char *)lpDIBBits + lWidth * j + i; return FALSE; // 指向目标图像倒数第j行,第i个象素的指针 lpDst = (char *)lpNewDIBBits + lWidth * j + i; pixel = (unsigned char)*lpSrc; //目标图像中含有0和255外的其它灰度值 if(pixel != 255 && pixel != 0) { return FALSE; if(pixel == 0) //取得当前指针处的像素值,注意要转换为unsigned char型 *lpDst = (unsigned char)0; //0 显示为黑色 也就是轮廓线 nw = (unsigned char)*(lpSrc + lWidth -1); - 6 - 信息10-1 张慧 36 } /**************************************************************************/ // 计算长度 L 单位像素 /**************************************************************************/ //寻找到边界点标志 find_L=1; find_H=1; Start_L=0; flag_L=1; //测试长度的起点 和结束点的标志 L=0; { for(i = 1;i //行 for(j = 1; j n = (unsigned char)*(lpSrc + lWidth ); ne = (unsigned char)*(lpSrc + lWidth +1); w = (unsigned char)*(lpSrc -1); e = (unsigned char)*(lpSrc +1); sw = (unsigned char)*(lpSrc - lWidth -1); s = (unsigned char)*(lpSrc - lWidth ); se = (unsigned char)*(lpSrc - lWidth +1); //如果相邻的八个点都是黑点 if(nw+n+ne+w+e+sw+s+se==0) { } *lpDst = (unsigned char)255; // 255 显示为白色 // 指向源图像倒数第j行,第i个象素的指针 lpSrc = (char *)lpDIBBits + lWidth * j + i; // 指向目标图像倒数第j行,第i个象素的指针 lpDst = (char *)lpNewDIBBits + lWidth * j + i; pixel = (unsigned char)*lpSrc; - 7 - //取得当前指针处的像素值,注意要转换为unsigned char型 信息10-1 张慧 36 /******************开始点检测**************************/ if(pixel == 0&&flag_L) { nw = (unsigned char)*(lpSrc + lWidth -1); n = (unsigned char)*(lpSrc + lWidth ); ne = (unsigned char)*(lpSrc + lWidth +1); w = (unsigned char)*(lpSrc -1); e = (unsigned char)*(lpSrc +1); sw = (unsigned char)*(lpSrc - lWidth -1); s = (unsigned char)*(lpSrc - lWidth ); se = (unsigned char)*(lpSrc - lWidth +1); //如果相邻的八个点都是黑点 } if(Start_L==1) { if(pixel == 0) { L++; //长度像素 if(nw+n+ne+w+e+sw+s+se==0) { L=0; } else { find_H=0; flag_L=0; Start_L=1; } /***************结束点检测***************************/ nw = (unsigned char)*(lpSrc + lWidth -1); n = (unsigned char)*(lpSrc + lWidth ); ne = (unsigned char)*(lpSrc + lWidth +1); w = (unsigned char)*(lpSrc -1); e = (unsigned char)*(lpSrc +1); sw = (unsigned char)*(lpSrc - lWidth -1); - 8 - 信息10-1 张慧 36 s = (unsigned char)*(lpSrc - lWidth ); se = (unsigned char)*(lpSrc - lWidth +1); //如果相邻的八个点都是黑点 if(nw+n+ne+w+e+sw+s+se==0) { Start_L=0; } } } find_L=0; } } /**********************************************************************/ // 计算宽 H 单位像素 /**********************************************************************/ //寻找到边界点标志 find_L=1; find_H=1; Start_H=0; flag_H=1; H=0; for(i = 1;i { for(j = 1; j // 指向源图像倒数第j行,第i个象素的指针 lpSrc = (char *)lpDIBBits + lWidth * j + i; // 指向目标图像倒数第j行,第i个象素的指针 lpDst = (char *)lpNewDIBBits + lWidth * j + i; pixel = (unsigned char)*lpSrc; if(pixel == 0&& flag_H) { - 9 - //取得当前指针处的像素值,注意要转换为unsigned char型 /******************开始点检测**************************/ 信息10-1 张慧 36 } if(Start_H==1) { H++; //宽度像素 if(pixel == 0) { nw = (unsigned char)*(lpSrc + lWidth -1); n = (unsigned char)*(lpSrc + lWidth ); ne = (unsigned char)*(lpSrc + lWidth +1); w = (unsigned char)*(lpSrc -1); e = (unsigned char)*(lpSrc +1); sw = (unsigned char)*(lpSrc - lWidth -1); s = (unsigned char)*(lpSrc - lWidth ); se = (unsigned char)*(lpSrc - lWidth +1); //如果相邻的八个点都是黑点 - 10 - nw = (unsigned char)*(lpSrc + lWidth -1); n = (unsigned char)*(lpSrc + lWidth ); ne = (unsigned char)*(lpSrc + lWidth +1); w = (unsigned char)*(lpSrc -1); e = (unsigned char)*(lpSrc +1); sw = (unsigned char)*(lpSrc - lWidth -1); s = (unsigned char)*(lpSrc - lWidth ); se = (unsigned char)*(lpSrc - lWidth +1); //如果相邻的八个点都是黑点 { H=0; } else { find_L=0; flag_H=0; Start_H=1; } if(nw+n+ne+w+e+sw+s+se==0) /***************结束点检测***************************/ 信息10-1 张慧 36 if(nw+n+ne+w+e+sw+s+se==0) { } } find_H=0; } Start_H=0; } } //**********************************************************************/ 判断产品是否合格 if(Q_L_MIN else Quality=\"不合格\"; //**********************************************************************/ // 复制腐蚀后的图像 memcpy(lpDIBBits, lpNewDIBBits, lWidth * lHeight); LocalUnlock(hNewDIBBits); LocalFree(hNewDIBBits); return TRUE; } 2.3 设计流程图 - 11 - 信息10-1 张慧 36 三. 课程设计的步骤及结果图 3.1步骤 1) 熟悉MVIPS应用软件,熟悉机器视觉实验平台的基本操作,掌握实验平台、工业数字相机和机器 视觉LED光源的安装及调试。 2) 实验平台搭建完成后,打开实验平台电源开关,光源控制器开关; 3) 将配套相机驱动程序拷贝到计算机某盘下,安装相机驱动程序; 4) 启动相机Demo,连接相机进入实时状态,观察图像显示区域,是否可以正常显示图像; 5) 调整平台运动速度及光源亮度; 6) 将MVIPS软件配套的加密狗插到计算机USB接口; 7) 单击鼠标右键,选择“解锁”弹出登陆对话框,输入登录密码“admin”; 8) 采集到一张标准模板图像,创建标准模板,设置相应的模板参数并保存(创建标准模板好坏关系 到检测结果,对于创建过程附录中详细说明); 9) 执行菜单采集?连续命令,会听到“咔哒”一声,表示拍摄的图像已经送到计算机的MVIPS图像 处理软件进行处理; 10) 程序开始运行分析处理当前采集图片; 11) 输出检测结果画面; - 12 - 信息10-1 张慧 36 3.2结果图 元件图: 进行轮廓提取后并检测是否合格: - 13 - 信息10-1 张慧 36 元件图: 进行轮廓提取后并检测是否合格: - 14 - 信息10-1 张慧 36 四. 课程设计总结 1. 通过此次实验设计,再次熟悉VC++6.0的使用,扩展VC++6.0在数字图像处理方面的应用,掌握一些基本的图像处理工具箱,而且学会了GUI图形界面的设计; 2. 理论联系实践,将课堂内容深化,数字图像处理课程已经结课有一段时间了,重拾起来便有别样的体会,为解决实际问题而去查阅,收获更大,通过设计,回顾了关于图像直方图、噪声与滤波、增强与复原、压缩与编码以及图像校正等方面的课堂知识; 3. 习得了一种新的测量尺寸的方法,先对图像进行预处理,滤波、校正、增强和二值化,然后通过定标、投影、测像素距离的方法实现实际尺寸距离的测量,而且效果比实际测量更理想。 4. 完成本次设计,使本人对VC++6.0有了更进一步的掌握,促使我的编程水平大幅度提升,对数字图像处理的设计原理和方法也有了十分深刻的体会,巩固了所学知识,加深了印象,让知识和实际操作更近了。同时锻炼了我查阅、借鉴大量资料的能力,十分有效的提高了学习积极性和主动性。 - 15 - 信息10-1 张慧 36 五. 参考文献 1 冈萨雷斯.数字图像处理.电子工业出版社,2010:59-108 2 杨梅.利用数字图像处理技术测量零件几何尺寸.长春,2009.09 3 谭礼晋,耿春明.图像处理在微小尺寸测量中的应用研究,2008 4 李俊山,李旭晖.数字图像处理.清华大学出版社2007:167-180 5 张弘.数字图像处理与分析.机械工业出版社,2007:92-129 6 马平.数字图像处理和压缩.电子工业出版社,2007:87-141 7 陆玲,王蕾,桂颖.数字图像处理.中国电力出版社2007:45-124 8 张少军,笱中魁,李庆利,李忠富,金剑.利用数字图像处理技术测量直齿圆柱齿轮几何尺寸.唐山,2004.12 9 赵金玲,刘学锋.基于MATLAB的遥感数字图像几何校正方法.荆州,2003.12 10 张少军,艾矫健,李忠富,李长江,李庆利.利用数字图像处理技术测量几何尺寸.北 京,2002.06 - 16 - 因篇幅问题不能全部显示,请点此查看更多更全内容