0

我有两张相似的图片:[A] 和 [B](请看图片)。它们在 X 和 Y 中偏移。如何使用 A 中的像素作为参考将 A 对齐到 B?换句话说,就是将A点指示的像素点定位到B点上,使A点和B点集中在这个点点​​上。谢谢你。

图像 A 图像 B

最终结果手动制作

在此处输入图像描述

4

3 回答 3

2

你可以手动完成:

img1 = 255-mean(imread('a1.png'),3);
img2 = 255-mean(imread('a2.png'),3);

subplot(221);imagesc(img1);axis image
[x1 y1] = ginput(1);
subplot(222);imagesc(img2);axis image
[x2 y2] = ginput(1);



x = x1-x2;
y = y1-y2;

T = maketform('affine',[1 0 x;0 1 y; 0 0 1]');
img2N = imtransform(img2,T,'xdata',[1 size(img1,2)],'ydata',[1 size(img1,1)]);

subplot(2,2,[3 4]);
imagesc(max(img1,img2N));axis image

要自动执行此操作,您可以执行以下操作::

%size(img2) <= size(img1)
img1 = 255-mean(imread('a1.png'),3);
img2 = 255-mean(imread('a2.png'),3);
subplot(221);imagesc(img1);axis image
subplot(222);imagesc(img2);axis image
colormap(gray(256))
c = normxcorr2(img2,img1);
[y x] = find(c==max(c(:)));
y = y-size(img2,1);
x = x-size(img2,2);

T = maketform('affine',[1 0 x;0 1 y; 0 0 1]');
img2N = imtransform(img2,T,'xdata',[1 size(img1,2)],'ydata',[1 size(img1,1)]);
subplot(2,2,[3 4]);
imagesc(max(img1,img2N));axis image
于 2012-07-09T08:36:37.217 回答
0

我认为您想要的是图像配准,在您的情况下,这需要至少 2 个控制点,因为它是没有反射的仿射变换。鉴于这两张图片的相似性,我认为很容易找到另一个推荐点。之后,您可以使用imtransform或简单cp2tform地执行注册。

于 2012-07-06T15:57:34.790 回答
0

您将需要微调“XData”和“YData”属性,但您可以这样做...

rgbA = imread('A.jpg'):
rgbB = imread('B.jpg');
alpha(.2)
image(rgbA,'XData',2)
alpha(.2)
hold on
image(rgbB,'XData',2)
alpha(.2)
于 2012-07-06T17:27:57.130 回答