数字图像匹配.docx
- 文档编号:27621093
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:19
- 大小:141.44KB
数字图像匹配.docx
《数字图像匹配.docx》由会员分享,可在线阅读,更多相关《数字图像匹配.docx(19页珍藏版)》请在冰豆网上搜索。
数字图像匹配
数字图像匹配
一.需求分析
题目:
数字图像匹配
问题描述:
所谓图像匹配,就是指图像之间的比较、得到不同图像之间的相似度。
基于数字图像,编写对两副数字图像进行匹配的算法及演示程序。
基本要求:
(1).进行匹配的两幅图像为JPG格式或BMP格式。
(2).能够进行对两幅数字图像的匹配。
(3).采用交互式程序对图像进行匹配。
提高要求:
能够对数字进行简单处理,例如放大,缩小,翻转,灰度处理,图象二值化。
开发环境:
MATLAB7.1GUI:
MATLAB7.1自带的GUI界面编辑器
基本功能:
通过分析题目的基本要求,我将此软件的基本功能主要分为2大模块:
一个是数字图像处理模块,另一个是数字图像匹配模块。
在数字图像处理模块中,用户可以对数字图像进行简单的处理,可以对图像进行放大,缩小,翻转,灰度处理。
在数字图像匹配模块中,用户可以对两张图像进行匹配并显示匹配结果。
性能、接口:
输入/输出形式:
此软件以MATLAB7.1GUI编辑器开发出的界面作为载体对相映的图像行相应的操作,所以输入输出形式主要是通过MATLAB7.1GUI编辑器开发出的界面来实现的。
输入形式:
输入任何一幅JPG格式或BMP格式的数字图像。
输出形式:
将经过相应操作处理后的图片显示出来。
测试数据要求:
任何一幅JPG格式或BMP格式的数字图像。
二.算法设计
1.概念解释:
①数字图像:
数字图像是由被称做像素的小块区域组成的二维像素矩阵。
一般把图像分成3种形式:
单色图像,灰度图像和彩色图像。
②像素:
表示图像颜色的最小单位
③灰度图像:
灰度图是指只含亮度信息,不含色彩信息的图像,就像平时看到的黑白照片:
亮度由暗到明,变化是连续的。
灰度图的每个像素的亮度用一个数值来表示,通常数值范围在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.数字图像匹配算法设计:
在此软件中我采用了两种图像匹配算法:
①基于灰度的模板匹配算法②基于灰度的快速匹配算法。
由于各种各样的原因如(成象条件的差异)图象预处理,引入的误差等,参与图象匹配的模板与潜在的匹配子图象间通常存在着程度不同的不一致,因此根据模板在一幅陌生图象中检测出潜在的匹配对象并得出它在图象中的位置是一件复杂的工作。
⑴基于灰度的摸版匹配算法
模板匹配是指用一个较小的图像,即模板与源图像进行比较,以确定在源图像中是否存在与该模板相同或相似的区域,若该区域存在,还可确定其位置并提取该区域。
模板匹配常用的一种测度为模手术台与源图像对应区域的误差平方和。
设f(x,y)为M×N的源图像,t(j,k)为J×K(J≤M,K≤N)的模板图像,则误差平方和测度定义为:
由上式展开可得:
令
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)匹配的最佳位置,若从该位置开始在源图像中取出与模板大小相同的一个区域,便可得到匹配图像。
⑵基于灰度的快速匹配算法
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)中的行号、列号.
三.应用程序设计:
1.数字图像匹配相关函数:
①imread函数
功能:
从图像文件(BMP,HDF,JPEG,PCX,TIFF,XWD等格式)中读入图像数据。
格式:
A=imread(文件名,’图像文件格式’)
说明:
文件名为指定图像文件名称的字符串。
’图像文件格式’为图像文件格式的字符串。
文件名必须在当前目录或MATLAB路径中,如果找不到则录找’文件名.图像文件格式’.A为无符号8位整数(uint8)。
如果文件灰度图像(详细解释见“算法设计”中的“概念解释”),则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是一个无符号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为一个表示灰度图像的二维数组。
⑤imcrop函数
功能:
图像剪裁
格式:
Ⅰ:
I2=imcrop(I)
Ⅱ:
I2=imcrop(I,RECT)
说明:
格式Ⅰ为交互方式,imcrop显示输入图像,等待用户用鼠标定义要剪裁的矩形。
格式Ⅱ为非交互方式,对灰度图像进行非交互方式的剪裁操作,通过四元素向量RECT=[xmin
yminwidthheight]指定剪裁矩阵,这些值是定义在坐标系中的,xmin和ymin是图像矩阵I的一处坐标,width是以此坐标为准向右的延伸的长度,height是以此坐标为准向下延伸的长度,由此构成要剪裁的矩形区域。
⑥size函数
功能:
用来求出某一个变量的的大小参数
格式:
[x,y]=size(I)
说明:
I用imread函数赋值的变量,是一个图形矩阵且为灰度图像,x用来保存I的高度值,y用来保存I的宽度值。
2.数字图像匹配函数:
(1)基于灰度的摸板匹配算法
①mean2函数
功能:
求图像均值
格式:
m=mean2(A)
说明:
mean2函数可用来计算图像矩阵A的均值m,m是双精度标量。
举例:
I=imread(‘temp_picture.jpg’);
m=mean2(I)
运行结果:
m=
107.6755
②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不相关,线性联系最最弱。
举例:
I=imread(‘temp_picture.jpg’);
C=corr2(I,I);
运行结果如下:
C=1
③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('E:
\P1010813.jpg');%读取原图像
pipeitu=imread('afterCut.jpg');%读取匹配图像
Ⅱ:
将原图像和匹配图像灰度化,以便于计算
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.9),如果取得的相关系数值大于规定值,可认为在以此坐标为左上角第一个像素的临时矩阵和匹配图矩阵是相匹配的;如果在此坐标下是匹配的话,则以此为左上角,将匹配区域标记出来。
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.9%规定值为0.9
%下面用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
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
③getOrder函数
功能:
根据输入的四项参数的大小顺序,返回一个5位二进制的编码
格式:
shunxu=getOrder(temp_shunxu_1,temp_shunxu_2,temp_shunxu_3,temp_shunxu_4)
举例:
T=getOrder(32,13,56,42)
运行结果:
T=
10000
④gettezheng函数
功能:
根据特征块的左上角坐标得出该特征块的特征值,特征值的定义详见基于灰度的快速匹配算法中的定义2。
格式:
tezheng=gettezheng(i,j,I,k)
说明:
i,j为特征块左上角的横坐标与衷纵坐标,I为图像矩阵,k为最佳分块标准值
⑤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=sumB)
说明:
B为一个向量,A中保存的是B中的和
举例:
A=sum(1232456623)
运算结果:
A=
160
⑧testpipei_2函数
实现细节:
Ⅰ:
读取原图像(搜索图)和匹配图像(模板图)
yuantu=imread('E:
\P1010813.jpg');%读取原图像
pipeitu=imread('afterCut.jpg');%读取匹配图像
Ⅱ:
将原图像和匹配图像灰度化,以便于计算
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/5);%以分成3×3特征块为基准,得出最佳分块标准值
Ⅳ:
计算及记录匹配图的9个特征块的信息;显示出原图,并调用holdon命令,以实现以后在原图像上做标记
fort=1:
3%去掉外围的一圈
fors=1:
3%取顺时针为正方向
temp_pipeitu(t,s)=bin2dec(gettezheng(t,s,pipeitu2gray,k));
%将二进制编码值(特征块值)以十进制的形式保存在3×3的矩阵中的对应位置
end;
end;
imshow(public_A);
holdon;
Ⅴ:
在原图像上进行扫描,横坐标到原图像的宽度减去匹配图的宽度,纵坐标到原图像高度减去匹配图的高度;对于原图像上扫描到的每个像素点,以此像素点的坐标为准,剪裁(参见imcrop函数说明)出一个大小和匹配图大小一样的矩阵,此像素点为该矩阵的左上角第一个像素;对这个临时矩阵进行特征值提取,并和匹配图的特征值进行比较,如果特征块的匹配数大于一定数(我设定为大于等于8),可认为在以此坐标为左上角第一个像素的临时矩阵和匹配图矩阵是相匹配的;如果在此坐标下是匹配的话,则以此为左上角,将匹配区域标记出来。
r=0;
fort=1:
3%去掉外围的一圈
fors=1:
3%取顺时针为正方向
temp_pipeitu_te=temp_pipeitu(t,s);
temp_yuantu_te=bin2dec(gettezheng(t,s,temp_picture,k));
iftemp_pipeitu_te==temp_yuantu_te%如果特征值相同,r就加1
r=r+1;
else
break;
end;
end;
ifr==0
break;
end;
end;
ifr>=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
end
end
3.GUI界面设计:
本程序采用交互式来演示图像匹配过程,GUI采用MATLAB7.1自带的GUI界面编辑器。
主要涉及图像显示,各个功能按钮对显示的图像所进行的操作(如:
放大,缩小,旋转和图像匹配),文件对话框(用来读取和保存图像)。
1uigetfile函数
功能:
打开磁盘内的文件
格式:
[pname,adrname]=uigetfile(‘格式’,’名称’)
说明:
pname为选择的文件名,adrname为路径;uigetfile通常和ifexist(‘文件名’)连用,如果存在文件的话,则把相应的值传给pname和adrname.
举例:
[pname,adrname]=uigetfile('*.jpg','*.bmp')
运行结果:
2uiputfile
功能:
保存文件
格式:
[temp_pname,temp_adrname]=uiputfile(strcat(adrname,pname),'保存图象');
3axes函数:
功能:
固定地点,此程序用此函数在固定区域内显示图像
举例:
axes(handles.axes1);%handles.axes1为界面上加载的一个插件,用来显示图片。
④界面样式:
四.数据测试
读取了一幅118×104的JPG图片显示在显示区域内,如下图所示,模板图像显示的是从显示区域内剪切一块区域(按下剪切按钮可进行剪切)。
按下匹配算法1,或匹配算法2后,系统就会自动将模板图像在显示图像中进行匹配,如果找到了匹配地点就会用红色矩形将匹配区域给圈定下来,例如下图就是在显示图像中找到的匹配区域。
根据测试结果得:
匹配算法1(基于灰度的模板匹配算法)的匹配时间约为26秒左右。
匹配算法2(基于灰度的快速匹配算法)的匹配时间约为16秒左右。
结论:
匹配算法1和匹配算法2的共同缺点是都绝对的依赖坐标系统,费时间较多。
在抗噪音能力上,匹配算法1没有抗噪音的能力,匹配算法2在理论上有一定的抗噪音的能力,可是在此程序中没做出来。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字图像 匹配