【OpenCV3圖像處理】圖像簡單幾何變換:旋轉、平移、縮放

仿射變換

仿射變換(Affine Transformation或 Affine Map),又稱仿射映射,是指在幾何中,一個向量空間進行一次線性變換並接上一個平移,變換爲另一個向量空間的過程。它保持了二維圖形的“平直性”(即:直線經過變換之後依然是直線)和“平行性”(即:二維圖形之間的相對位置關係保持不變,平行線依然是平行線,且直線上點的位置順序不變)。
一個任意的仿射變換都能表示爲乘以一個矩陣(線性變換)接着再加上一個向量(平移)的形式。
那麼, 我們能夠用仿射變換來表示如下三種常見的變換形式:
旋轉,rotation (線性變換)
平移,translation(向量加)
縮放,scale(線性變換)
仿射變換代表的是兩幅圖之間的一種映射關係,使用矩陣 A 和 B 對二維向量X=[x,y]T 做變換

這裏寫圖片描述

這裏寫圖片描述
通常使用2 x 3的矩陣來表示仿射變換,所以也能表示爲下列形式:
這裏寫圖片描述

這裏寫圖片描述

仿射變換應用場景:

1.已知 X和T,求矩陣 M
2.已知 M和X,求得T

對一張圖片旋轉、平移、縮放就屬於場景2

仿射變換相關的函數

OpenCV仿射變換相關的函數一般涉及到warpAffine和getRotationMatrix2D這兩個:
warpAffine 來實現一些簡單的重映射
getRotationMatrix2D 來獲得旋轉矩陣

warpAffine函數

warpAffine函數的作用是依據如下式子,對圖像做仿射變換

這裏寫圖片描述

void warpAffine(
InputArray src, 
OutputArray dst, 
InputArray M, 
Size dsize, 
int flags=INTER_LINEAR, 
int borderMode=BORDER_CONSTANT, 
const Scalar& borderValue=Scalar())

InputArray類型的src,輸入圖像,即源圖像,填Mat類的對象即可。
OutputArray類型的dst,函數調用後的運算結果存在這裏,需和源圖片有一樣的尺寸和類型。
InputArray類型的M,2×3的變換矩陣。
Size類型的dsize,表示輸出圖像的尺寸。
int類型的flags,插值方法的標識符。此參數有默認值INTER_LINEAR(線性插值),可選的插值方式如下:
INTER_NEAREST - 最近鄰插值
INTER_LINEAR - 線性插值(默認值)
INTER_AREA - 區域插值
INTER_CUBIC –三次樣條插值
INTER_LANCZOS4 -Lanczos插值
CV_WARP_FILL_OUTLIERS - 填充所有輸出圖像的象素。如果部分象素落在輸入圖像的邊界外,那麼它們的值設定爲 fillval.
CV_WARP_INVERSE_MAP –表示M爲輸出圖像到輸入圖像的反變換,即 。因此可以直接用來做象素插值。否則, warpAffine函數從M矩陣得到反變換。
第六個參數,int類型的borderMode,邊界像素模式,默認值爲BORDER_CONSTANT。
第七個參數,const Scalar&類型的borderValue,在恆定的邊界情況下取的值,默認值爲Scalar(),即0。

旋轉

getRotationMatrix2D函數,可以由旋轉中心center、旋轉角度angle、縮放係數scale,計算出計算二維旋轉變換矩陣,即warpAffine函數的第三個參數,再使用warpAffine函數進行仿射變換

這裏寫圖片描述

getRotationMatrix2D函數原型:

cv::Mat cv::getRotationMatrix2D( Point2f center,double angle, double scale )  
{  
   angle *= CV_PI/180;  
   double alpha = cos(angle)*scale;  
   double beta = sin(angle)*scale;  

   Mat M(2, 3, CV_64F);  
   double* m = (double*)M.data;  

   m[0] = alpha;  
   m[1] = beta;  
   m[2] = (1-alpha)*center.x - beta*center.y;  
   m[3] = -beta;  
   m[4] = alpha;  
   m[5] = beta*center.x + (1-alpha)*center.y;  

   return M;  
}  

Point2f類型的center,表示源圖像的旋轉中心
double類型的angle,旋轉角度。角度爲正值表示向逆時針旋轉(座標原點是左上角)
double類型的scale,縮放係數

縮放

平移

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章