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