计算方法课程设计报告 数字图像匹配.docx
《计算方法课程设计报告 数字图像匹配.docx》由会员分享,可在线阅读,更多相关《计算方法课程设计报告 数字图像匹配.docx(33页珍藏版)》请在冰豆网上搜索。
计算方法课程设计报告数字图像匹配
计算方法课程设计报告--数字图像匹配
数字图像匹配
1.概念解释....................................................5
2.数字图像匹配算法设计.............................................5
⑴基于灰度的归一化匹配算法.......................................6
⑵基于灰度的快速模板匹配算法.....................................8
三.相应matlab程序设计...........................................10
1.数字图像匹配相关函数.........................................10
2.数字图像匹配函数.............................................12
(1)基于灰度的归一化匹配算法....................................12
(2)基于灰度的快速模板匹配算法..................................14
四.实验测试....................................................18
1.基于灰度的归一化匹配算法.......................................18
2.基于灰度的快速模板匹配算法.....................................18
五.试验结果评价..................................................19
六.实例解答......................................................19
七.实习心得体会.................................................21
附录............................................................23
附录一:
testpipei_1.m(基于灰度的归一化匹配算法).....................23
附录二:
testpipei_2(基于灰度的快速模板匹配算法).....................23
附录三:
getOrder.m(二进制编码).....................................25
附录四:
gettezheng.m(求特征值)....................................27
附录五:
图片...........................................................29
数字图像匹配
一.课题分析
背景描述:
现代社会已进入信息时代,随着计算机技术、通信技术和数学的发展,图像信息处理能力和水平也不断提高,相应的也得到和更多关注、研究和更加广泛的应用。
图像匹配是图像处理的一项关键技术,可广泛用于目标识别与跟踪、立体视觉、变化检测、车场车牌识别、人脸识别、机器人导航、测绘、等领域,已成为一门新兴的分支学科。
由于拍摄时间、拍摄角度、自然环境的变化、多种传感器的使用和传感器本身的缺陷,使拍摄的图像不仅受噪声的影响,而且存在严重的灰度失真和几何畸变。
在这种条件下,如何有效地进行图像匹配一直是人们研究的热点和难点。
实例问题:
现在来看一个很简单的问题:
这边收集了八张很类似的照片(见picture文件夹中的k001.jpg---k008.jpg),还有一张小照片(见picture文件夹中的pipeitu.jpg),而现在只知道这张小照片,是从这些类似的照片中的某一张剪切下来得到的,问题是如何快速准确的找出这张小照片是从那一张照片中剪切下来的,以及确定出在原照片上所剪切的那个部位。
显然由于这些照片是及其类似的,用肉眼是很难观察辨别出来的。
而下面要讲的图像匹配技术就是一个处理类似问题的一项有效的技术。
在此课程设计报告也将在最后运用图像匹配技术对这个问题做出回答。
图像匹配的概念:
图像匹配是指通过一定的匹配算法在两幅或多幅图像之间识别同名点,如二维图像匹配中通过比较目标区和搜索区中相同大小的窗口的相关系数,取搜索区中相关系数最大所对应的窗口中心点作为同名点。
其实质是在基元相似性的条件下,运用匹配准则的最佳搜索问题。
简单的讲就是,要判读一幅大图像中是否存在某种已知的图案,则以一幅与该图案有着相同尺寸和方向的小图像为模板,通过一定的算法可以在图中找到目标,确定其坐标位置。
开发环境:
MATLAB7.3.0
二.算法设计
1.概念解释:
①数字图像:
数字图像是由被称做像素的小块区域组成的二维像素矩阵。
一般可以把图像分成3种形式:
单色图像,灰度图像和彩色图像。
②像素:
表示图像颜色的最小单位,每个像素都是由一定长度的数字值来表示它的颜色和亮度。
③灰度图像:
灰度图是指只含亮度信息,不含色彩信息的图像,就像平时看到的黑白照片:
亮度由暗到明,变化是连续的。
根据灰色的程度,可分为若干个等级,人眼可分的最多等级是64级。
图像处理中常采用256个灰色等级。
灰度图的每个像素的亮度用一个数值来表示,通常数值范围在0—255之间,即可用一个字节来表示,0代表纯黑,255代表纯白,而其他表示灰度,根据黑白所占的比例分布在0—255之间。
④点阵图:
显示器的屏幕由可以发光的像素点组成.并且从几何位置看,所用这些像素点构成一个矩形的阵列.利用计算机控制各像素点按我们指定的要求发光,就构成了我们需要的图形.这种方式构成的图形我们可称之为点阵图形。
⑤点阵图形的坐标系统:
各像素点有一个坐标唯一指定了它的位置.如果点阵图形的大小是N×M,那么它的点阵共有M行N列,每个像素点的位置就由它所在的行和列的位置所唯一确定.这个行和列的位置就给出了点阵图形的坐标系统.按照前面的顺序,第m行,第n列的像素点顺序数就是m+(n-1)N.反之,顺序数为s的像素点在第sModN行,第Int(s/N)+1列,这里的sModN是s除以N后的余数,Int(s/N)是s/N的整数部分.需要注意的是第m行,第n列的像素点的坐标可能不是(m;n),而是(m-1;n-1).这是因为有时为了在计算机中处理的方便,像素点的行列的排序不是从1,而是从0开始的.我们常用的显示器的像素坐标就是如此.
2.数字图像匹配算法设计:
图像匹配主要可分为以灰度为基础的匹配和以特征为基础的匹配。
灰度匹配的基本思想:
以统计的观点将图像看成是二维信号,采用统计相关的方法寻找信号间的相关匹配。
利用两个信号的相关函数,评价它们的相似性以确定同名点。
灰度匹配通过利用某种相似性度量,如相关函数、协方差函数、差平方和、差绝对值和等测度极值,判定两幅图像中的对应关系。
特征匹配是指通过分别提取两个或多个图像的特征(点、线、面等特征),对特征进行参数描述,然后运用所描述的参数来进行匹配的一种算法。
在此课程设计中我采用了两种基于灰度图像匹配算法:
1基于灰度的模板匹配算法
2基于灰度的快速匹配算法。
⑴基于灰度的归一化匹配算法
1一般图像“归一化互相关函数”的定义
设两幅图像在坐标平面的区域D上分别表示为f(x,y)(表示原图)和g(x,y)(表示模板图),这两幅图像在D上的相似程度有两类计算方法。
一类是差值测度,另一类是相关测度。
差值测度:
这类测度几种常用的具体计算式如下:
1)
2)
3)
相关测度:
(其性能比差值测度更为优良),以下是一步步得出“归一化互相关函数”的定义的过程。
将方差测度计算式展开如下:
=
+
—2
(*)
令:
Df(x,y)称为源图像中与模板对应区域的能量,它与像素位置(x,y)有关,但随像素位置(x,y)的变化,Df(x,y)变化缓慢。
Dfg(x,y)为模板与源图像对应区域的互相关,它随像素位置(x,y)的变化而变化,当模板g(j,k)和源图像中对应区域相匹配时取最大值。
Dg(x,y)称为模板的能量,它与图像像素位置(x,y)无关,只用一次计算便可。
显然,计算误差平方和测度可以减少计算量。
基于上述分析,若设Df(x,y)也为常数,则用Dfg(x,y)便可进行图像匹配,当Dfg(x,y)取最大值时,便可认为模板与图像是匹配的。
但如果只简单地根据Dfg(x,y)的大小来进行图像匹配,则是不可靠。
比如,有两幅图像g1(x,y)和g2(x,y);g1(x,y)=f(x,y),
,g2(x,y)=
f(x,y),
显然,
。
但是g1(x,y)与f(x,y),完全相同。
在(*)式中,g(x,y)为确定的模板图,(*)式的第二项
是常数,可以将略去。
然后再用
规格化,此时(*)式的第一项为1,而规格化的(*)式的第三项就可以反映两图的相似程度,另外,由施瓦茨不等式:
(当且仅当g=cf时等式才成立,其中c为常数)。
这样就很自然就得到“归一化互相关函数”的定义:
用它来测度g(x,y)和f(x,y)的相似程度,显然,P的上限是1,P值越大,表示两者越相似。
2数字图像的归一化相关测度匹配算法
对于数字图像,设f(x,y)为M×N的源图像,g(j,k)为J×K(J≤M,K≤N)的模板图像,上述的公式的积分应用离散和代替,故归一化相关测度匹配算式为:
下图给出了模板匹配的示意图,其中假设源图像f(x,y)和模板图像g(k,l)的原点都在左上角。
对任何一个f(x,y)中的(x,y),根据上式都可以算得一个P(x,y).当x和y变化时,g(j,k)在源图像区域中移动并得出P(x,y)所有值。
同样P(x,y)的上限是1,P(x,y)值越大,表示两者越相似。
P(x,y)的最大值指出了与t(j,k)匹配的最佳位置,若从该位置开始在源图像中取出与模板大小相同的一个区域,便可得到匹配图像。
⑵基于灰度的快速模板匹配算法
1局部灰度特征的编码与计算
首先将整幅图像划分为k×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=R1∪R2∪R4∪R5;D2=R4∪R5∪R7∪R8;D3=R5∪R6∪R8∪R9;D4=R2∪R3∪R5∪R6.
对于每个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).
其中,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都是尺寸为N×N的图像,各自的R-块特征集合用(N/k)阶方阵A(Ci,j)与A(T)表示,称为特征编码矩阵,这里k为R-块的边长.在Ci,j与T作特征比较时,即比较A(T)每一个元素与A(Ci,j)中每一个元素是否相等,如果相等,则记下矩阵A(Ci,j)中的行号、列号.
三.相应matlab程序设计
1.数字图像匹配相关函数:
①imread函数
功能:
从图像文件(BMP,HDF,JPEG,PCX,TIFF,XWD等格式)中读入图像数据。
格式:
A=imread(文件名,’图像文件格式’)
说明:
文件名为指定图像文件名称的字符串。
’图像文件格式’为图像文件格式的字符串。
文件名必须在当前目录或MATLAB的work文件夹中,如果找不到则录找’文件名.图像文件格式’.A为无符号8位整数(uint8)。
如果文件灰度图像(详细解释见“算法设计”中的“概念解释”),则A为一个二维数组;如果文件是一个真彩色RGB图像,则A是一个三维数组(m×n×3)。
举例:
A=imread('picture/k001.jpg');%读取存放在work文件夹下的picture
文件夹下的名为k001.jpg的图像,并将其整个点阵数据传给A。
注:
在MATLAB中申请一个变量时不需要指定类型,其具体类型由系统自动判别
②imwrite函数
功能:
交图像写入图像文件(以BMP,HDF,JPEG,PCX,TIFF,XWD等格式)。
格式:
imwrite(A,文件名,'图像文件格式’)
说明:
文件名为指定图像文件名称的字符串。
'图像文件格式’是指定图像文件的保存格式的字符串。
如果A是一个无符号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为一个表示灰度图像的二维数组。
⑤size函数
功能:
用来求出某一个变量的的大小参数
格式:
[x,y]=size(I)
说明:
I用imread函数赋值的变量,是一个图形矩阵且为灰度图像,x用来保存I的高度值,y用来保存I的宽度值。
⑥imcrop函数
功能:
图像剪裁
格式:
Ⅰ:
I2=imcrop(I)
Ⅱ:
I2=imcrop(I,RECT)
说明:
格式Ⅰ为交互方式,imcrop显示输入图像,等待用户用鼠标定义要剪裁的矩形。
格式Ⅱ为非交互方式,对灰度图像进行非交互方式的剪裁操作,通过四元素向量RECT=[xminyminwidthheight]指定剪裁矩阵,这些值是定义在坐标系中的,xmin和ymin是图像矩阵I的一处坐标,width是以此坐标为准向右的延伸的长度,height是以此坐标为准向下延伸的长度,由此构成要剪裁的矩形区域。
2.数字图像匹配函数
(1)基于灰度的归一化匹配算法
①mean2函数
功能:
求图像均值
格式:
m=mean2(A)
说明:
mean2函数可用来计算图像矩阵A的均值m,m是双精度标量。
举例:
A=imread('Picture.bmp');
m=mean2(A);
运行结果:
m=
138.0552
②corr2函数
功能:
求图像间相关系数
格式:
r=cor2(A,B)
说明:
corr2函数计算图像矩阵A与B的相关系数,矩阵A与B的大小相同,如均为:
m×n。
计算公式如下:
其中,
=mean2(A),
=mean2(B)。
相关系数是表示矩阵A与B的线性联系密切程度的一个统计量,相关系数值是小于等于1的正数。
值为1时,表示矩阵A与B的线性联系最为密切,值为0时,表示矩阵A与B不相关,线性联系最最弱。
③plot函数
功能:
在线性坐标系中绘制二维数据
格式:
plot(x,y,’颜色’)
说明:
x,y可以为任意一个失量。
举例:
plot(1:
100,4,'r');%在纵坐标为4处画一条平行于x轴,长度为100的红色的线段
%其中1:
100表示从1到100以默认值为1的速度递增,’r’表示红色
④hold命令
功能:
可以交图形添加到现有的图形中,从而实现图形的叠加。
如果交hold设置为ON,则MATLAB在绘图时交不再清除已经存在的图形,而是交新的数据直接加到当前图形中。
当新的数据落在原来的坐标范围之外时,MATLAB交自动进行坐标比例的调整。
⑤testpipei_1(代码祥见附录一)
功能:
实现两幅数字图像的匹配
实现细节:
Ⅰ:
读取原图像(搜索图)和匹配图像(模板图)
yuantu=imread('Picture.bmp');%读取原图像
pipeitu=imread('Pipeitu.bmp');%读取匹配图像
Ⅱ:
将原图像和匹配图像灰度化,以便于计算
yuantu2gray=rgb2gray(yuantu);%将原图灰度化
pipeitu2gray=rgb2gray(pipeitu);%将匹配图灰度化
Ⅲ:
获取原图像和匹配图像的尺寸
[pipei_height,pipei_width]=size(pipeitu2gray);%获取匹配图象的大小尺寸,其值为[高,宽],将匹配图象的长度值赋给pipei_width,将匹配图象的宽度值赋给pipei_lenth
[yuantu_height,yuantu_width]=size(yuantu2gray);%获取原图象的大小尺寸,其值为[高,宽],将原图象的长度值赋给pipei_width,将原图象的宽度值赋给pipei_lenth
Ⅳ:
显示出原图,并调用holdon命令,以实现以后在原图像上做标记
imshow(yuantu);%显示原图像
holdon;
Ⅴ:
在原图像上进行扫描,横坐标到原图像的宽度减去匹配图的宽度,纵坐标到原图像高度减去匹配图的高度;对于原图像上扫描到的每个像素点,以此像素点的坐标为准,剪裁(参见imcrop函数说明)出一个大小和匹配图大小一样的矩阵,此像素点为该矩阵的左上角第一个像素;对这个临时矩阵和匹配图像的矩阵取相关系数值(参见corr2函数说明);规定相关系数的值(我设为0.95),如果取得的相关系数值大于规定值,可认为在以此坐标为左上角第一个像素的临时矩阵和匹配图矩阵是相匹配的;如果在此坐标下是匹配的话,则以此为左上角,将匹配区域标记出来。
fori=1:
yuantu_height-pipei_height
forj=1:
yuantu_width-pipei_widthtemp_picture=imcrop(yuantu2gray,[j,i,pipei_width-1,pipei_height-1]);
r=corr2(temp_picture,pipeitu2gray);%取得相关系数
ifr>0.95%规定值为0.95
%下面用plot函数在原图的坐标系上画出匹配区域
plot(j:
j+pipei_width,i,'b');
plot(j:
j+pipei_width,i+pipei_height,'b');
plot(j,i:
i+pipei_height,'b');
plot(j+pipei_width,i:
i+pipei_height,'b');
end
end
end
(2)基于灰度的快速模板匹配算法
①dec2bin函数
功能:
十进制数转换成二进制数
格式:
A=dec2bin(B,位数)
说明:
B为十进制数,A为转换后的二进制序列,位数为A的二进制位数。
举例:
A=dec2bin(13,5)%将13转换为5位的二进制
运行结果:
A=
01101
②bin2dec函数
功能:
二进制数转换成十进制数
格式:
A=bin2dec(B)
说明:
B为二进制序列,A为转换后的十进制数。
举例:
C=bin2dec('0101101')%将二进制为0101101的序列转化为十进制
运行结果:
C=
45
③min函数
功能:
求向量中的最小值
格式:
A=min(B)
说明:
B为一个向量,A中保存的是B中的最小值
举例:
A=min(1232456623)
运算结果:
A=
2
④max函数
功能:
求向量中的最大值
格式:
A=max(B)
说明:
B为一个向量,A中保存的是B中的最大值
举例:
A=max(1232456623)
运算结果:
A=
66
⑤sum函数
功能:
求向量中和
格式:
A=sum(B)
说明:
B为一个向量,A中保存的是B中的和
举例:
A=sum(1232456623)
运算结果:
A=
160
⑥testpipei_2函数(代码祥见附录二)
实现细节:
Ⅰ:
读取原图像(搜索图)和匹配图像(模板图)
yuantu=imread('Picture.bmp');%读取原图像pipeitu=imread('Pipeitu.bmp');%读取匹配图像
Ⅱ:
将原图像和匹配图像灰度化,以便于计算
yuantu2gray=rgb2gray(yuantu);%将原图灰度化
pipeitu2gray=rgb2gray(pipeitu);%将匹配图灰度化
Ⅲ:
获取原图像和匹配图像的尺寸及分块标准值
[pipei_height,pipei_width]=size(pipeitu2gray);%获取匹配图象的大小尺寸,其值为[高,宽],将匹配图象的长度值赋给pipei_width,将匹配图象的宽度值赋给pipei_lenth
[yuantu_height,yuantu_width]=size(yuantu2gray);%获取原图象的大小尺寸,其值为[高,宽],将原图象的长度值赋给pipei_width,将原图象的宽度值赋给pipei_lenth
temp_min=min([pipei_height,pipei_width]);%取两个边中最短的一条边
k=fix(temp_min