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

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

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

1 互相关用于图像配准原理介绍
假设图像 f2 f1 经过平移得到的,那么

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

根据傅里叶变换定理
F2(u,v)=F1(u,v)e2πj(uΔx+vΔy)

根据互相关函数的定义
Rccf(x,y)=f1(x,y)f2(x,y)

计算傅里叶变换,可得
Rccf(u,v)=F1(u,v)F2(u,v)=F1F1e2πj(uΔx+vΔy)=F(u,v)e2πj(uΔx+vΔy)

其中, F(u,v)=F1F1
将上式求反傅里叶变换,可得
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 是在不同时刻拍摄到的图像。两幅图像的大小均为 200200 。现在需要将其配准,其便于研究其中神经元的活动情况(荧光亮度)。


f1 f2

左图是 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

猜你喜欢

转载自blog.csdn.net/gaohanggaolegao/article/details/70118433