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