资源描述
1. 需求分析1.1题目 用特征匹配算法实现数字图像匹配1.2 问题描述所谓图像匹配,就是指图像之间的比较、得到不同图像之间的相似度。基于数字图像,编写对两副数字图像进行匹配的算法及演示程序。基本要求: (1).进行匹配的两幅图像为JPG格式或BMP格式。(2).能够进行对两幅数字图像的匹配。(3).采用交互式程序对图像进行匹配。提高要求:能够对数字进行简单处理,例如放大,缩小,翻转,灰度处理,图象二值化。开发环境:MATLAB 7.1 GUI:MATLAB 7.1自带的GUI界面编辑器1.3基本功能:通过分析题目的基本要求,我将此软件的基本功能主要分为2大模块:一个是数字图像处理模块,另一个是数字图像匹配模块。在数字图像处理模块中,用户可以对数字图像进行简单的处理,可以对图像进行放大,缩小,翻转,灰度处理。在数字图像匹配模块中,用户可以对两张图像进行匹配并显示匹配结果。1.4性能、接口:输入/输出形式:此软件以MATLAB7.1 GUI编辑器开发出的界面作为载体对相映的图像行相应的操作,所以输入输出形式主要是通过MATLAB7.1 GUI编辑器开发出的界面来实现的。输入形式:输入任何一幅JPG格式或BMP格式的数字图像。输出形式:将经过相应操作处理后的图片显示出来。测试数据要求: 任何一幅JPG格式或BMP格式的数字图像。 2.算法设计2.1概念解释:数字图像:数字图像是由被称做像素的小块区域组成的二维像素矩阵。一般把图像分成3种形式:单色图像,灰度图像和彩色图像。像素:表示图像颜色的最小单位灰度图像:灰度图是指只含亮度信息,不含色彩信息的图像,就像平时看到的黑白照片:亮度由暗到明,变化是连续的。灰度图的每个像素的亮度用一个数值来表示,通常数值范围在0255之间,即可用一个字节来表示,0表示黑,255表示白,而其他表示灰度。点阵图:显示器的屏幕由可以发光的像素点组成. 并且从几何位置看, 所用这些像素点构成一个矩形的阵列.利用计算机控制各像素点按我们指定的要求发光,就构成了我们需要的图形.这种方式构成的图形我们可称之为点阵图形.点阵图形的坐标系统:各像素点有一个坐标唯一指定了它的位置.如果点阵图形的大小是NM, 那么它的点阵共有M行N 列, 每个像素点的位置就由它所在的行和列的位置所唯一确定. 这个行和列的位置就给出了点阵图形的坐标系统. 按照前面的顺序, 第m行, 第n列的像素点顺序数就是m+(n-1)N.反之, 顺序数为s的像素点在第s Mod N行, 第Int(s/N ) + 1列, 这里的s Mod N是s除以N后的余数, Int( s/N ) 是s/N的整数部分.需要注意的是第m行, 第n列的像素点的坐标可能不是(m; n), 而是(m-1; n-1). 这是因为有时为了在计算机中处理的方便, 像素点的行列的排序不是从1, 而是从0开始的. 我们常用的显示器的像素坐标就是如此.2.2数字图像匹配算法设计在此软件中我采用了两种图像匹配算法:基于灰度的模板匹配算法基于灰度的快速匹配算法。由于各种各样的原因如(成象条件的差异)图象预处理,引入的误差等,参与图象匹配的模板与潜在的匹配子图象间通常存在着程度不同的不一致,因此根据模板在一幅陌生图象中检测出潜在的匹配对象并得出它在图象中的位置是一件复杂的工作。2.2.1基于灰度的摸版匹配算法模板匹配是指用一个较小的图像,即模板与源图像进行比较,以确定在源图像中是否存在与该模板相同或相似的区域,若该区域存在,还可确定其位置并提取该区域。 模板匹配常用的一种测度为模手术台与源图像对应区域的误差平方和。设f(x,y)为MN的源图像,t(j,k)为JK(JM,KN)的模板图像,则误差平方和测度定义为:由上式展开可得:令 DS(x,y)称为源图像中与模板对应区域的能量,它与像素位置(x,y)有关,但随像素位置(x,y)的变化,DS(x,y)变化缓慢。DST(x,y)模板与源图像对应区域的互相关,它随像素位置(x,y)的变化而变化,当模板t(j,k)和源图像中对应区域相匹配时取最大值。DT(x,y)称为模板的能量,它与图像像素位置(x,y)无关,只用一次计算便可。显然,计算误差平方和测度可以减少计算量。基于上述分析,若设DS(x,y)也为常数,则用DST(x,y)便可进行图像匹配,当DST(x,y)取最大值时,便可认为模板与图像是匹配的。但假设DS(x,y)为常数会产生误差,严重时将无法下确匹配,因此可用归一化互相关作为误差平方和测度,其定义为:下图给出了模板匹配的示意图,其中假设源图像f(x,y)和模板图像t(k,l)的原点都在左上角。对任何一个f(x,y)中的(x,y),根据上式都可以算得一个R(x,y).当x和y变化时,t(j,k)在源图像区域中移动并得出R(x,y)所有值。R(x,y)的最大值指出了与t(j,k)匹配的最佳位置,若从该位置开始在源图像中取出与模板大小相同的一个区域,便可得到匹配图像。 2-1匹配图像基于灰度的快速匹配算法1.局部灰度特征的编码与计算 首先将整幅图像划分为kk尺寸且互不重叠的方块,k可根据问题任意选择,称该方块为R-块.如果图像的边长不是k的整数倍,则将最底部与最右边剩余的几行、几列裁剪掉(下文将说明这并不影响最终的匹配结果).对边长为H的图像,共可得到H2/k2个R-块.对于R-块Ri,S(Ri)表示Ri所包含像素的灰度值之和. 定义1. R-块(如图2-2中的R5所示)与其周围8个相邻的R-块(如图2中的R1,R2,R3,R4,R6,R7,R8,R9所示)组成R-块的邻域.将R-块的邻域分为4个部分,分别为D1,D2,D3,D4(如图2-2所示),称为R-块的D-邻域.R-块R5分别属于4个D-邻域,即D1=R1R2R4R5;D2=R4R5R7R8;D3=R5R6R8R9;D4=R2R3R5R6. 对于每个D-邻域中的4个R-块,可规定一个顺序(如图2-3中所取的逆时针序).对Dj所包含的4个R-块的像素灰度值之和S(Rj1),S(Rj2),S(Rj3),S(Rj4)做排序,显然共有4!=24种可能,每种排序结果可以用5位的二进制编码来表示,记作P(Dj)00000,00001,10111. 图2-2区域划分 图2-3划分后的区域将R-块Ri所在的4个D-块的P(Dj)做位串拼接,得到F(Ri)=P(D1)P(D2)P(D3)P(D4),即 F(Ri)=(P(D1)15)+(P(D2)10)+(P(D3)5)+P(D4). 其中,P(Dj)为Ri所在的邻域Dj的二进编码,为移位操作,其后面的数字表示移位位数. 定义2. F(Ri)为Ri块的20位二进制编码特征表示,简称Ri块的编码. 对一幅图像,提取它所有Ri块的编码,需要计算各个R-块的灰度值和S(Ri)、计算各个D-邻域的编码P(Dj)、计算各个Ri块的编码F(Ri)等共3步.图像最外一圈的Ri块的编码无定义.对于边长为H的图像,上述运算的时间复杂度为O(H2). 显然,F(Ri)表示R-块Ri的灰度与相邻8个R-块灰度的分布(序)关系,体现了图像灰度的相对值,因此对整体灰度值的变化具有相对的稳定性.通过对R-块尺寸k的选择,可以改变图像处理粒度的大小,以改变抵抗不同频率噪声的能力. 2. 特征的匹配过程 定义3. 在待搜索图S上以模板T的长、宽为横向、纵向步长,从S的左上角开始按模板T的大小划分S得到的子图称为限制块,记作Ci, j,其中(i,j)为限制块左上角顶点在搜索图S上的坐标.这样划分后,如果在搜索图S的右侧或底部有剩余部分,则相应地从S的最右侧开始向左,或从最底部开始向上划分出一列或一行限制块,使得全部限制块可以完全覆盖搜索图S.这样得到的图S上的限制块的数量为M2/H2。定义4. 限制块Ci,j与模板T都是尺寸为NN的图像,各自的R-块特征集合 用(N/k)阶方阵A(Ci,j)与A(T)表示,称为特征编码矩阵,这里k为R-块的边长.在Ci,j与T作特征比较时,即比较A(T)每一个元素与A(Ci,j)中每一个元素是否相等,如果相等,则记下矩阵A(Ci,j)中的行号、列号.3.应用程序设计3.1程序代码clear;clc;reference_img=imread(optical1.tif);%提取原始图片作为基准target_img=imread(optical2.tif);%要求进行匹配的图像subplot(2,3,1);%显示原始图像imshow(reference_img);title(原始图像);subplot(2,3,2);%显示进行匹配的图像imshow(target_img);title(目标图像);Ix,Iy=size(target_img);%取出图片大小x=160,103,102,209;%自己选定的特征点y=116,246,160,299;u=87,35,34,141;v=21,151,66,204;Px=polyfit(x,u,1);%映射函数求解Py=polyfit(y,v,1);for i=1:Ix for j=1:Iy m=i*Px(1,1)+Px(1,2);%映射函数 n=j*Py(1,1)+Py(1,2); m_integer=floor(m);%对映射值进行取整 n_integer=floor(n); m_decimal=m-m_integer;%对映射值取小数 n_decimal=n-n_integer; if(ge(m_integer,Ix)|ge(n_integer,Iy)|lt(m_integer,0)|lt(n_integer,0)|m_integer=0|n_integer=0)%判断映射点是否满足条件 result_img(i,j)=0; result_img3(i,j)=0; else result_img(i,j)=target_img(m_integer,n_integer);%没有进行插值 result_img3(i,j)=(1-m_decimal)*(n_decimal*target_img(m_integer,n_integer+1)+(1-n_decimal)*target_img(m_integer,n_integer)+m_decimal*(n_decimal*target_img(m_integer+1,n_integer+1)+(1-n_decimal)*target_img(m_integer+1,n_integer);%双线性插值 end if result_img(i,j)=0%把没有进行插值图像和原始图像进行组合 result_img2(i,j)=reference_img(i,j); else result_img2(i,j)=result_img(i,j); end if result_img3(i,j)=0%把插值后图像和原始图像进行组合 result_img4(i,j)=reference_img(i,j); else result_img4(i,j)=result_img3(i,j); end endendsubplot(2,3,3);%显示未插值图像匹配imshow(result_img,);title(未插值图像匹配);subplot(2,3,4);%显示未插值图像匹配组合imshow(result_img2,);title(未插值图像匹配组合)subplot(2,3,5);%显示双线性插值后图像匹配imshow(result_img3,);title(双线性插值后图像匹配);subplot(2,3,6);%显示双线性插值后图像匹配组合imshow(result_img4,);title(双线性插值后图像匹配组合);3.3界面设计 本程序采用交互式来演示图像匹配过程,GUI采用MATLAB 7.1自带的GUI界面编辑器。主要涉及图像显示,各个功能按钮对显示的图像所进行的操作(如:放大,缩小,旋转和图像匹配),文件对话框(用来读取和保存图像)。举例:pname,adrname=uigetfile(*.jpg,*.bmp)运行结果如3-1: 3-1运行结果3-2面样式4.数据测试读取了两幅图片显示在显示区域内,如图4-1所示,一幅是原始图片,一幅是目标图像。从显示区域内剪切一块区域(按下剪切按钮可进行剪切)。按下匹配算法1,或匹配算法2后,系统就会自动将模板图像在显示图像中进行匹配,如果找到了匹配地点就会用红色矩形将匹配区域给圈定下来,例如图4-1就是在显示图像中找到的匹配区域。根据测试结果得:匹配算法1(基于灰度的模板匹配算法)的匹配时间约为26秒左右。匹配算法2(基于灰度的快速匹配算法)的匹配时间约为16秒左右。结论:匹配算法1和匹配算法2的共同缺点是都绝对的依赖坐标系统,费时间较多。在抗噪音能力上,匹配算法1没有抗噪音的能力,匹配算法2在理论上有一定的抗噪音的能力,可是在此程序中没做出来。4-1测试结果图5.心得体会1.总体看来此程序已经完成了我所希望的最基本功能。2.这此课程设计是我第一次使用新的编程软件来编程,用MATLAB来编写程序。刚开始的时候由于不适应这种编译环境和对其语法不理解让我几度想要放弃,但是MATLAB的数据处理能力是不容质疑的,经过几次失败后终于将程序一点一点编出来并调试通过。3.此次课程设计是我第一次接触图形图像方面的知识,并研究图形图像领域中的一个比较热门的话题数字图像匹配。在研究图形图像基础知识和数字图像匹配算法的过程中查阅了许多资料,也得到了老师的一些帮助,使我对图形图像方面的知识有了一定了解,对数字图像匹配算法方面掌握了大致方向。4目前的数字图像匹配的算法有很多,由于时间和能力有限,在此次课程设计中仅实现了两个比较基本的算法。5.通过这次课程设计培养了我对新的编译软件的自学能力和适应能力,也培养了我对新知识的接受能力,让我收获很多。参考文献1景晓军.图像处理技术及应用. 国防工业出版社,20052张强, 王正林.精通MATLAB图像处理. 电子工业出版社,19973张兆礼.现代图像处理技术及MATLAB实现.人民邮电出版社,20014陈怀琛.MATLAB及其在课程中的应用指南. 西安电子科技大学出版社,20005朱习军.MATLAB在信号与系统与图象处理中的应用. 电子工业出版社,2002
展开阅读全文