【图像配准】基于灰度的模板匹配算法(二):局部灰度值编码

简单介绍:

        在上一篇文章: 基于灰度的模板匹配算法(一):MAD、SAD、SSD、MSD、NCC、SSDA、SATD算法中。介绍了几种典型的模板匹配算法。但此类算法都存在时间复杂度高,对图像尺寸敏感等问题。即便是SSDA这种优化算法复杂度也是非常高的。

        本文将介绍一种新的算法,叫做局部灰度值编码算法,它通过对灰度值编码来进行粗匹配,再用相位相关法进行精匹配

算法介绍

粗匹配

        与上一篇文章的如果相似。这里搜索图S尺寸为MxM,模板T的尺寸NxN,模板TS上滑动搜索。滑动的上、下步长都为N(一个模板尺寸)。也就把S分成了若干个T尺寸的子图。如果M不是N的整数倍,那么也不用管S图中的最底部和最右部剩余的几行几列。

以下举一个样例来进行阐述。

        搜索图S是一个512x512lena图像即M=512,模板图T是当中的一个部分,大小为64x64,即N=64。正好将S划分成8x8个相邻且不重合的子图(也称限制块),每一个子图(限制块)的尺寸与模板大小一样。接下来我们将要分别对模板和各个限制块进行编码(这就是为什么叫做局部灰度编码),再推断模板与哪个限制块相似度最高。以初步确定模板的位置,这就是粗匹配。

局部灰度编码

       编码是通过定义KxK大小的R块来进行(这里分块有点多。画绘图就一目了然了)。以对模板T编码为例,此处取R块的大小8x8。即K=8。此时就将T划分成了HxHR块。此处H=8。求每一个R块内部的像素和。

说明:R块的尺寸依据情况而定,也能够是....。9x9,10x10...,假设N不是K的整数倍。处理同上。总之分的R块越小对图像的描写叙述就越精确,相同计算量也越大。


以某个R块为中心及其8-邻域R块,例如以下图所看到的。以相邻的2x2R块当做一个D块(如:D1=R1 U R2 U R4 U R5)。

        实际上,仅仅有划斜线的阴影部分才干编码,图像外围一圈的R块都不能。

接下来对每一个D块进行编码。以D1为例,S(R1)表示R1块内部全部像素之和,对D1块所包括的4R块的S(R)进行排序(升序、降序都行,选定一种)。

比如取顺时针方向规定R1-R2-R5-R4的顺序为1-2-3-4

但以S(R)进行排序的话,共同拥有24种排列组合方法(例如以下图左表)。转化成二进制表示(例如以下图右表)。假如S(R)的排序结果为3-1-4-2。那么这个D块的特征编码就为01101

(左、右表及方向。都能够自定义


       以此类推,4D块就有45bit二进制编码,将它们做位拼接串起来。形成一个20位的二进制编码,这个20位的编码就当做中心R块R5)的特征编码。【实际上,仅仅有划斜线的阴影部分才干编码,图像外围一圈的R块都不能。】

特征描写叙述符

        综上所述。一个能够划分成HxHR块的模板。有20bit的二进制描写叙述符。把这个20bit的特征转化成一个十进制数,那么同理就有个十进制数,将其行列排列成一个一维向量,这就是模板图的特征向量了。

上述中。模板图就有(8-2)x(8-2)=36维特征向量。

        同理。对每个子图(限制块)进行相同的编码操作。提取每个子图(限制块)的特征向量,将模板特征与子图特征逐一比較。求相似度最高的子图,这就完毕了粗匹配。

——————————————————————————————切割线————————————————————————————————

精匹配

        因为粗匹配的子图选取时依照一定的步长进行的,通过粗匹配找到相似度最高的子图,与模板有重合的部分但并非全然重叠的,会存在一定的偏差。

这就须要进一步确定这个偏差。以下利用相位相关法进行精匹配。

相位相关法

        依据二维傅里叶变换的性质:空域上的平移等价于频域相位的平移。两幅图的平移矢量能够通过他们的互功率谱的相位直接计算。如果额图像的平移关系为:

对应的二维傅里叶变换关系应为:


定义它们的归一化互功率谱为:


当中:表示的复数共轭。

        对上述归一化互功率谱等式左右两边进行二维傅里叶逆变换,右边逆变换可得到在空间位置(x0,y0)处形成的一个脉冲函数。所以我们仅仅须要左边式子进行逆变换。再寻找脉冲位置(即峰值),峰值的位置(x0,y0)就是偏移矢量。

精匹配实现

MATLAB代码

%//***************************************** 
%//Copyright (c) 2015 Jingshuang Hu 
 
%//@filename:demo.cpp 
%//@datetime:2015.08.20 
%//@author:HJS 
%//@e-mail:eleftheria@163.com 
%//@blog:http://blog.csdn.net/hujingshuang 
%//*****************************************
%%
%//相位相关法
clear all;
close all;
%%
img=rgb2gray(imread('lena.jpg'));%//加载图像
dl=64;%//模板大小64x64
x0=200;y0=200;%//起点
dx0=20;dy0=30;%//偏移量(不超过模板尺寸)
f1=img(x0:x0+dl-1,y0:y0+dl-1);%//截取一个图当做模板
f2=img(x0+dx0:x0+dx0+dl-1,y0+dy0:y0+dy0+dl-1);%//截取一个图当做粗匹配找到的子图
[m n]=size(f1);%//m行n列
F1=fft2(f1,m,n);%//傅里叶变换
F2=fft2(f2,m,n);
%//FC1=conj(F1);%//共轭
FC2=conj(F2);%//共轭
delta=abs(ifft2((F1.*FC2)./abs(F1.*FC2)));
figure;surf(1:dl,1:dl,delta);shading interp;
max_delat=max(max(delta));
[dx dy]=find(delta==max_delat);
dx=dx-1;dy=dy-1;

相位相关峰值图


输出结果:


          能够看到,这跟代码中设定的偏移量是一致的。说明我们得到了正确的计算结果。此时。我们在粗匹配的子图位置基础上平移(dx,dy),再取模板NxN的子图,这个子图就是终于的匹配结果。

          素材及代码下载:http://download.csdn.net/detail/hujingshuang/9029593

——————————————————————————————切割线————————————————————————————————

參考文献:

1、李强,张钹. 一种基于图像灰度的高速匹配算法[J],软件学报, 2006,17(2), 216-222.

2、冯宇平,赵文仓. 基于局部灰度值编码的图像匹配[J], 青岛科技大学学报(自然科学版),2011,32(4),435-440.

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------补刀--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

        今天正好是农历七月初七。空间,微信好多人都在秀玫瑰、秀恩爱;别人浪漫相约,我在实验室写程序。别人花前月下。我在实验室写程序。

所以走远点,不要问我爱你有多深。我要写程序。

【生活照】


posted @ 2017-05-31 13:36  jzdwajue  阅读(920)  评论(0编辑  收藏  举报