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