01 01 透視變換簡介
透視變換(Perspective Transformation)即將圖片投影到一個新的視平面,也稱為投影映射。它是二維坐標(x,y)到三維坐標(X,Y,Z),再到另一個二維空間(u,v)的映射。
02 透視變換原理
到具體實現上,對應的的是計算公式見公式(1)-公式(3)。本文不進行詳細的透視變換公式推理,關于這些公式推理,讀者可參考本文參考資料或OpenCV官方資料等。
需要著重說明地是,(u,v)是透視變換后圖像的坐標,(x,y)是源圖像坐標。我們進行實際的透視變換實現是遍歷透視變換后圖像坐標(u,v),依次求得它對應的源圖像坐標(x,y)。此時計算得到的源圖像坐標(x,y)大概率是小數,所以需要進行一次插值操作,求得源圖像坐標(x,y)的像素值,該像素值即為透視變換后圖像坐標(u,v)的像素值。 本文只對透視變換的硬件實現做略微詳細地說明。即:已知透視變換參數矩陣后(見下圖),如何進行透視變換。
03 透視變換硬件實現方案
如上圖所示為透視變換硬件實現框圖。
透視變換參數、源圖像、目標圖像地址等數據通過APB總線配置進入寄存器。
traversal(x,y)將透視變換后圖像坐標 (u,v)轉換為對應的源圖像坐標 (x,y)。
AXI4讀取源圖像數據,經過雙線性插值求得源圖像坐標 (x,y)的像素值,并將他作為透視變換后圖像坐標 (u,v)的像素值保存下來。
綜上所述,硬件實現的重點主要在于硬件實現上述的第2步以及第3步,分別對應如何實現公式(3)以及如何實現插值操作。
3.1 坐標轉換
硬件實現透視變換時,需要進行小數的定點轉換。此時需要考慮到乘除法位數過高帶來的資源消耗以及時序問題。以最高頻率400MHz為例,16bit*16bit或16bit/16bit的乘除法能夠滿足在單個周期內實現,超出后將會導致時序違例。如何設定小數的定點轉換,也需要考慮小數的范圍。以以下的參數作為例子:目標圖像大小為128*128;源圖像大小為640*480。
則,(u,v)設置為帶符號數16位整數,0位小數,即s(16,0);
計算得到的(x,y)設置為帶符號數11位整數,5位小數,即s(16,5);
m_0,m_1,n_0,n_1設置為帶符號數5位整數,11位小數,即s(16,11);
dx,dy,dz設置為帶符號數11位整數,5位小數,即s(16,5);
p_0,p_1設置為帶符號數1位整數,15位小數,即s(16,15)。
設置好定點小數的格式后再進行公式(3)的計算即可。
3.2 插值
較為常見的圖像插值方法有最近鄰插值、雙線性插值、雙三次插值。兼顧插值效果與實現復雜度,可以選擇雙線性插值,實現原理見下圖。
04 最終結果展示
源圖像:
透視變換后圖像:
審核編輯:黃飛
-
透視變換
+關注
關注
0文章
3瀏覽量
1362
原文標題:一種硬件實現透視變換的方法
文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論