数字图像匹配_第1页
数字图像匹配_第2页
数字图像匹配_第3页
数字图像匹配_第4页
数字图像匹配_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 数字图像匹配一.需求分析题目: 数字图像匹配问题描述: 所谓图像匹配,就是指图像之间的比较、得到不同图像之间的相似度。基于数字图像,编写对两副数字图像进行匹配的算法及演示程序。基本要求: (1).进行匹配的两幅图像为JPG格式或BMP格式。(2).能够进行对两幅数字图像的匹配。(3).采用交互式程序对图像进行匹配。提高要求:能够对数字进行简单处理,例如放大,缩小,翻转,灰度处理,图象二值化。开发环境:MATLAB 7.1 GUI:MATLAB 7.1自带的GUI界面编辑器基本功能:通过分析题目的基本要求,我将此软件的基本功能主要分为2大模块:一个是数字图像处理模块,另一个是数字图像匹配模块。

2、在数字图像处理模块中,用户可以对数字图像进行简单的处理,可以对图像进行放大,缩小,翻转,灰度处理。在数字图像匹配模块中,用户可以对两张图像进行匹配并显示匹配结果。性能、接口:输入/输出形式:此软件以MATLAB7.1 GUI编辑器开发出的界面作为载体对相映的图像行相应的操作,所以输入输出形式主要是通过MATLAB7.1 GUI编辑器开发出的界面来实现的。输入形式:输入任何一幅JPG格式或BMP格式的数字图像。输出形式:将经过相应操作处理后的图片显示出来。测试数据要求: 任何一幅JPG格式或BMP格式的数字图像。 二算法设计1.概念解释:数字图像:数字图像是由被称做像素的小块区域组成的二维像素矩

3、阵。一般把图像分成3种形式:单色图像,灰度图像和彩色图像。像素:表示图像颜色的最小单位灰度图像:灰度图是指只含亮度信息,不含色彩信息的图像,就像平时看到的黑白照片:亮度由暗到明,变化是连续的。灰度图的每个像素的亮度用一个数值来表示,通常数值范围在0255之间,即可用一个字节来表示,0表示黑,255表示白,而其他表示灰度。点阵图:显示器的屏幕由可以发光的像素点组成. 并且从几何位置看, 所用这些像素点构成一个矩形的阵列.利用计算机控制各像素点按我们指定的要求发光,就构成了我们需要的图形.这种方式构成的图形我们可称之为点阵图形.点阵图形的坐标系统:各像素点有一个坐标唯一指定了它的位置.如果点阵图形

4、的大小是N×M, 那么它的点阵共有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开始的. 我们常用的显示器的像素

5、坐标就是如此.2数字图像匹配算法设计: 在此软件中我采用了两种图像匹配算法:基于灰度的模板匹配算法基于灰度的快速匹配算法。由于各种各样的原因如(成象条件的差异)图象预处理,引入的误差等,参与图象匹配的模板与潜在的匹配子图象间通常存在着程度不同的不一致,因此根据模板在一幅陌生图象中检测出潜在的匹配对象并得出它在图象中的位置是一件复杂的工作。基于灰度的摸版匹配算法模板匹配是指用一个较小的图像,即模板与源图像进行比较,以确定在源图像中是否存在与该模板相同或相似的区域,若该区域存在,还可确定其位置并提取该区域。 模板匹配常用的一种测度为模手术台与源图像对应区域的误差平方和。设f(x,y)为M×

6、;N的源图像,t(j,k)为J×K(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)取

7、最大值时,便可认为模板与图像是匹配的。但假设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)匹配的最佳位置,若从该位置开始在源图像中取出与模板大小相同的一个区域,便可得到匹配图像。基于灰度的快速匹配算法1 局部灰度特征的编码与计算 首先将整幅图像划分为k×

8、;k尺寸且互不重叠的方块,k可根据问题任意选择,称该方块为R-块.如果图像的边长不是k的整数倍,则将最底部与最右边剩余的几行、几列裁剪掉(下文将说明这并不影响最终的匹配结果).对边长为H的图像,共可得到H2/k2个R-块.对于R-块Ri,S(Ri)表示Ri所包含像素的灰度值之和. 定义1. R-块(如图1中的R5所示)与其周围8个相邻的R-块(如图1中的R1,R2,R3,R4,R6,R7,R8,R9所示)组成R-块的邻域.将R-块的邻域分为4个部分,分别为D1,D2,D3,D4(如图1所示),称为R-块的D-邻域.R-块R5分别属于4个D-邻域,即D1=R1R2R4R5;D2=R4R5R7R8

9、;D3=R5R6R8R9;D4=R2R3R5R6. 对于每个D-邻域中的4个R-块,可规定一个顺序(如图2中所取的逆时针序).对Dj所包含的4个R-块的像素灰度值之和S(Rj1),S(Rj2),S(Rj3),S(Rj4)做排序,显然共有4!=24种可能,每种排序结果可以用5位的二进制编码来表示,记作P(Dj)00000,00001,10111. 图1 图2将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)

10、. 其中,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的选择,可以改变图像

11、处理粒度的大小,以改变抵抗不同频率噪声的能力. 2 特征的匹配过程 定义3. 在待搜索图S上以模板T的长、宽为横向、纵向步长,从S的左上角开始按模板T的大小划分S得到的子图称为限制块,记作Ci, j,其中(i,j)为限制块左上角顶点在搜索图S上的坐标.这样划分后,如果在搜索图S的右侧或底部有剩余部分,则相应地从S的最右侧开始向左,或从最底部开始向上划分出一列或一行限制块,使得全部限制块可以完全覆盖搜索图S.这样得到的图S上的限制块的数量为M2/H2。定义4. 限制块Ci,j与模板T都是尺寸为N×N的图像,各自的R-块特征集合 用(N/k)阶方阵A(Ci,j)与A(T)表示,称为特征编

12、码矩阵,这里k为R-块的边长.在Ci,j与T作特征比较时,即比较A(T)每一个元素与A(Ci,j)中每一个元素是否相等,如果相等,则记下矩阵A(Ci,j)中的行号、列号.三应用程序设计:1数字图像匹配相关函数:imread函数功能:从图像文件(BMP,HDF,JPEG,PCX,TIFF,XWD等格式)中读入图像数据。格式:A=imread(文件名,图像文件格式)说明:文件名为指定图像文件名称的字符串。图像文件格式为图像文件格式的字符串。文件名必须在当前目录或MATLAB路径中,如果找不到则录找文件名.图像文件格式.A为无符号8位整数(uint8)。如果文件灰度图像(详细解释见“算法设计”中的“

13、概念解释”),则A为一个二维数组;如果文件是一个真彩色RGB图像,则A是一个三维数组(m×n×3)。举例:A=imread(E:temp_picture.jpg);%读取存放在E盘下的名为temp_picture.jpg的图像,并将其整个点阵数据传给A注:在MATLAB中申请一个变量时不需要指定类型,其具体类型由系统自动判别imwrite函数功能:交图像写入图像文件(以BMP,HDF,JPEG,PCX,TIFF,XWD等格式)。格式:imwrite(A,文件名,图像文件格式)说明:文件名为指定图像文件名称的字符串。图像文件格式是指定图像文件的保存格式的字符串。如果A是一个无

14、符号8位整数表示的灰度图像或真彩色图像,imwrite直接交数组A中的值写入文件。如果A为双精度浮点数,imwrite首先使用uint8(round(255*A)自动将数组中的值变换为无符号8位整数,即交0,1范围内的浮点数变换为0,255范围内8位整数,然后写入文件。imshow函数功能:图像显示格式:imshow(I)说明:在图形窗口显示I,其中I为用imread函数赋值的变量,是一个图形矩阵。rgb2gray函数功能:转换RGB图像或颜色映像表为灰度图像。格式:I = rgb2gray(RGB)说明:RGB为用imread函数赋值的变量,是一个图形矩阵;I为一个表示灰度图像的二维数组。i

15、mcrop函数功能:图像剪裁格式::I2=imcrop(I):I2=imcrop(I,RECT)说明:格式为交互方式,imcrop显示输入图像,等待用户用鼠标定义要剪裁的矩形。格式为非交互方式,对灰度图像进行非交互方式的剪裁操作,通过四元素向量RECT=xmin ymin width height指定剪裁矩阵,这些值是定义在坐标系中的,xmin和ymin是图像矩阵I的一处坐标,width是以此坐标为准向右的延伸的长度,height是以此坐标为准向下延伸的长度,由此构成要剪裁的矩形区域。size函数功能:用来求出某一个变量的的大小参数格式:x,y=size(I)说明:I用imread函数赋值的变

16、量,是一个图形矩阵且为灰度图像,x用来保存I的高度值,y用来保存I的宽度值。2数字图像匹配函数:(1) 基于灰度的摸板匹配算法mean2函数功能:求图像均值格式:m=mean2(A)说明:mean2函数可用来计算图像矩阵A的均值m,m是双精度标量。举例:I=imread(temp_picture.jpg); m=mean2(I)运行结果:m=107.6755corr2函数功能:求图像间相关系数格式:r=cor2(A,B)说明:corr2函数计算图像矩阵A与B的相关系数,矩阵A与B的大小相同,如均为:m×n。计算公式如下:其中, =mean2(A), =mean2(B)。相关系数是表示

17、矩阵A与B的线性联系密切程度的一个统计量,相关系数值是小于等于1的正数。值为1时,表示矩阵A与B的线性联系最为密切,值为0时,表示矩阵A与B不相关,线性联系最最弱。举例:I=imread(temp_picture.jpg);C=corr2(I,I);运行结果如下:C=1plot函数功能:在线性坐标系中绘制二维数据格式:plot(x,y,颜色)说明:x,y可以为任意一个失量。举例:plot(1:100,4,'r');%在纵坐标为4处画一条平行于x轴,长度为100的红色的线段 %其中1:100表示从1到100以默认值为1的速度递增,r表示红色hold命令功能:可以交图形添加到现有的

18、图形中,从而实现图形的叠加。如果交hold设置为ON,则MATLAB在绘图时交不再清除已经存在的图形,而是交新的数据直接加到当前图形中。当新的数据落在原来的坐标范围之外时,MATLAB交自动进行坐标比例的调整。testpipei_1功能:实现两幅数字图像的匹配实现细节::读取原图像(搜索图)和匹配图像(模板图)yuantu=imread('E:P1010813.jpg');%读取原图像pipeitu=imread('afterCut.jpg');%读取匹配图像:将原图像和匹配图像灰度化,以便于计算yuantu2gray=rgb2gray(yuantu);%将原图

19、灰度化pipeitu2gray=rgb2gray(pipeitu);%将匹配图灰度化: 获取原图像和匹配图像的尺寸pipei_height,pipei_width=size(pipeitu2gray);%获取匹配图象的大小尺寸,其值为高,宽,将匹配图象的长度值赋给pipei_width,将匹配图象的宽度值赋给pipei_lenthyuantu_height,yuantu_width=size(yuantu2gray);%获取原图象的大小尺寸,其值为高,宽,将原图象的长度值赋给pipei_width,将原图象的宽度值赋给pipei_lenth:显示出原图,并调用hold on命令,以实现以后在原

20、图像上做标记imshow(yuantu);%显示原图像 hold on;:在原图像上进行扫描,横坐标到原图像的宽度减去匹配图的宽度,纵坐标到原图像高度减去匹配图的高度;对于原图像上扫描到的每个像素点,以此像素点的坐标为准,剪裁(参见imcrop函数说明)出一个大小和匹配图大小一样的矩阵,此像素点为该矩阵的左上角第一个像素;对这个临时矩阵和匹配图像的矩阵取相关系数值(参见corr2函数说明);规定相关系数的值(我设为0.9),如果取得的相关系数值大于规定值,可认为在以此坐标为左上角第一个像素的临时矩阵和匹配图矩阵是相匹配的;如果在此坐标下是匹配的话,则以此为左上角,将匹配区域标记出来。for i

21、=1:yuantu_height-pipei_height for j=1:yuantu_width-pipei_width temp_picture=imcrop(yuantu2gray,j,i,pipei_width-1,pipei_height-1); r=corr2(temp_picture,pipeitu2gray);%取得相关系数 if r>0.9%规定值为0.9 %下面用plot函数在原图的坐标系上画出匹配区域 plot(j:j+pipei_width,i,'r'); plot(j:j+pipei_width,i+pipei_height,'r

22、9;); plot(j,i:i+pipei_height,'r'); plot(j+pipei_width,i:i+pipei_height,'r'); end endend(2) 基于灰度的快速模板匹配算法dec2bin函数功能:十进制数转换成二进制数格式:A=dec2bin(B,位数)说明:B为十进制数,A为转换后的二进制序列,位数为A的二进制位数。举例:A=dec2bin(13,5)%将13转换为5位的二进制运行结果:A =01101bin2dec函数功能:二进制数转换成十进制数格式:A=bin2dec(B)说明:B为二进制序列,A为转换后的十进制数。举例

23、:C=bin2dec('0101101')%将二进制为0101101的序列转化为十进制运行结果:C = 45getOrder函数功能:根据输入的四项参数的大小顺序,返回一个5位二进制的编码格式:shunxu=getOrder(temp_shunxu_1,temp_shunxu_2,temp_shunxu_3,temp_shunxu_4)举例:T=getOrder(32,13,56,42)运行结果:T= 10000gettezheng函数功能:根据特征块的左上角坐标得出该特征块的特征值,特征值的定义详见基于灰度的快速匹配算法中的定义2。格式:tezheng=gettezheng(

24、i,j,I,k)说明:i,j为特征块左上角的横坐标与衷纵坐标,I为图像矩阵,k为最佳分块标准值min函数功能:求向量中的最小值格式:A=min(B)说明:B为一个向量,A中保存的是B中的最小值举例:A=min(12 32 45 66 2 3)运算结果:A= 2max函数功能:求向量中的最大值格式:A=max(B)说明:B为一个向量,A中保存的是B中的最大值举例:A=max(12 32 45 66 2 3)运算结果:A= 66sum函数功能:求向量中和格式:A=sumB)说明:B为一个向量,A中保存的是B中的和举例:A=sum(12 32 45 66 2 3)运算结果:A= 160testpip

25、ei_2函数实现细节::读取原图像(搜索图)和匹配图像(模板图)yuantu=imread('E:P1010813.jpg');%读取原图像pipeitu=imread('afterCut.jpg');%读取匹配图像:将原图像和匹配图像灰度化,以便于计算yuantu2gray=rgb2gray(yuantu);%将原图灰度化pipeitu2gray=rgb2gray(pipeitu);%将匹配图灰度化: 获取原图像和匹配图像的尺寸及分块标准值pipei_height,pipei_width=size(pipeitu2gray);%获取匹配图象的大小尺寸,其值为高

26、,宽,将匹配图象的长度值赋给pipei_width,将匹配图象的宽度值赋给pipei_lenthyuantu_height,yuantu_width=size(yuantu2gray);%获取原图象的大小尺寸,其值为高,宽,将原图象的长度值赋给pipei_width,将原图象的宽度值赋给pipei_lenthtemp_min=min(pipei_height,pipei_width);%取两个边中最短的一条边k=fix(temp_min/5);%以分成3×3特征块为基准,得出最佳分块标准值:计算及记录匹配图的9个特征块的信息;显示出原图,并调用hold on命令,以实现以后在原图像上

27、做标记 for t=1:3%去掉外围的一圈 for s=1:3%取顺时针为正方向 temp_pipeitu(t,s)=bin2dec(gettezheng(t,s,pipeitu2gray,k); %将二进制编码值(特征块值)以十进制的形式保存在3×3的矩阵中的对应位置 end; end; imshow(public_A); hold on;:在原图像上进行扫描,横坐标到原图像的宽度减去匹配图的宽度,纵坐标到原图像高度减去匹配图的高度;对于原图像上扫描到的每个像素点,以此像素点的坐标为准,剪裁(参见imcrop函数说明)出一个大小和匹配图大小一样的矩阵,此像素点为该矩阵的左上角第一个

28、像素;对这个临时矩阵进行特征值提取,并和匹配图的特征值进行比较,如果特征块的匹配数大于一定数(我设定为大于等于8),可认为在以此坐标为左上角第一个像素的临时矩阵和匹配图矩阵是相匹配的;如果在此坐标下是匹配的话,则以此为左上角,将匹配区域标记出来。 r=0; for t=1:3 %去掉外围的一圈 for s=1:3 %取顺时针为正方向 temp_pipeitu_te=temp_pipeitu(t,s); temp_yuantu_te=bin2dec(gettezheng(t,s,temp_picture,k); if temp_pipeitu_te=temp_yuantu_te%如果特征值相同,

29、r就加1 r=r+1; else break; end; end; if r=0 break; end; end; if r>=8%下面用plot函数在原图的坐标系上画出匹配区域 plot(j:j+pipei_width,i,'r'); plot(j:j+pipei_width,i+pipei_height,'r'); plot(j,i:i+pipei_height,'r'); plot(j+pipei_width,i:i+pipei_height,'r'); end endend3GUI界面设计: 本程序采用交互式来演示图像匹配过程,GUI采用MATLAB 7.1自带的GUI界面编辑器。主要涉及图像显示,各个功能按钮对显示的图像所进行的操作(如:放大,缩小,旋转和图像匹配),文件对话框(用来读取和保存图像)。 uigetfile函数功能:打开磁盘内的文件格式:pname,adrname=uigetfile(格式,名称)说明:pname为选择的文件名,adrname为路径;uigetfile通常和if exist(文件名)连用,如果存在

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论