1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > matlab图片互相关 两个图像之间的互相关

matlab图片互相关 两个图像之间的互相关

时间:2020-05-24 05:39:39

相关推荐

matlab图片互相关 两个图像之间的互相关

那么,xcorr2基本上可以被视为分析正向和负向的所有可能的变化,并给出它们与每个班次的适合程度的度量.因此,对于大小为N×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);

(E)将故意转变与恢复的转变进行比较

delta_orig = da - db

%--> [30 10]

delta_recovered = [i - N, j - N]

%--> [30 10]

正如您在(E)中看到的那样,我们得到了我们在(A)中特意引入的转变.

或根据您的情况调整:

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);

但是,为了使此方法正常工作,补丁(模板)和完整图像应缩放到相同的分辨率.

更详细的例子也可以在here找到.

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。