我有两个相似的图像:[A]和[B](请参阅图像)。它们在X和Y中偏移。如何使用A中的像素作为参考,将A与B对齐?换句话说,将指示的像素从A上定位在B上,并使A和B集中在该像素中。 谢谢。
手动制作最终结果
答案 0 :(得分: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
答案 1 :(得分:0)
我认为你想要的是图像注册,在你的情况下,它需要至少2个控制点,因为它是没有反射的仿射变换。鉴于这两个图像的相似性,我认为很容易找到另一个推荐点。之后,您可以使用imtransform
或仅cp2tform
来执行注册。
答案 2 :(得分: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)