攝像機內參與OpenGL

2021-09-25 00:23:16 字數 2593 閱讀 8463

參考**:

1、 相機引數是三種不同的引數。

相機的內引數是六個分別為:1/dx、1/dy、r、u0、v0、f。

opencv1裡的說內引數是4個其為fx、fy、u0、v0。實際其fx=f*sx,其中的f就是焦距上面的f,sx是畫素/沒公釐即上面的dx,其是最後面圖里的後兩個矩陣進行先相乘,得出的,則把它看成整體,就相當於4個內參。其是把r等於零,實際上也是六個。

dx和dy表示:x方向和y方向的乙個畫素分別佔多少長度單位,即乙個畫素代表的實際物理值的大小,其是實現影象物理座標系與畫素座標系轉換的關鍵。u0,v0表示影象的中心畫素座標和影象原點畫素座標之間相差的橫向和縱向畫素數。

畸變引數:k1,k2,k3徑向畸變係數,p1,p2是切向畸變係數。徑向畸變發生在相機座標系轉影象物理座標系的過程中。而切向畸變是發生在相機製作過程,其是由於感光元平面跟透鏡不平行。

切向畸變如下圖:產生的原因透鏡不完全平行於影象平面

徑向畸變如下圖:產生原因是光線在遠離透鏡中心的地方比靠近中心的地方更加彎曲徑向畸變主要包含桶形畸變和枕形畸變兩種

相機外參分為旋轉矩陣和平移矩陣,旋轉矩陣和平移矩陣共同描述了如何把點從世界座標系轉換到攝像機座標系

得到攝像機的內參k和相對於每個marker的外參[r|t]後,就可以開始考慮將虛擬物體新增進來了。老慣例,我還是使用openframeworks。openframeworks是在opengl基礎上構建的一套框架,所以3d顯示上,其本質還是opengl。

opengl的投影模型和普通相機的小孔投影模型是類似的,其projection矩陣對應與相機的內參k,modelview矩陣對應與相機的外參。但是,我們之前求得的k和[r|t]還不能直接使用,原因有二,其一,opengl投影模型使用的座標系與opencv的不同;其二,opengl為了進行clipping,其投影矩陣需要將點投影到ndc空間中。

下一步是求projection矩陣。由於opengl要做clipping,要求所有在透視椎體中的點都投影到ndc中,在ndc中的點能夠顯示在螢幕上,之外的點則不能。因此,我們的projection矩陣不僅要有與內參矩陣k相同的透視效果,還得把點投影到ndc中。

首先先看看內參矩陣k的形式:

首先假設opengl的投影椎體是對稱的,那麼projection矩陣的形式如下:

使用以上矩陣對某一點(x, y, z, 1)投影後,可以得到如下關係:

接下來,opengl會對該結果進行clipping,具體方法是將四個分量都除以-z,那麼,要使我們的點最終顯示到螢幕上,前三個分量在除以-z後其變化範圍必須在[-1, 1]內。如下:

由攝像機投影模型(相似三角形)知:

其中由於opengl相機的相面在z軸負方向上,所以是-fx和-fy。xp和yp分別為某點在相面上的橫座標和縱座標,這兩個座標的原點在影象的中心,影象的寬度和高度分別為w和h,因此xp和yp的取值範圍分別為[-w/2, w/2]和[-h/2, h/2],可得:

於是接下來,我們為opengl相機設定兩個面,near和far,只有處於這兩個面之間的點才能投影到ndc空間中,所以當 z=-n 時,(az+b)/-z = -1,當 z=-f 時,(az+b)/-z = 1,由此我們可以得到關於a和b的二元一次方程,從而解出a、b:

現在再來考慮opengl投影椎體不對稱的情況,這種情況下,projection矩陣的形式為:

由於椎體不對稱,這時xp和yp的變化範圍分別為[l, r]和[b, t],代表影象左側(left)右側(right),以及底部(bottom)頂部(top),用同樣的方法,我們有:

可得:於是:

綜上所述,我們可以得到opengl投影矩陣的最終形式:

到此,我們就可以將這個矩陣的資料傳遞給projection矩陣了

相機內參與畸變模型

相機內參包括相機矩陣引數和畸變係數。相機內參矩陣為3 3的矩陣 m fx 0 ppx 0 fy ppy 0 0 1 畸變係數 k1 k2 k3 p1 p2 使用matlab可以很方便地進行相機內參標定 首先看一下無畸變情況下,已知相機座標系內的乙個點 xc,yc,zc 通過內參矩陣求出該點在影象平面...

攝像機模型(內參 外參)

下圖是針 機的基本模型。平面 稱為攝像機的像平面,點oc 稱為攝像機中心 或光心 f成為攝像機的焦距,oc 為端點且垂直於像平面的射線成為光軸或主軸,主軸與像平面的交點p是攝像機的主點。如圖所示,影象座標係為o xy,攝像機座標係為oc xcy czc 記空間點xc 在攝像機座標系中的齊次座標為 x...

攝像機模型(內參 外參)

下圖是針 機的基本模型。平面 稱為攝像機的像平面,點ococ稱為攝像機中心 或光心 f成為攝像機的焦距,ococ為端點且垂直於像平面的射線成為光軸或主軸,主軸與像平面的交點p是攝像機的主點。如圖所示,影象座標係為o xy,攝像機座標係為oc xcyczcoc xcyczc。記空間點xcxc在攝像機座...