采用相关分析进行图像的快速匹配定位

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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矩阵的分块存储为列向量的形式