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