0

I have two similar images: [A] and [B] (please see images). They are offset in X and Y. How to align A over B, using an pixel from A as reference? In other words, locating the indicated pixel from A on B, and make A and B centralized in this pixel. Thank you.

Image A Image B

Final result make manually

enter image description here

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

「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 に答える
0

あなたが望むのは画像登録だと思います。あなたの場合、反映のないアフィン変換であるため、少なくとも2つの制御点が必要です。これらの 2 つの画像の類似性を考えると、別の参照ポイントを見つけるのは簡単だと思います。その後、imtransformまたは単にcp2tform登録を実行するために使用できます。

于 2012-07-06T15:57:34.790 に答える