簡體   English   中英

在Matlab的四個角點之間顯示圖像

[英]display image between four corner points Matlab

假設我有4個角點:(x1,y1); (x2,y2);(x3,y3); (x4,y4)和矩形圖像尺寸(m,n)如何顯示圖像,使得顯示的圖像在所提到的四個點處有角。 換句話說,四個角可以控制圖像旋轉的角度(請記住圖像邊緣可能不平行)謝謝!

您需要扭曲圖像以獲得通用解決方案。 你可以這樣做:

首先,閱讀圖像。

img=imread('cameraman.tif');
if size(img,3)==3
   img=rgb2gray(img);

指定轉換點集(在您的情況下, (x1,y1) ... (x4,y4) ),它們是fixedPoints

movingPoints=[1 1;256 1; 256 256; 1 256] %(x,y) coordinate
fixedPoints=[25 25;250 12;255 200;30 180];

然后,估計轉變。 我選擇投射變換。 你也可以選擇仿射。

TFORM = fitgeotrans(movingPoints,fixedPoints,'projective');

因為,您希望圖像轉到指定的角,您必須指定輸出視圖。 可以通過如下構造參考2-D圖像來完成。

R=imref2d(size(img),[1 size(img,2)],[1 size(img,1)]);

最后,扭曲圖像。

imgTransformed=imwarp(imread('cameraman.tif'),R,TFORM,'OutputView',R);

顯示圖像。

imshow(imgTransformed,[]);

您應該在指定點處具有圖像的角,並且包含圖像的框將具有原始圖像的大小。

假設圖像不會改變,則只需要2個點來計算圖像旋轉。 一般情況是這樣的

angle = atan2(y2-y1, x2-x1)*180/pi; %angle between image and axis (in degrees)
B = imrotate(A,angle);              %rotation

另一種與@Parag提出的方法非常相似的方法是以簡單的方式使用MATLAB的圖像變換功能。
方法如下:首先,您必須考慮圖像是否在“單位”矩形內並相應地定義初始變換條件:

udata = [0 1]; 
vdata = [0 1];
fill_color = 128;
org_rect = [0 0;1 0;1 1;0 1];

請注意, fill_color變量僅表示用於填充畫布中未被變換圖像覆蓋的部分的顏色。 然后,您應用從原始到表示圖像畫布的新矩形的投影變換,如下所示:

tform = maketform('projective', org_rect, new_rect);
[out_im,xdata,ydata] = imtransform( in_im, tform, 'bicubic', 'udata', udata, 'vdata', vdata, 'size', size(in_im), 'fill', fill_color);

您可能會注意到轉換是雙三次的,並返回out圖像( out_im )和由datadata表示的新坐標系。 如果您只保留輸出圖像,那么它將與原始坐標系中的輸入圖像大小相同(因此它會有點拉伸)。 為了正確顯示圖像,您可以使用以下命令:

imshow(out_im,'XData',xdata,'YData',ydata);

這是一個例子。 讓我們考慮一下Lena的情況如下所示。
原Lena RGB
應用轉換后,我們可以使用正確的坐標顯示,如下所示。
在新的坐標系中改造了Lena
如果我們決定只顯示輸出圖像而不參考新的坐標系,我們得到如下所示的圖像。
沒有坐標系改變了莉娜
此示例中使用的輸出矩形為: [-1 -2;2 -1;3 3;-3 1]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM