數字影象處理二(旋轉)
影象旋轉原理
:
(1)影象座標系轉到數學座標系下;
(2)在數學座標系進行旋轉;
(3)將數學座標系轉化為影象座標系。
在影象旋轉過程中,設計兩個座標系轉化過程。影象座標系轉化為數學座標,經過旋轉之後,數學座標系轉化為影象座標系。在一副影象中,影象座標系的原點在影象左上角,X軸正向朝右,Y軸正向朝下。數學座標系的原點在影象的中心,X軸正向朝右,Y軸正向朝上。如下圖所示。
寫出對應的座標系相對於另一個座標系的描述,即轉換關係。
影象座標系相對於數學座標系的表達為
數學座標系相對於影象座標系的表達為
矩陣中的W,H表示影象的寬度和高度。
順時針旋轉
角的旋轉矩陣為:
根據轉化關係,對應的原始影象座標,旋轉前的影象點座標左乘對應的矩陣關係,即可得到轉化之後的影象點座標。其他地方是右乘矩陣關係的,其實是本質是一樣的。他們得到的是1X3的座標矩陣,這裡得到的是3X1的矩陣。只是形式不一樣。轉置了一下。
上式中的W‘,H’是旋轉後圖像的寬度和高度。經過旋轉之後,影象的W,H可能會改變。
下面是呼叫的MATLAB的介面,跑的旋轉影象的實驗程式碼及現象。
A=imread(‘1。jpg’);
J=imrotate(A, 90);
subplot(1,2,1);imshow(A);title(‘原圖’);
subplot(1,2,2);imshow(J);title(‘旋轉後的圖’);
imrotate功能:對影象進行旋轉操作。
呼叫格式:
(1)
B = imrotate(A,angle)
將影象A(影象的資料矩陣)繞影象的中心點旋轉angle度, 正數表示逆時針旋轉, 負數表示順時針旋轉。返回旋轉後的影象矩陣。
(2)
B = imrotate(A,angle,method)
使用method引數可以改變插值演算法,method引數可以為下面這三個值:
‘nearest’:最鄰近插值(Nearest-neighbor interpolation)
‘bilinear’: 雙線性插值(Bilinear interpolation)
‘bicubic’: 雙三次插值(或叫做雙立方插值)(Bicubic interpolation)
(3)
B = imrotate(A,angle,method,bbox)
bbox引數用於指定輸出影象屬性:
‘crop’: 透過對旋轉後的影象B進行裁剪, 保持旋轉後輸出影象B的尺寸和輸入影象A的尺寸一樣。
‘loose’: 使輸出影象足夠大, 以保證源影象旋轉後超出影象尺寸範圍的畫素值沒有丟失。 一般這種格式產生的影象的尺寸都要大於源影象的尺寸。
輸出結果: