采用相关分析进行图像的快速匹配定位
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四:采用相关分析进行图像的快速匹配定位
1.实验目的:
a. 掌握图像信号处理的基本概念和一般方法,学会读入图像信息。
b. 学习图像匹配的一般方法,了解相关估计在图像匹配和检测中的应用。
c. 熟悉图像匹配与校准定位的基本方法,学习二维图像信号的快速相关估计的基本算法,学会用FFT 作快速相关估计。 2.实验内容:
a. 读入图像数据。
b. 编写图像匹配的程序,从一幅图像中任取一幅子图(模板T ),然后 在另外一幅图像中寻找能和该子图匹配的目标(S i,j )的位置。
c. 设计程序界面,将匹配结果直观地显示出来。
d. 探讨快速算法。 3.算法讨论及分析 算法1:
设模板T 在被搜索图S 中平移,模板覆盖下的那块子图像我们记做S i,j ,(i,j)为这块子图像的左上角象素点在S 中的坐标,从图1中,我们可以看出i 和j 的取值范围为:1
()()()2
,11,,,M
M
i j
m n D i j S m n T m n ==⎡⎤=-⎣⎦
∑∑(1)
图4-1被搜索的图像(a )与模板(b )
展开式(1),则有
()()()()()2
2
,,11
11
11
,,2,,,M
M
M
M
M
M
i j
i j
m n m n m n D i j S
m n S
m n T m n T m n ======⎡⎤=-⨯+⎡⎤⎣⎦
⎣⎦
∑∑∑∑∑∑(2)
式(2)右边第三项表示模板的总能量,它是一个常数,与(i,j)无关;第一项是模板覆盖下的那块子图像的能量,它随着(i,j)的改变而缓慢变化;第二项是被覆盖子图和模板的互相关,它随着(i,j)的改变而变化。当T 和S i,j 匹配时,式(2)的第二项的取值最大。因此,我们可以用以下相关函数作相似性测度:
()()()
,,,,M M
i j
S m n T m n R i j ⨯=
∑∑(3)
易知()0,1R i j ≤≤,并且仅当()
()
,,,i j S i j T i j 为常数时,(),R i j 取极大值,这时T 和S i,j 匹配。
方法一:
方法一采用的是完全按照相关系数的定义,使用循环函数,完成对相关系数的求解,程序流程图如下。
方法二:
(),11
(,),(,)m n
x y k l R x y s x k y l t k l ===++∑∑(4)
,(,)x y R x y 为子块(),s x y 与模板图像t 相关系数,可通过FFT 快速计算,根据FFT 的性质有
(){},(,)(,),x y R x y IFFT S u v T u v *=•
式中(,)S u v 为基准图像(),s x y 的傅里叶变换,(),T u v *为模板图像T 的傅里叶变换的共轭,因此可通过一次FFT 变换和IFFT 变化求出整个被搜索图像与模板图像相关系数。
根据公式(3),需要计算基准图像的能量值S 2。分析得之,可以看出,相邻点的计算含
有大量的重复操作。经分析可得,
()()()1
2222,1
,1111,,,(,)m n
m n x m x y x y
i j i j i x
S
i j S i j S i y n S i y +-+=====⎡⎤=++-⎣⎦∑∑∑∑∑
(5)
()()()1
2
2221,,11
11
,,,(,)y n m
n
m
n
x y
x y
i j i j j y
S
i j S i j S x m j S x j +-+=====⎡⎤=++-⎣⎦∑∑∑∑∑
(6)
利用之前的结果,可以节省一定的计算时间。
4.实验结果及分析
该实验使用图片pic1_2.bmp ,使用模板templet1_2.bmp 。在matlab 中,读入的图像数据为图像每一个像素的灰度值,将模板的灰度值存在一个向量中,与原图进行匹配,如果相关系数达到极大值,则说明匹配良好,找到搜索的结果。
(a)被搜索的图片pic1_2.bmp
(b)被搜索的图片templet1_2.bmp
(c)搜索的结果
图4-2 实验所使用的图片
表1 两种方法计算时间对比
序号方法计算时间
1方法一110s
2方法二 5.2s
5.原程序清单
方法一:
clear all
S1=imread('pic1_2.bmp');%读入被搜索的图片pic1_2.bmp
S=double(S1);%读入的图片数据类型是uint8,转换类型为double
g1=imread('templet1_2.bmp');%读入模板图片templet1_2.bmp
g=double(g1);%读入的图片数据类型是uint8,转换类型为double
x=size(g,1); %获取g的行数
m=size(S,1);%S的X坐标
y=size(g,2); %获取g的列数
n=size(S,2);%S的Y坐标
Sxy=0*g; %定义临时变量
tempg=0;
tempg=double(tempg);
gvector=ones(x*y,1); %定义临时变量,将g矩阵存储为列向量的形式Svector=0*gvector; %定义临时变量,将S矩阵的分块存储为列向量的形式