模式识别冯军美.docx
- 文档编号:8870257
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:69
- 大小:2.49MB
模式识别冯军美.docx
《模式识别冯军美.docx》由会员分享,可在线阅读,更多相关《模式识别冯军美.docx(69页珍藏版)》请在冰点文库上搜索。
模式识别冯军美
研究生专业课程考试答题册
得分:
学号
姓名
冯军美
考试课程
模式识别
考试日期
2014.7.10
西北工业大学研究生院
一、研究论述题(60分)
识别检测印刷电路板上圆形或方形焊盘上锡膏的边缘,要求:
①显示每个焊盘上锡膏图像的单像素边缘轮廓;②精确求解每个焊盘上锡膏图像的几何中心,并显示中心坐标值。
具体包括:
1.(10分)论述你所采用的识别检测算法所属研究领域的技术研究现状及热点研究方向。
2.(10分)论述上述研究领域中,目前的主要算法/方法。
3.(10分)论述你的算法中涉及到的图像预处理技术。
4.(15分)阐述你的算法/方法所依据的基本原理和设计思路。
若有改进之处,详细论述改进部分所要解决的主要问题是什么,以及所研究的解决方法的理论依据。
5.(15分)描述算法/方法的具体实现步骤,对所使用的变量、参数等应进行说明。
绘制识别过程的算法/方法流程图。
要求:
用word文档,A4纸打印。
排版格式如下:
(1)题目标题:
小四黑体;题目内容:
小四号宋体。
子题目标题:
小四黑体;正文及参考文献:
五号宋体。
(2)参考文献:
按正文中引用顺序排序,在正文中用上标标明参考文献的引用处。
(3)正文行间距取1.3行距。
(4)英文、数字用TimesNewRoman字体。
二、算法编程(40分)
利用C/C++语言编程实现所设计的算法/方法。
要求:
(1)程序编制应具有规范性,程序中的变量、自编函数/子程序、各功能模块及关键命令行应有注释说明。
(2)附源程序及程序运行的结果截图。
一、研究论述题(60分)
识别检测印刷电路板上圆形或方形焊盘上锡膏的边缘,要求:
①显示每个焊盘上锡膏图像的单像素边缘轮廓;②精确求解每个焊盘上锡膏图像的几何中心,并显示中心坐标值。
具体包括:
1.(10分)论述你所采用的识别检测算法所属研究领域的技术研究现状及热点研究方向。
1)目标轮廓提取是图像分割重要研究内容。
现有的图像分割方法主要分以下几类:
基于阈值的分割方法、基于区域的分割方法、基于边缘的分割方法以及基于特定理论的分割方法等。
图像分割技术的研究现状:
图像分割在图像工程中起着承上启下的作用,是介于低层次处理和高层次处理的中间层次。
早在1965年就有人提出了检测边缘算子边缘检测方法,边缘检测已产生了不少经典算法[1]。
目前越来越多的学者开始将数学形态学、模糊理论、遗传算法理论、分形理论和小波变化理论等研究成果运用到图像分割中,产生了结合特定数学方法和针对特殊图像分割的先进图像分割技术。
图像分割技术发展趋势:
1°.多种特征融合的分割方法。
除利用图像的原始灰度特征外,我们还可以利用图像的梯度特征、几何特征(形态、坐标、距离、方向、曲率等)、变换特征(傅立叶谱、小波特征、分形特征等)及统计学特征(纹理、不变矩、灰度均值等)等高层次特征,对于每个待分割的像素,将所提取的特征值组成一个多维特征矢量,再进行多维特征分析。
通过多种特征的融合,图像像素能被全面描述,从而获得更好的分割结果[2]。
2°.多种分割方法结合的分割方法。
由于目标成像的不确定性以及目标的多样性,单一的分割方法很难对含复杂目标的图像取得理想的分割结果。
此时,除需要利用多种特征融合外,还需将多种分割方法结合,使这些方法充分发挥各自的优势,并避免各自的缺点。
采用哪种方式结合以获得良好的分割效果是这种方法研究的重点。
2)K均值聚类属于数据挖掘技术。
数据挖掘主要的算法有分类模式、关联规则、决策树、序列模式、聚类模式分析、神经网络算法等等。
聚类是数据挖掘中的一个非常重要的研究课题。
数据挖掘研究现状[3]:
目前,国外数据挖掘的最新发展主要有对发现知识的方法的进一步研究,如近年来注重对Bayes(贝叶斯)方法以及Boosting方法的研究和改进提高;KDD与数据库的紧密结合;传统的统计学回归方法在KDD中的应用。
数据挖掘的热点研究方向[4]:
网站的数据挖掘(Websitedatamining)、生物信息或基因(Bioinformatics/genomics)的数据挖掘及其文本的数据挖掘(Textualmining)、空间地理数据挖掘和视频数据挖掘。
2.(10分)论述上述研究领域中,目前的主要算法/方法。
1)图像分割领域目前的主要方法:
1°.基于边缘的分割方法基于边缘的分割方法是一种利用图像不同区域间的像素灰度不连续的特点检测出区域间的边缘,从而实现图像分割的方法。
边缘检测是所有基于边缘分割方法的第一步。
边缘检测可以根据处理的顺序分为并行边缘检测和串行边缘检测。
2°.基于区域的分割方法基于区域的分割方法主要包括阈值法和区域分割算法两种。
阈值法:
常用的阈值选取法有利用图像灰度直方图的双峰法、最大类间方差法、迭代法、灰度拉伸法、最小误差法等。
现有的大部分算法的关键都集中在阈值确定的研究上。
区域分割算法:
其实质就是把具有某种相似性质的像素连通,从而构成最终的分割区域。
3°.结合特定理论工具的分割方法基于人工神经网络的分割方法、基于小波分析和变换的分割方法和基于数学形态学的分割技术。
2)数据挖掘领域的主要算法[3]:
神经网络法、决策树法、遗传算法、粗糙集法、模糊集法、关联规则法和聚类模式分析。
3.(10分)论述你的算法中涉及到的图像预处理技术。
图像预处理技术:
1)灰度变换。
由于原图像为24位的彩色图像,为了提高处理速度并方便后续处理,在图像预处理阶段将彩色图像转换成了灰度图像。
本文所采用的灰度化方法是采用加权方法进行的,灰度值同RGB颜色对应关系:
I=0.299R+0.585G+0.114B,R,G,B为彩色图像的三个颜色分量值。
2)改进的大津二值化方法。
由于图像的背景较为复杂,从直方图中可看出,仅用一个大津法求出的全局阈值无法有效的处理焊盘图片。
为了尽可能多的保留感兴趣区域,去除噪声区域,所以,在二值化采用改进的大津二值化方法。
3)平滑滤波。
由于图像中的噪声多数是随机的,为了适应不同的二值化图片对不同噪声的滤除要求,算法中邻域的大小是可变的,大小为(2*x+1)*(2*x+1),x可根据需要选择,在去噪的同时对边缘也起到了平滑作用。
4)腐蚀与膨胀。
在二值图像中腐蚀可消除细小的点或线,膨胀可填充边缘或像素内部的孔。
结构元素的选择不同,产生的图像效果不同。
腐蚀、膨胀使用顺序不同,可形成不同的运算类型,如开运算、闭运算。
5)投影法定位。
对处理后的二值图像进行水平、垂直投影,可确定焊盘区域的大概位置,只对定位后的区域进行处理,不仅减少去噪的工作量,而且使边缘提取效果更加准确。
6)区域填充。
由于焊锡区域灰度变化范围比较大,二值化之后,焊锡区域是一些离散的点,去噪之后如果直接进行边缘检测,不仅边缘变化比较剧烈,而且边缘提取的难度比较大。
如果采用闭运算使焊锡区域保持一致,则边缘的位置会发生移动,最终使边缘不准确。
尝试过两种方案后,最终采用水平分块填充和垂直分块填充。
4.(15分)阐述你的算法/方法所依据的基本原理和设计思路。
若有改进之处,详细论述改进部分所要解决的主要问题是什么,以及所研究的解决方法的理论依据。
1)改进的大津二值化方法。
该算法是依据大津二值化法设计的,利用直方图来计算类间方差的方法。
a)基本原理:
类间方差越大,表示两个类的差别越大。
设使用某一个阈值将灰度图像根据灰度大小,分成目标部分和背景部分两类,在这两类的类内方差最小和类间方差最大的时候,得到的阈值是最优的二值化阈值。
b)设计思路:
对一幅N×M个像素的图像来说。
1°.首先计算图像的平均灰度u,计算如下:
对于一张大小M×N的图像,统计得到全部图像中灰度为i对应的像素个数n(i),于是该图像的平均灰度值u=∑i*n(i)/(M*N);
2°.列出求解最佳阀值t的相关变量;
记t为目标与背景的分割阈值,记目标像素(灰度大于t)占图像的比例为w1,记目标像素的平均灰度为u1:
w1=W1/(M*N),其中的W1是灰度值大于t的统计数
u1=∑i*n(i)/W1,i>t.
同理,得到背景像素占图像的比例w2,背景像素的平均灰度u2;
3°.求解最佳阀值t是类差别最大
遍历2°中的t,使得G=w1*(u1-u)*(u1-u)+w2*(u2-u)*(u2-u)最大。
G最大时,即得到了最佳阈值。
c)焊盘区域定位之前的二值化改进之处:
由灰度图像的直方图可以看出,直方图有三个波峰,第一个波峰之前的灰度值所对应像素点绝大部分是焊锡边缘之外、焊盘之内的黄色涂层区域,而最后一个波峰对应横跨整幅图的白色焊锡区域,所以,我们感兴趣的焊锡区域所对应的像素点的灰度值在这两个波峰之间。
我们只需要在第二个波峰附近的灰度直方图附近求一个大津二值化阈值即可。
解决的主要问题:
尽可能多的保留焊锡区域,过滤噪声。
理论依据:
第一个波峰之前的灰度值主要对应黄色涂层区域,后一个波峰之后的灰度值主要对应横跨整幅图的白色焊锡区域,对整幅图求大津二值化阈值很可能将这两块区域的噪声视为感兴趣区域,加大噪声处理难度和感兴趣区域的定位。
只对第二个波峰附近求阈值,求类间最大方差,用先验知识保证了二值化的准确度。
d)焊盘区域定位后的二值化改进之处:
焊盘区域定位之后,每个焊盘的位置已经确定,由于光照不均,为了全局二值化使焊锡区域信息保留的不完整,在这里,我们把每个焊盘区域都看作一幅完整的图像,分别用大津二值化求阈值,进行二值化。
解决的主要问题:
由于光照不均,全局二值化会导致焊锡区域边缘信息保留不完整。
理论依据:
小范围区域光照变化不会太剧烈,将每个焊盘区域看作一幅光照均匀的图片进行处理,所以整幅图像采用局部二值化方法。
2)平滑滤波
a)基本原理:
邻域内白点数少于规定的阈值邻域内所有像素点的值赋为0。
b)设计思路:
以像素点(x,y)为中心,建立(2n+1)*(2n+1)的邻域,设定阈值T。
统计邻域内的所有像素值为1的像素点的个数sum,如果sum<=T,此邻域内所有点被视为噪声点,将邻域内所有像素值赋为0;如果sum>T,此邻域视为感兴趣区域,不处理。
c)改进之处:
邻域的大小和阈值是可变的,不同的图像可以根据需要自行设定。
解决的主要问题:
滤除图像中的小噪声或用来产生背景图像。
理论依据:
T较小时,可以除去图像中的小噪点,T较大时,焊锡区域被去除掉了,剩下的图像作为背景区域。
3)“减”运算
a)基本原理:
原图像中去除图像中不需要的加性图像或固定的背景信息,可得到感兴趣的区域。
b)设计思路:
由于焊锡区域为一些离散的点集,将二值化图形进行腐蚀,得到大区域噪声信息,用原二值化图像减去噪声信息,得到感兴趣的焊锡区域。
c)改进之处:
由于腐蚀过程中,噪声区域一些信息也被腐蚀掉了,所以,在进行减运算之前,对噪声区域进行膨胀操作。
解决的主要问题:
去除了大范围的噪声,有利于焊盘区域的定位。
理论依据:
焊锡区域灰度值变化范围较大,二值化之后有用的信息点较为离散。
4)投影法定位
a)基本原理:
有焊盘的区域像素值为1的像素点比较密集,其他区域像素值为0。
b)设计思路:
1°.整幅图像水平投影,row[i]存放第i行像素值为1的像素点的个数,row[i]==0&&row[i+1]!
=0作为上边界的判断条件,row[i]!
=0&&row[i+1]==0作为下边界的判断条件;
2°.将上下两排焊盘分别进行垂直投影,col[i]存放第i列像素值为1的像素点的个数col[i]==0&&col[i+1]!
=0作为焊盘左边界的判断条件,col[i]!
=0&&col[i+1]==0作为焊盘右边界的判断条件;
3°.对每个焊盘区域重新进行水平投影和垂直投影,精确确定焊盘的边界;
4°.对每个焊盘区域边界进行放宽,避免焊锡超出焊盘区域的情况。
c)解决的主要问题:
焊盘区域定位以后,只需对焊盘区域进行处理,大大减少了去噪的工作量,使焊盘边缘确定更准确。
5)区域填充
a)基本原理:
焊锡区域虽然是一些离散度,但焊锡的边界点绝大部分是白点,将边缘点进行水平填充和垂直填充,再进行滤波,可以使边缘更平滑、准确。
b)设计思路:
1°.将去噪后的每个焊锡区域的二值化图像分为上、中、下三部分进行水平填充。
由于焊锡的形状未知,为避免破坏焊锡的轮廓,在填充焊锡区域上、下部分时,只填充其中的一部分区域。
填充的起点判别条件为填充小区域每行第一个不为0的像素点,终点为填充小区域每行最后一个不为0的像素点。
填充之后,进行滤波;
2°.将每个焊锡区域的二值化图像分为上、中、下三部分进行垂直填充。
填充起点的判别条件为填充小区域每列第一个不为0的像素点,终点为每列最后一个不为0的像素点。
填充之后,进行滤波;
3°.按此方法,继续填充左上部分、坐下部分、右上部分和右下部分。
填充之后,滤波。
c)改进之处:
代替了闭运算的功能,但效果更好。
由于进行闭运算时,虽然对焊锡区域进行了很好的填充,但是,同时也改变了焊锡轮廓的位置,使得轮廓位置发生了移动。
解决的主要问题:
填充焊锡区域的同时,不改变焊锡边缘轮廓的位置,这是闭运算不能替代的。
理论依据:
焊锡区域是连续的,在焊锡边缘点之内的区域必定为焊锡区域。
6)K均值算法
基本原理:
同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。
设计思路:
1°.从n个数据对象任意选择k个对象作为初始聚类中心;
2°.循环3°到4°直到每个聚类不再发生变化为止;
3°.根据每个聚类对象的均值,计算每个对象与这些中心对象的距离。
并根据最小距离重新对相应对象进行划分;
4°.重新计算每个有变化聚类的均值。
解决的主要问题:
较为准确地找到了聚类中心。
5.(15分)描述算法/方法的具体实现步骤,对所使用的变量、参数等应进行说明。
绘制识别过程的算法/方法流程图。
1)灰度变换
本文所采用的灰度化方法是采用加权方法进行的,灰度值同RGB颜色对应关系:
I=0.299R+0.587G+0.114B,其中0.299、0.587、0.114是根据人眼对于红绿蓝三个颜色分量的敏感度、经由学者们实验得出的三个系数,R,G,B为彩色图像的三个颜色分量值。
2)焊盘定位之前二值化方法
1°.根据图像的灰度图建立对应的灰度直方图,在灰度直方图中求出像素点最多的灰度值T,求出第一个波峰与第二个波峰之间的波谷处的灰度值T3,求出第二个波峰与第三个波峰之间的波谷处的灰度值T1;
2°.用大津二值化方法求T3与T1之间的阈值T2,大津二值化方法步骤如上题所述;
3°.对灰度图进行二值化,如果灰度值在T3与T1之间,视此点为感兴趣区域的点,灰度值赋为1,其余的灰度值处赋为0,视为噪声点。
3)焊盘定位之后的局部二值化方法
1°.把第一个焊盘区域看作一幅完整的图片,用大津法进行二值化,求出阈值为Threshold;
2°.对此焊盘区域进行二值化,将灰度值在T3与Threshold之间的赋值为1,其他灰度值处赋值为0;
3°.对其余的焊盘区域重复1°和2°步骤,直到所有的焊盘区域均进行二值化完成为止。
4)邻域去噪算法
1°.以像素点(x,y)为中心,建立邻域大小为(2n+1)*(2n+1)的模板,n的值由实参确定;
2°.统计邻域中像素值为1的像素点的个数sum,若sum>Threshold,则邻域内的像素值保持不变,否则邻域清0。
其中,Threshold为阈值,其大小由实参确定。
5)投影法定位
1°.整幅图像水平投影,row[i]存放第i行像素值为1的像素点的个row[i]==0&&row[i+1]!
=0作为上边界的判断条件,其中,y=i作为上边界,row[i]!
=0&&row[i+1]==0作为下边界的判断条件,其中,y=i+1作为下边界;
2°.将上下两排焊盘分别进行垂直投影,col[i]存放第i列像素值为1的像素点的个数col[i]==0&&col[i+1]!
=0作为焊盘左边界的判断条件,其中x=作为左边界,col[i]!
=0&&col[i+1]==0作为焊盘右边界的判断条件,其中,x=i+1作为右边界;
3°.对每个焊盘区域重新进行水平投影和垂直投影,精确确定焊盘的边界;
4°.对每个焊盘区域边界进行放宽,避免焊锡超出焊盘区域的情况。
6)区域填充
1°.将去噪后的每个焊锡区域的二值化图像分为上、中、下三部分进行水平填充。
由于焊锡的形状未知,为避免破坏焊锡的轮廓,在填充焊锡区域上、下部分时,只填充其中的一部分区域。
填充的起点判别条件为填充小区域每行第一个不为0的像素点,终点为填充小区域每行最后一个不为0的像素点。
填充之后,进行滤波,其中,滤波参数根据二值化图像具体情况自行确定;
2°.将每个焊锡区域的二值化图像分为上、中、下三部分进行垂直填充。
填充起点的判别条件为填充小区域每列第一个不为0的像素点,终点为每列最后一个不为0的像素点。
填充之后,进行滤波;
3°.按此方法,继续填充左上部分、坐下部分、右上部分和右下部分。
填充之后,滤波。
7)提取轮廓算法
方法一:
用opencv提供的cvFindContours函数寻找焊锡轮廓,轮廓数据存储在contour中,再用cvDrawContours函数再原图中画出提取的轮廓。
方法二:
1°.建立矩阵类型的图像ImgMat,并初始化为0。
在填充后的焊锡二值化图像中,对所有的像素点,如果任一像素点(x,y)处四邻域(x+1,y)、(x-1,y)、(x,y-1)、(x,y+1)的像素值均为1的,则在ImgMat中标记对应的(x,y)处的像素值为1;
2°.在焊锡二值化图像中,如果像素点(x,y)满足:
此处的像素值为1;
ImgMat在(x,y)处的像素值为0,则此点为边缘轮廓点,并在坐标数组中记录下此点的位置。
8)几何中心的计算
方法一:
轮廓区域所有点求平均
在焊锡二值化图像中,对每个焊盘区域,对焊盘区域的所有像素为1的像素点求坐标的平均值,此平均值即认为几何中心。
方法二:
轮廓点求平均
对7)每个焊盘区域提取的边缘点求坐标的平均值,此平均值即认为几何中心。
方法三:
K均值聚类算法
1°.从n个数据对象任意选择k个对象作为初始聚类中心;
2°.循环3°到4°直到每个聚类不再发生变化为止;
3°.根据每个聚类对象的均值,计算每个对象与这些中心对象的距离。
并根据最小距离重新对相应对象进行划分;
4°.重新计算每个有变化聚类的均值。
流程图:
二、算法编程(40分)
利用C/C++语言编程实现所设计的算法/方法。
要求:
(1)程序编制应具有规范性,程序中的变量、自编函数/子程序、各功能模块及关键命令行应有注释说明。
(2)附源程序及程序运行的结果截图。
(1)源程序
头文件"Pretreatment.h"
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
usingnamespacestd;
/*********************大津二值化*******************/
//大津二值化
//Image:
输入图像
intOtsuTrans(IplImage*Image)
{
/*不同像素值的概率值*/
floatp[256]={0},w0[256]={0},w1[256]={0},u0[256]={0},u1[256]={0},u[256]={0},Variance[256]={0};
intT,i,j;//变量
intH;//行
intW;//列
intThreshold;//阈值
intheight=Image->height;//图像的高度
intwidth=Image->width;//图像的宽度
floatmatSize=(float)height*width;//矩阵大小
CvMat*srcMat=cvCreateMat(height,width,CV_32FC1);//存放图像数据的矩阵
cvConvert(Image,srcMat);//图像类型转换
//得到不同灰度值的概率
for(H=0;H for(W=0;W p[(int)cvmGet(srcMat,H,W)]++; } for(i=0;i<256;i++){ p[i]/=matSize; } for(T=0;T<256;T++) { //阈值为T时,第一组的概率总值 for(i=0;i { w0[T]+=p[i]; } //阈值为T时,第一组灰度平均值 for(i=0;i { u0[T]+=i*p[i]/w0[T]; } //阈值为T时,第二组的概率总值 w1[T]=1-w0[T]; } //阈值为T时,第二组灰度平均值 for(T=0;T<256;T++) for(i=T;i<256;i++) { u1[T]+=i*p[i]/w1[T]; } //得到全部采样的灰度平均值 for(T=0;T<256;T++) u[T]=w0[T]*u0[T]+w1[T]*u1[T]; //求方差 for(i=0;i<256;i++) Variance[i]=w0[i]*(u0[i]-u[i])*(u0[i]-u[i])+w1[i]*(u1[i]-u[i])*(u1[i]-u[i]); //寻找最大方差,并得到阈值Threshold matSize=0; for(i=0;i<256;i++) { if(Variance[i]>=matSize) { matSize=Variance[i]; Threshold=i; } } returnThreshold; } /***********************************************/ /*****************滤波函数*********************/ //srcMat: 图像的矩阵类型, //changshu: 决定邻域滤波模板的大小 //Threshold: 阈值 voidLocalPossible3(CvMat*srcMat,intchangshu,intThreshold) { intheight=srcMat->height;//图像的高度 intwidth=srcMat->width;//图像的高度 CvMat*tmpMat=cvCreateMat(height,wi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 模式识别 冯军美
![提示](https://static.bingdoc.com/images/bang_tan.gif)