您的位置:首页 > 编程语言 > MATLAB

利用互相关方法校正二维图像移动

2017-04-11 19:53 741 查看
在对同一个物体进行长时间拍摄的过程中,难免会因为一些外界原因,比如,物体的移动,导致拍摄的物体在成像平面中发生移动。这时,在分析某一特定区域长时间的特性之前,要对成像得到的图像进行校正。

本文中针对二维图像水平和竖直方向移动进行校正。校正的方法有很多种,有的是通过搜索、迭代、优化,找到最优解的。而本文中采用了利用互相关的方法,可以做到在一定假设的条件下,直接得到x、y平移的数值。

1 互相关用于图像配准原理介绍

假设图像f2是f1经过平移得到的,那么

f2=f1(x−Δx,y−Δy)

根据傅里叶变换定理

F2(u,v)=F1(u,v)e−2πj(uΔx+vΔy)

根据互相关函数的定义

Rccf(x,y)=f1(x,y)∗f2(−x,−y)

计算傅里叶变换,可得

Rccf(u,v)=F1(u,v)F∗2(u,v)=F1F∗1e2πj(uΔx+vΔy)=F(u,v)e2πj(uΔx+vΔy)

其中,F(u,v)=F1F∗1

将上式求反傅里叶变换,可得

Rccf(x,y)=F(x,y)∗δ(x−Δx,y−Δy)=F(x−Δx,y−Δy)

由自相关函数的性质可知,函数F(x,y)的峰值在原点处,因此R(x,y)的峰值出现在点(Δx,Δy)处,也就是函数f2(x,y)的偏移量。

2 举例

例子中的图像来自文章[1],f1和f2是在不同时刻拍摄到的图像。两幅图像的大小均为200∗200。现在需要将其配准,其便于研究其中神经元的活动情况(荧光亮度)。





左图是f1,右图是f2

Matlab 代码如下

clear
I1 = imread('f1.tif');%f1 (reference image)
FI1 = fft2(I1);

I2 = imread('f2.tif');%f2 (floating image)
FI2 = fft2(I2);

FR = FI1.*conj(FI2);%calculating correlation

R = ifft2(FR);
R = fftshift(R);

num = find(R==max(R(:)));
[i,j] = ind2sub(size(R), num);
offset_x = i-100
offset_y = j-100

R = R/max(R(:));
figure %coefficient of correlation in spatial domain
imshow(R,[])

[X,Y] = meshgrid(1:200);
figure
mesh(X,Y,R)

figure
subplot(1,2,1)
imshow(I1-I2);title('before registration')

subplot(1,2,2)
I3 = imtranslate(I2, [2,3]);
imshow(I1-I3);title('after registration')


计算结果



offset_row = 3

offset_col = 2

利用校正前和校正后两幅图像的差值进行检验



从上面的图像可以看出,在经过校正后,图像的相似度提高了。

另外,Matlab官方文档中的一个例子。它利用互相关来实现寻找最优匹配的例子。其实质和图像校正是一致的,都是通过计算互相关系数,找到两幅图像之间最匹配时平移的距离。

有问题,随意提出,共同进步。

[1] Ming Li, Fang Liu, Hongfei Jiang, Tai Sing Lee, Shiming Tang (2017) Long-Term Two-Photon Imaging in Awake Macaque Monkey, Neuron
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息