怎樣進行機器視覺的像素校準?
摘要:描述了一種機器視覺校準的方法。在基于小孔成像相機模型的基礎上,使用平板拍取若干張照片進行校驗。采用幾何坐標變換,并且結(jié)合齊次圖形學,考慮相機鏡頭畸變的情況下,計算出相機的內(nèi)參和外參。此類方法可以廣泛御用使用于機器視覺的相機的校準。
1. 引言
機器視覺,主要是指使用相機,自動通過CCD或者CMOS獲得圖像,之后對于圖像進行分析,此類分析可以是自動或者人工判斷。隨著如今工業(yè)自動化程度的提高,越來越多的機器視覺被用在工業(yè)生產(chǎn)之中,可以說近二十年里,機器視覺得到了飛速的發(fā)展。
在機器視覺的使用中,尺寸或者形狀的測量會被大量應用到,和普通測量工具一樣,此類機器視覺在使用前需要進行像素校準。
2. 機器視覺的像素校準介紹機器視覺的像素校準,是指由把由相機拍攝的圖片和實物進行比較計算,獲得兩者之間的數(shù)學關系,并可通過此關系來矯正圖片,以此消除圖片拍攝時由多種誤差產(chǎn)生的形變。對于用來測量的機器視覺,尤其是高精度測量的視覺系統(tǒng),像素校驗是必不可少的一環(huán)。
一張相機拍攝的圖片,是通過像素為單位來存儲所有信息的。像素校驗使用了數(shù)學方法,把以像素為單位的圖片還原為我們常用的測量單位,如毫米,英尺等。
和普通攝影一樣,當知道了焦距,CCD或者CMOS的大小等硬件參數(shù)后,我們可以初略計算出其比例關系。如,1個像素對應1毫米,那100個像素就對應100毫米。但是,在相機拍攝圖像時候,由于CCD或者CMOS的微小形變,以及鏡頭的畸變,外加拍攝角度的問題,其比例不是完全線性的。這個時候就需要用到像素校驗,它通過復雜計算,系統(tǒng)的產(chǎn)生整個圖像于真是世界的映射關系。如下常見的形變圖片,需要通過像素校驗還原:
由于拍攝距離產(chǎn)生的形變圖片
由于拍攝角度產(chǎn)生的形變圖片
由于CCD或者CMOS以及鏡頭產(chǎn)生的形變圖片
由于實物三維的高低/前后/上下產(chǎn)生的形變圖片
3. 機器視覺的像素校準的步驟以及計算方法1) 制作帶圓點的長方形校準板,其中板的顏色為白色,圓點顏色為黑色。
2) 使用相機拍攝校準版,可以得到形變后的圖像
3) 使用數(shù)學方法,得到兩個圖像的映射關系
通過比較圖片和實物,圓點中心點的水平差值dx和垂直差值dy。
數(shù)學公式表示如下:
1) 基于物理特性的數(shù)學映射方法如下:
常見的畸變分為輻射畸變和正切畸變。
輻射畸變,是由于鏡片的偏差產(chǎn)生的,可以用如下圖表示:
其中:P1A為無畸變情況下,點P1在圖像平面上的投影;
P1D:為畸變情況下,點P1在圖像平面上的投影;
P2A:為無畸變情況下,點P2在圖像平面上的投影;
P2D:為畸變情況下,點P2在圖像平面上的投影。
對于輻射畸變可以使用如下公式進行糾正[2] :
正切畸變,是由于CCD或者CMOS安裝偏差導致的,可以使用如下圖表示:
對于正切畸變,可以使用如下公式進行糾正:
4. 使用軟件進行相機像素校驗
基于上述理論知識,可以配合視覺軟件進行實驗。這里選取了使用開源軟件OpenCV來進行校驗。
基于OpenCV的相機校驗:
OpenCV使用方格棋盤做為校驗板:
如果要獲得相機的內(nèi)參,外參以及畸變,可以使用OpenCV提供的校驗函數(shù):
void cvCalibrateCamera2(
CvMat* object_pointsCvMat* image_pointsint* point_countsCvSizeimage_sizeCvMat* intrinsic_matrixCvMat* distorTIon_coeffsCvMat* rotaTIon_vectors CvMat* translaTIon_vectors = NULL, int flags = 0
);
使用此函數(shù),至少需要對于校驗板使用不同角度,拍取2張圖片。如果要獲得準確度高的結(jié)果,建議使用拍取不同角度的多張圖片來進行校準。
校準前:
校準中:
校準后:
對于提高精度,也可以使用圓點校驗板,但是這樣需要修改一些OpenCV的代碼。
使用圓點校驗板校驗:
校驗前:
校驗中:
校驗后:
5. 結(jié)論
通過考慮常見畸變,相機內(nèi)參和相機外參的影響,建立坐標系模型,可以較為準確的給予機器視覺進行像素校準。對于不同校驗板以及多維度的校驗板,需要進一步實驗確認其精確度。
參考文獻 (References)
[1] Sonka, M., Havac, V. and Boyle, R. (2011) Image Processing, Analysis, and Machine Vision. 4th EdiTIon, Cengage Learning, New York.
[2] Bradski, G. and Kaehler, A. (2008) Learning OpenCV: Computer Vision with the OpenCV Library. O’Reilly, Sebastopol.