仿射變換、透視變換、單應矩陣

OpenCV特徵點檢測匹配圖像-----添加包圍盒

仿射變換

一般對圖像的仿射變換分爲
旋轉,縮放,錯切,平移。旋轉要確定旋轉中心,首先要將旋轉中心轉移到原點,然後再進行縮放和旋轉。詳見這裏(這個文章中的變換矩陣推導部分錯誤,順時針的旋轉矩陣表示不正確,opencv的文檔表示無誤) 但是單純的只進行錯切平移時,則要先將圖像的中心轉移到圖像的左上角原點,進行完變換後,再轉移回到中心。

仿射變換的兩種實現形式:1,指定三對點,利用getAffineTransform(src_point, dst_point)函數獲得變換矩陣

2,對於旋轉和縮放的變換,可以利用getRotationMatrix2D(center,
angle, scale)函數獲得變換矩陣。而對於其他的單純的只進行錯切平移時,則要自己寫變換矩陣,而且還要配合縮放,不然原始的圖像大小不能放下變換後的圖像,超出的部分就不會進行顯示。而且必要時還要調整變換後圖片的位置。其實旋轉,不在乎繞着哪個點進行,無非是變換後的圖像的位置不同而已,通過平移可以完全重合。

最後,得到了變換矩陣,然後利用warpAffine(image, warpimage, warp_mat, warpimage.size());得到變換後的圖像。參考這裏

透視變換

就是相機在不同位姿下對同一平面的不同顯示情況。透視變換對應了單應矩陣,這個單應矩陣可以近似的表達相機的旋轉矩陣R(相機只存在微小平移時)?待驗證。

參考1

參考2

單應矩陣

在slam中的應用:there

這裏說的單應性矩陣主要是指平面單應性矩陣,在三軸座標中XYZ,Z=1這個有點類似於三維的齊次座標。單應性矩陣主要用來解決兩個問題,

一是表述真實世界中一個平面與對應它圖像的透視變換

二是從通過透視變換實現圖像從一種視圖變換到另外一種視圖

參考there

透視變換其實是表示的三維與二維點之間的對應投影關係,而單應矩陣爲什麼可以表示兩個圖像二維座標之間的關係呢?這個單應矩陣實際上不等於旋轉矩陣R,也不是一定在沒有平移運動的時候纔可以使用。但是爲什麼要求單應矩陣的點必須是同一平面呢?

以下爲推斷,待驗證:

實際上,單應矩陣類似於本質矩陣F,這個單應矩陣也可以分解出R t;但是,由於需要找到平面,不太好操作,所以不怎麼使用。只有當不存在平移運動,對極幾何不穩定時,才使用單應矩陣H。

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