[英]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
)和由data
和data
表示的新坐標系。 如果您只保留輸出圖像,那么它將與原始坐標系中的輸入圖像大小相同(因此它會有點拉伸)。 為了正確顯示圖像,您可以使用以下命令:
imshow(out_im,'XData',xdata,'YData',ydata);
這是一個例子。 讓我們考慮一下Lena的情況如下所示。
應用轉換后,我們可以使用正確的坐標顯示,如下所示。
如果我們決定只顯示輸出圖像而不參考新的坐標系,我們得到如下所示的圖像。
此示例中使用的輸出矩形為: [-1 -2;2 -1;3 3;-3 1]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.