c++ opencv 通过网络连接工业相机_摄像头和机器人视觉开发中的「相机标定」,你了解多少?...
目前我們團隊在做一個項目,通過采集到的人臉圖像測量人臉上兩個瞳孔間的實際距離。注意是實際距離,不是兩個瞳孔之間隔多少個像素點。找了很久資料,好像“相機標定”可以解決我的問題,看了不少資料來理解【相機標定】,張正友博士的論文我看了,百度文庫我也看了。
【相機標定】分為【內標定】與【外標定】,【內標定】得到相機相關的內參數,【外標定】得到相機的外參數,之后還要標定多個相機之間的位置關系。
【相機標定】可以說是計算機視覺/機器視覺的基礎,但是初學者不易搞清楚【相機標定】的邏輯是怎樣的。下面有感興趣的朋友可以一起來介紹一下。
為什么要相機標定?
在圖像測量過程以及機器視覺應用中,為確定空間物體表面某點的三維幾何位置與其在圖像中對應點之間的相互關系,必須建立相機成像的幾何模型,這些幾何模型參數就是相機參數。
在大多數條件下這些參數必須通過實驗與計算才能得到,這個求解參數的過程就稱之為【相機標定或攝像機標定】。 攝像機標定過程,簡單的可以簡單的描述為通過標定板,經過一系列的矩陣變換得到。
相機標定的目的和意義
我們所處的世界是三維的,而照片是二維的,這樣我們可以把相機認為是一個函數,輸入量是一個場景,輸出量是一幅灰度圖。這個從三維到二維的過程的函數是不可逆的。
相機標定的目標是我們找一個合適的數學模型,求出這個模型的參數,這樣我們能夠近似這個三維到二維的過程,使這個三維到二維的過程的函數找到反函數。
這個逼近的過程就是【相機標定】,我們用簡單的數學模型來表達復雜的成像過程,并且求出成像的反過程。標定之后的相機,可以進行三維場景的重建,即深度的感知,這是計算機視覺的一大分支。
相機成像過程的簡化與建模
提到相機的成像,從根本上來說,就是在討論相機的鏡頭。固定結構的相機鏡頭決定了一對固定的物像共軛關系,所謂【共軛】,意思是鏡頭前某個位置的物,它的像一定在鏡頭后的某個位置,這個關系是固定的。
舉個最簡單的例子,無窮遠處的物必然會在鏡頭的焦點處成像。這里說的固定結構,指的是鏡頭的焦距固定,光圈固定。
上圖是佳能(Canon)某款攝像機成像原理,我們可以找一個與這個鏡頭具有相同的物像共軛關系的凸透鏡來等效這個鏡頭,我們把這個凸透鏡稱作等效透鏡,用朝外的雙箭頭表示。
所以準確的講把相機的成像過程簡化成【針孔相機模型】,只是借用了針孔相機中簡單的數學關系來表達一些本來難以表達的數學關系。
按我個人的理解,除了焦距固定之外,也應當包含光圈固定,因為改變光圈的大小,除了景深之外,是有可能改變針孔相機模型中的光心位置,但是影響并不是很大。這意味著標定好的相機如果改變光圈大小,會使得標定誤差變大但應該不會大到難以接受的地步。
那么這里就引發了兩個問題:
(1) 這么多像點和物點到底誰和誰是一對兒?(2) 即便我知道物點在哪里,可是我怎么樣用相機坐標系來表達物點的位置 X,Y,Z ?
為了解決上述的兩個問題,【標定板】應運而生。標定板的第一大作用,確定物點和像點的對應性。這里用到的原理主要是【透視不變性】,打個比方,你近看一個人和遠看一個人,雖然他的鼻子大小變了,你看鼻子的視角也變了,但是拓撲結構肯定是不變的,你也不可能把鼻子看成是嘴巴。
在【標定板】中,印刷了拓撲結構,廣泛應用的是【棋盤格】和【圓點格】,這兩種之所以成為主流,不僅是因為它們的拓撲結構明確且均勻,更重要的是檢測其拓撲結構的算法簡單且有效。
棋盤格檢測的是角點,只要對拍攝到的棋盤格圖像橫縱兩個方向計算梯度就可獲得;而圓點格的檢測只需要對拍攝到的圓點格圖樣計算質心即可。假如你開發了一套非常完美的檢測人臉全部特征的算法,你完全可以用你的照片當作標定板。圓點格的效果應該是好于棋盤格,因為圓點質心的【透視不變性】要比棋盤格的角點穩定的多。
如果用OpenCV或Matlab標定工具箱進行標定,需要給出棋盤格的物理尺寸,這其實就是在建立標定板坐標系,從測量的角度講,標定板的精度是相機標定精度的基準,是誤差傳遞鏈上的第一個環節。所以為了使針孔相機模型更逼近真實相機,對標定板的質量有以下要求(按重要性順序):
綜上所述,我們知道了【相機標定】的重要意義,無論是在圖像測量或者機器視覺應用中,相機參數的標定都是非常關鍵的環節,其標定結果的精度及算法的穩定性直接影響相機工作產生結果的準確性。因此,做好相機標定是做好后續工作的前提,提高標定精度是科研工作的重點所在。
相機標定方法有哪些?
【相機標定】方法有:【傳統相機標定法】、【主動視覺相機標定方法】、【相機自標定法】。
【傳統相機標定法】需要使用尺寸已知的標定物,通過建立標定物上坐標已知的點與其圖像點之間的對應,利用一定的算法獲得相機模型的內外參數。
根據標定物的不同可分為三維標定物和平面型標定物。三維標定物可由單幅圖像進行標定,標定精度較高,但高精密三維標定物的加工和維護較困難。平面型標定物比三維標定物制作簡單,精度易保證,但標定時必須采用兩幅或兩幅以上的圖像。傳統相機標定法在標定過程中始終需要標定物,且標定物的制作精度會影響標定結果。同時有些場合不適合放置標定物也限制了傳統相機標定法的應用。
【基于主動視覺的相機標定法】是指已知相機的某些運動信息對相機進行標定。該方法不需要標定物,但需要控制相機做某些特殊運動,利用這種運動的特殊性可以計算出相機內部參數。基于主動視覺的相機標定法的優點是算法簡單,往往能夠獲得線性解,缺點是系統的成本高、實驗設備昂貴、實驗條件要求高,而且不適合于運動參數未知或無法控制的場合。
【相機自標定算法】主要是利用相機運動的約束。相機的運動約束條件太強,因此使得其在實際中并不實用。利用場景約束主要是利用場景中的一些平行或者正交的信息。其中空間平行線在相機圖像平面上的交點被稱為【消失點】,它是射影幾何中一個非常重要的特征,所以很多學者研究了基于消失點的相機自標定方法。自標定方法靈活性強,可對相機進行在線定標。
【 常用術語】
【內參矩陣】: Intrinsic Matrix
【焦距】: Focal Length
【主點】: Principal Point
【徑向畸變】: Radial Distortion
【切向畸變】: Tangential Distortion
【旋轉矩陣】: Rotation Matrices
【平移向量】: Translation Vectors
【平均重投影誤差】: Mean Reprojection Error
【重投影誤差】: Reprojection Errors
【重投影點】: Reprojected Points
【標定板】: Calibration Target
在機器視覺、圖像測量、攝影測量、三維重建等應用中,為校正鏡頭畸變、確定物理尺寸和像素間的換算關系,通過相機拍攝帶有固定間距圖案陣列平板、經過標定算法的計算,可以得出相機的幾何模型,從而得到高精度的測量和重建結果,而帶有固定間距圖案陣列的平板就是【標定板】。
【世界坐標系】:World Coordinate
也稱為測量坐標系,是一個三維直角坐標系,以其為基準可以描述相機和待測物體的空間位置。世界坐標系的位置可以根據實際情況自由確定。
【相機坐標系】: Camera Coordinate
也是一個三維直角坐標系,原點位于鏡頭光心處,x、y軸分別與相面的兩邊平行,z軸為鏡頭光軸,與像平面垂直。
總結
以上是生活随笔為你收集整理的c++ opencv 通过网络连接工业相机_摄像头和机器人视觉开发中的「相机标定」,你了解多少?...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 立方体引起的引力异常计算&画图
- 下一篇: javaweb教务管理系统_基于Java