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