2015-10-14 31 views
2

旋轉後,圖像上的點(x,y)需要位於同一圖像上。我使用imrotate,imtransform和imwarp來進行圖像旋轉(下面的代碼顯示imwarp的實現),但似乎沒有一個適合我。輸出的旋轉圖像比原始圖像大。任何人都可以建議如何在輸出旋轉圖像上找到相同的點。如何在旋轉後找到圖像上的一個點?

close all; 
I=imread('P.png'); 
x=339; 
y=317; 

subplot(2,2,1); 
imshow(I),title('Original Image');  
hold on; 
plot(x,y,'ro'); 
hold off; 
theta=5; 
tform = affine2d([cosd(theta) -sind(theta) 0;sind(theta) cosd(theta) 0; 0 0 1]) 
RI = imwarp(I,tform); 
[x1,y1]=transformPointsForward(tform,x,y); 
subplot(2,2,2); 
imshow(RI),title('Rotated Image');  
hold on; 
plot(x1,y1,'ro'); 
hold off; 

enter image description here 雖然代碼,如果旋轉的圖像具有相同的大小,原來的形象工程。但在我的情況下,它會導致原始圖像的裁剪。我已經能夠在各種論壇上找到這個問題的答案,但似乎沒有人爲我工作。請回答。

回答

5

呼叫imwarp這樣的:

[RI, ref] = imwarp(I,tform); 

refimref2d類型,它包含輸出圖像的座標系的關係,以一個「世界座標系」,的空間引用對象,在該情況下,是輸入圖像的座標系。那麼你可以這樣解釋翻譯:

[x1,y1]=transformPointsForward(tform,x,y); 
x1 = x1 - ref.XWorldLimits(1); 
y1 = y1 - ref.YWorldLimits(1);