GL 与 CV 管线 (pipeline) 比较与相互转换
這里把二者作一個比較,并對相關的矩陣做一個聯系以使能夠相互轉換。
1. CV中圖像形成過程 (transformation stages)
這一過程可概括為四個坐標系的轉換,分別為:世界坐標系、相機坐標系、圖像坐標系、像素坐標系,如下圖:
對應的,來看一個頂點從世界坐標中(X_w, Y_w, Z_w,1)到圖像上(u,v)處的一系列變換:
其中,f即有效焦距,(u_c, v_c)為principle point, (dx, dy)為像素點的物理大小
為簡明起見,以上過程中沒有考慮畸變。畸變使圖像坐標(image coordinate)變得不準確。
假如理想的圖像坐標為(X_i, Y_i, W_i),而畸變后的圖像坐標為(X_d, Y_d, W_d),通常使用如下公式來對它們的關系建模:
我們可以將這一變化放到M_{i1}矩陣中。
?
在視覺中,常需要對相機進行標定,會得到內參、外參兩個結果,這兩個結果對應于M_{i1}M_{i2}及M_e兩個矩陣.
?
2. GL中圖像形成過程 (transformation stages)
這一部分是由OpenGL的pipeline規定的,詳請參考OpenGL Specification。
大致過得是:
這里要強調的是投影矩陣(projection matrix),即圖中M_p, 以及矩陣M_v。 至于模型視圖矩陣M_{mv}則與CV中的一致。
2.1投影矩陣及變換
OpenGL提供了API來設置投影矩陣projection matrix,glu也提供了輔助函數gluPerspective,需要四個參數 fovy, aspect, zFar, zNear。
這個函數生成一個4*4矩陣,對Eye Coordinate中的坐標進行變換:
2.2 視口矩陣及變換
視口矩陣將坐標從NDC(標準設備坐標)變換至窗口上, 使用glViewport來設置四個參數 x_0, y_0, width, height
生成變換的變換如下:
2.3 成像過程
這樣,我們可以看到GL中整個坐標變換過程為:
?
3. CV/CG中矩陣的對應
從CV的坐標變換過程, 我們最終可以推導得到:
,其中
從GL的坐標變換過程,推導出:
?
因此,
1. 假若已知GL參數,則可求出CV參數為:
2. 假若已知CV參數,則可求出GL參數為:
?
?
參考:《correspondence analysis between the image formation pipelines of graphics and vision》
轉載于:https://www.cnblogs.com/justin_s/archive/2012/09/06/2672913.html
總結
以上是生活随笔為你收集整理的GL 与 CV 管线 (pipeline) 比较与相互转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 今天上网感觉有点儿卡,上了路由器一看,数
- 下一篇: DtCms.ActionLabel.Ar