两幅图像之间的相关性

如何在一幅图像上选择一个随机点,然后使用互相关在另一幅图像上找到它的对应点?

所以基本上我有image1,我想选择一个点(自动),然后在image2上找到相应的/相似的点。

以下是一些示例图像:

全图:

完整的形象

补丁:

补丁

互相关结果:

互相关结果


那么, xcorr2基本上可以被看作是分析所有可能的正向和负向变化,并给出一个衡量它们与每个变化的契合程度。 因此,对于尺寸为N x N的图像,结果必须具有尺寸(2*N-1) x (2*N-1) ,其中如果两个图像相等或不相等,则指标[N, N]移动。 如果它们被移动10个像素,则最大相关性将在[N-10, N]等等。 因此,您需要减去N才能获得绝对位移。

有了你的实际代码,它可能会更容易帮助。 但让我们看一个例子:

(A)我们读取图像并选择偏移量为da和db的两个不同的子图像

Orig = imread('rice.png');
N = 200; range = 1:N;
da = [0 20];
db = [30 30];
A=Orig(da(1) + range, da(2) + range);
B=Orig(db(1) + range, db(2) + range);

(b)计算互相关并找出最大值

X = normxcorr2(A, B);
m = max(X(:));
[i,j] = find(X == m);

(C)使用恢复的班次将它们拼凑在一起

R = zeros(2*N, 2*N);
R(N + range, N + range) = B;
R(i + range, j + range) = A;

(D)说明事情

figure
subplot(2,2,1), imagesc(A)
subplot(2,2,2), imagesc(B)
subplot(2,2,3), imagesc(X)
rectangle('Position', [j-1 i-1 2 2]), line([N j], [N i])
subplot(2,2,4), imagesc(R);

(五)比较故意转移与恢复转变

delta_orig = da - db
%--> [30 10]
delta_recovered = [i - N, j - N]
%--> [30 10]

正如你在(E)中看到的,我们得到了我们在(A)中引入的转变。

xcorr2的结果


或根据你的情况调整:

full=rgb2gray(imread('a.jpg'));
template=rgb2gray(imread('b.jpg'));
S_full = size(full);
S_temp = size(template);

X=normxcorr2(template, full);
m=max(X(:));
[i,j]=find(X==m);

figure, colormap gray
subplot(2,2,1), title('full'), imagesc(full)
subplot(2,2,2), title('template'), imagesc(template), 
subplot(2,2,3), imagesc(X), rectangle('Position', [j-20 i-20 40 40])

R = zeros(S_temp);
shift_a = [0 0];
shift_b = [i j] - S_temp;
R((1:S_full(1))+shift_a(1), (1:S_full(2))+shift_a(2)) = full;
R((1:S_temp(1))+shift_b(1), (1:S_temp(2))+shift_b(2)) = template;
subplot(2,2,4), imagesc(R);

在这里输入图像描述

但是,为了使此方法正常工作,应该将修补程序( template )和完整图像缩放为相同的分辨率。


更详细的例子也可以在这里找到。

链接地址: http://www.djcxy.com/p/50047.html

上一篇: Correlation between two images

下一篇: Match curves from one image to another