為什么要進(jìn)行單相機(jī)標(biāo)定?
廣義:畸變矯正和一維和二維測(cè)量
畸變矯正:
在幾何光學(xué)和陰極射線管(CRT)顯示中。畸變是對(duì)直線投影的一種偏移。簡(jiǎn)單來(lái)說(shuō)直線投影是場(chǎng)景內(nèi)的一條直線投影到圖片上也保持為一條直線。那畸變簡(jiǎn)單來(lái)說(shuō)就是一條直線投影到圖片上不能保持為一條直線了。這是一種光學(xué)畸變(optical aberration)。畸變是一種相差,可能由于攝像機(jī)鏡頭導(dǎo)致,會(huì)對(duì)拍攝的物體的形狀產(chǎn)生變化,影響測(cè)量。
我自己對(duì)畸變矯正的理解就是,當(dāng)相機(jī)進(jìn)行標(biāo)定時(shí),雖然標(biāo)定板也產(chǎn)生了畸變,但是標(biāo)定板(圓形)的準(zhǔn)確數(shù)據(jù)我們已經(jīng)告訴了halcon,比如,圓的排列方式、直徑、中心距等。通過(guò)加載多張標(biāo)定板圖片,halcon可以通過(guò)函數(shù)求出鏡頭里發(fā)生畸變的標(biāo)定板與未發(fā)生畸變的標(biāo)定板之間的映射關(guān)系,也就是相機(jī)本身的內(nèi)參(拍攝有畸變)和矯正之后無(wú)畸變內(nèi)參之間的映射關(guān)系,將這種映射關(guān)系作用到拍攝時(shí)發(fā)生畸變的物體當(dāng)中,就完成了畸變校正.。
步驟:
1)通過(guò)標(biāo)定求出相機(jī)內(nèi)參。
2)通過(guò)有畸變的內(nèi)參求出無(wú)畸變的內(nèi)參。用chage_radial_distortion_cam_par()函數(shù)完成。
3)求出有畸變的內(nèi)參和無(wú)畸變的內(nèi)參之間的映射關(guān)系。用
gen_radial_distortion_map()函數(shù)
4)將上邊的映射關(guān)系作用到產(chǎn)生畸變的物體當(dāng)中,完成畸變校正
一維和二維的測(cè)量
圖片上的尺寸是像素距離,標(biāo)定后,可以求出像素距離與物理空間距離的換算關(guān)系,從而計(jì)算出實(shí)際的物理尺寸。
狹義:求解相機(jī)的內(nèi)參和外參以及畸變參數(shù),得到二維平面像素坐標(biāo)和三維世界坐標(biāo)的關(guān)系,從而進(jìn)行三維重建。
相機(jī)內(nèi)參:相機(jī)的固有屬性,在進(jìn)行畸變校正時(shí)需要用到相機(jī)的內(nèi)參。
相機(jī)外參:物體在經(jīng)過(guò)透鏡成像之后,實(shí)際上是經(jīng)過(guò)了旋轉(zhuǎn)和平移,而外參就是告訴我們物體成像后經(jīng)過(guò)了那種旋轉(zhuǎn)和平移,相機(jī)的外參包括平移矢量和旋轉(zhuǎn)矩陣。
畸變參數(shù):采用理想針孔模型,由于通過(guò)針孔的光線少,攝像機(jī)曝光太慢,在實(shí)際使用中均采用透鏡,可以使圖像生成迅速,但代價(jià)是引入了畸變。有兩種畸變對(duì)投影圖像影響較大:徑向畸變和切向畸變。
相機(jī)的畸變和內(nèi)參是相機(jī)本身的固有特性,標(biāo)定一次即可一直使用。但由于相機(jī)本身并非理想的小孔成像模型以及計(jì)算誤差,采用不同的圖片進(jìn)行標(biāo)定時(shí)得到的結(jié)果都有差異。一般重投影誤差很小的話,標(biāo)定結(jié)果均可用。
二、標(biāo)定流程
實(shí)現(xiàn)的原理是根據(jù)相機(jī)的像元尺寸、焦距和標(biāo)定板的描述文件(.descr)來(lái)找到顯示的標(biāo)定板圖像上面的標(biāo)志點(diǎn),從而確定標(biāo)定板實(shí)際輸入的參數(shù)(Distance、Diameter等)和這些參數(shù)對(duì)應(yīng)的圖像像素大小的關(guān)系,完成標(biāo)定。
標(biāo)定步驟:
1)使用gen_caltab算子生成一個(gè)標(biāo)定文件
標(biāo)定前需要生成一個(gè).descr的描述文件,也就是世界坐標(biāo)系與像素坐標(biāo)系的關(guān)系,當(dāng)我們下一次做別的項(xiàng)目時(shí),只需要調(diào)用描述文件,即可完成標(biāo)定過(guò)程。
生成標(biāo)記文件的算子:gen_caltab (7, x方向的標(biāo)記數(shù);
7, y方向的標(biāo)記數(shù);
0.0075, 標(biāo)記點(diǎn)圓心之間的距離,單位:米;
0.5, 標(biāo)記點(diǎn)直徑與標(biāo)記點(diǎn)圓心之間距離的比值;
‘C:/Users/Administrator/Desktop/caltab.descr’,標(biāo)定板的描述文件的保 存路徑;
‘caltab.ps’,描述標(biāo)定板的一些信息,打印標(biāo)定板時(shí)會(huì)用到)
2)打開(kāi)標(biāo)定助手,加載標(biāo)定文件,設(shè)置相機(jī)參數(shù)(單個(gè)像元寬高(問(wèn)相機(jī)廠商或看手冊(cè)),相機(jī)焦距)
3)實(shí)時(shí)獲取各個(gè)角度、位置的標(biāo)定板圖片(9-16張左右),并選擇其中一種圖片設(shè)置參考位姿,然后標(biāo)定。
可以看到相機(jī)的參數(shù):
4)保存相機(jī)內(nèi)、外參,下次使用測(cè)量助手直接調(diào)用內(nèi)外參文件。
單獨(dú)說(shuō)一下如何進(jìn)行畸變校正,可以接上面的第三步之后:生成標(biāo)定數(shù)據(jù)(相機(jī)內(nèi)、外參)代碼,從而進(jìn)行畸變校正
*相機(jī)內(nèi)參
CameraParameters := [0.0375147,-270.806,8.30152e-006,8.3e-006,647.48,520.914,1280,960]
*相機(jī)位姿,即外參(旋轉(zhuǎn)矩陣+平移矢量)
CameraPose := [-0.0091626,-0.00625214,0.700967,2.46926,358.933,179.443,0]
*1、校正徑向畸變,得到新的相機(jī)內(nèi)參
change_radial_distortion_cam_par (‘a(chǎn)daptive’, CameraParameters, 0, CamParamOut)
stop ()
Image Acquisition 02: Code generated by Image Acquisition 02
open_framegrabber (‘GigEVision’, 0, 0, 0, 0, 0, 0, ‘default’, -1, ‘default’, -1, ‘false’, ‘default’, ‘CAMERA_QBY_DM’, 0, -1, AcqHandle)
grab_image_start (AcqHandle, -1)
while (true)
grab_image_async (Image, AcqHandle, -1)
*2、對(duì)發(fā)生徑向畸變的圖像生成投影映射,圖像的映射數(shù)據(jù)存在第一個(gè)參數(shù)中
gen_radial_distortion_map (Map, CameraParameters, CamParamOut, ‘bilinear’)
*3、對(duì)圖像進(jìn)行畸變校正
map_image (Image, Map, ImageMapped)
endwhile
close_framegrabber (AcqHandle)
注意:相機(jī)標(biāo)定之后,相機(jī)焦距、上下位置不能再動(dòng),否則需要重新標(biāo)定。
審核編輯:湯梓紅
-
圖像
+關(guān)注
關(guān)注
2文章
1075瀏覽量
40269 -
相機(jī)
+關(guān)注
關(guān)注
4文章
1303瀏覽量
53136 -
crt
+關(guān)注
關(guān)注
2文章
80瀏覽量
35776 -
程序
+關(guān)注
關(guān)注
115文章
3720瀏覽量
80357
原文標(biāo)題:halcon單相機(jī)標(biāo)定和畸變矯正程序
文章出處:【微信號(hào):gh_a8b121171b08,微信公眾號(hào):機(jī)器人及PLC自動(dòng)化應(yīng)用】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論