今天說一個比較讓人頭疼的話題-----攝像機(jī)標(biāo)定
為什么說令人頭疼呢?因為解釋起來與會花費很多的時間。
1.先介紹下攝像機(jī)成像原理
一個攝像機(jī)可以大致分為三個部分:鏡頭 、感光元件(CCD和CMOS)、處理電路。當(dāng)光線透過鏡頭,會在感光元件上形成一個物體的“像”。(小孔成像原理,不懂得自行百度)然后經(jīng)過一系列處理就變成了電子版的圖片。當(dāng)然這種變換過程中會產(chǎn)生一定的誤差(就好像透過貓眼看人會是一個曲面)。所以為了消除或者矯正這些誤差,標(biāo)定技術(shù)就出現(xiàn)了(就是還原成正常人眼看到的圖像)。PS:這是簡單版的介紹,下面才是詳細(xì)介紹
2.接著來說四個坐標(biāo)系的關(guān)系
我們可以把現(xiàn)實生活遇到的任何事物用坐標(biāo)系表示出來,當(dāng)然也可以用坐標(biāo)系表示整個世界,于是便建立起了世界坐標(biāo)系。想象一下,攝像機(jī)拍攝的是一張二維圖片,因此整個攝像機(jī)可以用一個坐標(biāo)系去標(biāo)識它獲取到的某個物體的位置,這是相機(jī)坐標(biāo)系。像素坐標(biāo)系就是相片的坐標(biāo)系。成像平面坐標(biāo)系類似于像素坐標(biāo)系。
這就是四個坐標(biāo)系
世界坐標(biāo)系
相機(jī)坐標(biāo)系
像素坐標(biāo)系
成像平面坐標(biāo)系
原本我們期望的拍攝效果;是每個坐標(biāo)系中的像素都相互對應(yīng),類似于一種一元一次方程,但由于鏡頭或者其他關(guān)系,現(xiàn)在這條“直線”彎了,得到的圖像也會出現(xiàn)“彎曲”,因此我們需要把它矯正。
大概圖就這樣,都不許笑。
3.接著還得聊相機(jī)
都拿筆記下,現(xiàn)在劃重點
相機(jī)都有不同的內(nèi)部參數(shù)、外部參數(shù);
內(nèi)部參數(shù):有一個參數(shù)矩陣(fx,fy,cx,cy)和一個畸變系數(shù)(三個徑向k1,k2,k3;兩個切向p1,p2);內(nèi)部參數(shù)是唯一的,就是一部相機(jī)只有一組內(nèi)部參數(shù)。
外部參數(shù): 攝像機(jī)在世界坐標(biāo)系中的位姿,由攝像機(jī)與世界坐標(biāo)系的相對位姿關(guān)系決定。其參數(shù)有:旋轉(zhuǎn)向量R(大小為1x3的矢量或旋轉(zhuǎn)矩陣3x3)和平移向量T(Tx,Ty,Tz);對不同的標(biāo)定圖,外部參數(shù)也是不同的,就是外部參數(shù)不唯一,你拿了多少不同的圖去標(biāo)定就會有多少不同的外部參數(shù)。
4.最后聊下標(biāo)定完之后要干啥
標(biāo)定完成后,你會得到標(biāo)定的內(nèi)部參數(shù),標(biāo)定完之后就可以直接用內(nèi)參數(shù)和畸變參數(shù)得到畸變校正圖像。接下來就可以使用OpenCV了,即用內(nèi)參數(shù)和畸變參數(shù)作為initUndistortRectifyMap()函數(shù)的輸入,得到原圖像與畸變校正圖像的x,y坐標(biāo)映射關(guān)系,即兩個變換矩陣。再以這兩個變換矩陣作為remap()函數(shù)的輸入,得到畸變校正圖像。到這一步,單目標(biāo)定的目的已經(jīng)達(dá)到了
5.小結(jié)
①普通的工業(yè)視覺的標(biāo)定,僅僅只是分辨率的標(biāo)定,具體表現(xiàn)為從一系列的標(biāo)定圖片中獲取x和y方向的各種比例關(guān)系,主要用于各種尺寸和定位檢測中。
②關(guān)于相機(jī)姿態(tài)標(biāo)定的說明,一般情況下大部分人都用不到這一塊。這方面的一個非常主要的體現(xiàn)為人臉識別中人臉的姿態(tài)判斷,只有先標(biāo)定出相機(jī)的姿態(tài),才能根據(jù)相機(jī)的姿態(tài)找到人臉的姿態(tài),從而判斷當(dāng)前是抬頭還是低頭或者其他操作。