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