轉(zhuǎn)自:微信公眾號AI圖像
創(chuàng)建標(biāo)定數(shù)據(jù)模型
你可以用算子create_calib_data創(chuàng)建一個標(biāo)定數(shù)據(jù)模型,指定相機和標(biāo)定物體的數(shù)量。當(dāng)用一個相機的時候,你也用一個單獨的標(biāo)定物體。
然后,你要做的是:
指定相機內(nèi)部參數(shù)的初始值
描述標(biāo)定物體
指定相機內(nèi)參的初始值
你可以用算子set_calib_data_cam_param來設(shè)置相機內(nèi)部參數(shù)。
除了標(biāo)定數(shù)據(jù)模型,算子也需要下面的參數(shù)作為輸入:
CameraIdx:相機的索引(0代表單個相機)
CameraType: 相機的類型
CameraParam: 相機內(nèi)參初始值的一個元組
那種畸變模型去使用
對于面陣相機,兩種畸變模型可供使用:劃分模型和多項式模型。劃分模型用一個參數(shù)來構(gòu)造徑向畸變,多項式模型用5個參數(shù)來構(gòu)造徑向和離心畸變。
劃分模型的優(yōu)勢是畸變可以被快速的應(yīng)用,尤其是對于反向畸變,例如如果世界坐標(biāo)被映射到圖像平面。還有,如果只有幾張標(biāo)定圖像被使用或者視野覆蓋不足,劃分模型則會比多項式模型得到更穩(wěn)定的結(jié)果。多項式模型的主要優(yōu)勢是它可以更精確的構(gòu)造畸變,因為其用了更高階的項去構(gòu)造徑向畸變,并且它也構(gòu)造了離心畸變。需要注意的是,多項式模型不能夠反推。因此,反向畸變必須被迭代計算看,其要比劃分模型反向畸變的計算要慢。
一般的,劃分模型應(yīng)該被用來標(biāo)定。如果標(biāo)定的精度不高,可以用多項式模型。但是需要注意的是,被用于多項式模型的標(biāo)定序列必須提供一個完整的區(qū)域覆蓋,這個區(qū)域在后邊用于測量?;兛赡軙跊]有被標(biāo)定板覆蓋的區(qū)域外邊被不準(zhǔn)確的構(gòu)造出來。這種情況發(fā)生在圖像邊緣,也發(fā)生在標(biāo)定板沒有覆蓋到的視野區(qū)域內(nèi)部。
描述標(biāo)定物體
用算子set_calib_data_calib_object,你可以指定標(biāo)定物體所需的信息。
如果你用的是HALCON的標(biāo)定板,對應(yīng)的描述文件名字就足夠了。
如何獲得一個合適的標(biāo)定板
確定給CCD相機的相機參數(shù)最簡單的方法就是利用HALCON的標(biāo)定板(如圖1所示)。在這種情況下,找標(biāo)定把的整個過程,提取標(biāo)定標(biāo)志點,以及決定提取標(biāo)定標(biāo)志點和各自3D世界坐標(biāo)之間的對應(yīng)關(guān)系都可以自動的被執(zhí)行。更重要的是,標(biāo)定板更加精確,1um或更小,對于高精度的應(yīng)用其是前提條件。
兩種類型的HALCON標(biāo)定板是被支持的。尤其是,六角形排列的標(biāo)志點和矩形排列的標(biāo)志點的標(biāo)定板是可行的。具有六角形排列的標(biāo)定板是在HALCON12中引進的,在大多數(shù)應(yīng)用中被推薦使用,因為相比于矩形排列標(biāo)志點的標(biāo)定板,其提供了如下的優(yōu)點:
l具有矩形排列標(biāo)志點的標(biāo)定板應(yīng)該充滿圖像視野的四分之一。為了覆蓋包括不同傾斜的整個視野,許多圖像(至少10到20)是需要。因為六角形排列的標(biāo)定板包含了眾多數(shù)目的標(biāo)志點,因此用單個圖像就能夠覆蓋整個圖像面積,更少的圖像(6到7張)被需要去得到可比較的標(biāo)定 結(jié)果。
l矩形排列標(biāo)志點的標(biāo)定板必須在圖像全部可見的,然而六角形排列的標(biāo)定板可以伸出圖像的邊緣。進而,當(dāng)放置標(biāo)定板的時候,后者就不需要太多的在意。標(biāo)定板圖像的獲取就變的更快和方便,而沒有穩(wěn)定性的損失。
一個六邊形排列的標(biāo)定板在單張圖像上應(yīng)該充滿整個圖像區(qū)域。一個矩形排列的標(biāo)定板應(yīng)該至少覆蓋圖像區(qū)域的9分之一。為了提高標(biāo)定的質(zhì)量,我們推薦一個標(biāo)定板至少覆蓋圖像區(qū)域的四分之一。
使用你自己的標(biāo)定物體
利用HALCON,你不受限于使用一個平面標(biāo)定板,例如HALCON標(biāo)定板。你可以使用一個3D標(biāo)定板或者甚至任意特征點(自然的標(biāo)志)。僅有要求就是模型點的3D世界位置是已知的,并且具有很高的精度。
然后,你就簡單將標(biāo)定物體的所有點(標(biāo)志點)的3D坐標(biāo)作為一個元組傳到算子set_calib_data_calib_object中的CalibObjeDescr。所有點的x, y, z坐標(biāo)必須以【x, y, z】元組的順序進行打包。
然而,需要主要的是,如果你用自己的標(biāo)定物,你就不能再用find_calib_object。相反,你必須自己來確定模型點的2D位置和對3D點的對應(yīng)關(guān)系。
在多位姿上觀察標(biāo)定物
標(biāo)定的主要輸入數(shù)據(jù)是所謂的觀察。為此,標(biāo)定物在不同的位姿被放置。對于每一個位姿,相機獲取一張圖像。在這張圖像上,標(biāo)定物的標(biāo)志點被提取,還有他們的(像素)坐標(biāo),連同相機的索引,標(biāo)定物,標(biāo)定物的位姿,包含響應(yīng)標(biāo)志點的索引,都被存儲在標(biāo)定數(shù)據(jù)模型中。
如果你使用標(biāo)準(zhǔn)的HALCON標(biāo)定板,你可以用算子find_calib_object去提取坐標(biāo),其將自動存儲獲得的信息到標(biāo)定數(shù)據(jù)模型,包括標(biāo)志點的坐標(biāo)和標(biāo)志點對應(yīng)的列表。
如果你用的是自己的標(biāo)定物,你必須提取其標(biāo)志點和確定其對應(yīng)關(guān)系,然后用set_calib_data_observ_points將信息存儲在標(biāo)定數(shù)據(jù)模型中。
獲取標(biāo)定圖像的規(guī)則
如果你想獲得準(zhǔn)確的結(jié)果,請準(zhǔn)照下面的規(guī)則:
用一個干凈的標(biāo)定板
用多個圖像覆蓋整個視野,例如在視野所有區(qū)域至少放置標(biāo)定一次
變換標(biāo)定板的方向,包含標(biāo)定板繞著x軸和y軸旋轉(zhuǎn),這樣標(biāo)定圖案的透視畸變是清晰可見的。沒有一些傾斜的標(biāo)定板,焦距是不能夠被合理的計算出來(接近45度的傾斜角度是被推薦的)
對于六角形排列的標(biāo)定板,至少使用6張圖像,矩形排列的標(biāo)定板10到15張
對于矩形排列的標(biāo)定板,用一個背景比標(biāo)定板更暗的光照
標(biāo)定把亮的部分的灰度值至少為100
標(biāo)定板的亮暗對比應(yīng)該超過100
用一個使標(biāo)定板均勻的光照
圖像不能過曝(圖像亮的部分應(yīng)該嚴(yán)格低于255)
圓的直徑應(yīng)該至少20個像素
圓的直徑的像素至少20個像素
對于標(biāo)定板大小的選取,六角形排列的標(biāo)定板應(yīng)該覆蓋整個圖像,對于矩形排列的標(biāo)定板,至少覆蓋整個圖像的1/4
六角形排列的標(biāo)定板,至少一個定位圖像在圖像中是完全可見的。如果至少兩個定位圖是可見的,可能去檢測是否標(biāo)定板是反射的。對于矩形排列的標(biāo)定把,標(biāo)定應(yīng)該在圖像中完全可見的。
圖像應(yīng)該盡可能的包含一點噪聲
圖像應(yīng)該被嚴(yán)格聚焦,例如在物體之間的過度應(yīng)該被清晰的界定開。
需要注意的是,一個好的標(biāo)定結(jié)果僅僅是在相機視野中標(biāo)定標(biāo)志點均勻分布的情況下才能獲得。你可以想象一下相對于視野的3D空間的一部分作為一個標(biāo)定體積,如圖2所示,這里展示了,當(dāng)從不同角度看時,標(biāo)定板的兩個位姿和它們標(biāo)定標(biāo)志點的位置??梢钥吹?,例如從面1看,更大的部分沒有被標(biāo)志點所覆蓋。為了獲得更標(biāo)志點的均勻分布,進而得到一個好的標(biāo)定結(jié)果,你必須在你其他的圖像中放置標(biāo)定板,進而對于整個視角,標(biāo)定容積空的部分被最小化。注意的是,當(dāng)有一個非常小的標(biāo)定板(相比于視野而言),這就意味著比推薦的更多的標(biāo)定圖像數(shù)量被需要使用。
如果一張圖像被用于標(biāo)定過程或者如果標(biāo)定板的方向在不同的標(biāo)定圖像不發(fā)生變化,就不可能很好的確定焦距和相機的位姿;在這種情況下,僅僅聚焦之間的比率和標(biāo)定板和相機之間的距離被確定下來。然而,在標(biāo)定板平面進行世界坐標(biāo)的測量是可能,但是不可能去讓相機參數(shù)去適應(yīng)在另一個面上進行測量,例如標(biāo)定板被放置的面。
圖1:標(biāo)定容積的查看:(左)具有兩個標(biāo)定位姿的標(biāo)定容積和(右)當(dāng)不同角度看時,標(biāo)定標(biāo)志點相對應(yīng)的分布。對于一個好的標(biāo)定結(jié)果,沒有標(biāo)定標(biāo)志點的區(qū)域(尤其從面1視角則更大)必須通過更多標(biāo)定板位姿的謹(jǐn)慎選擇達(dá)到最小化。
結(jié)果世界坐標(biāo)的精度,除了在圖像中的測量精度外,非常依賴被用來標(biāo)定進程中所用的圖像的數(shù)量。越多圖像(具有更大不同的標(biāo)定板位姿)被使用,更精確的結(jié)果將被獲取。
提取HALCON標(biāo)定板上的標(biāo)志點
算子find_calib_object尋找標(biāo)定板,決定了標(biāo)定標(biāo)志點的圖像坐標(biāo),并具有很高的精度,最后將結(jié)果存儲在標(biāo)定數(shù)據(jù)模型中。
需要注意的是find_caltab和find_marks_and_pose僅僅被用于矩形排列的標(biāo)定板。還有,它們需要復(fù)雜的參數(shù)調(diào)整。相反的是,可以用于所有標(biāo)準(zhǔn)的HALCON標(biāo)定板,自動選擇合適的參數(shù),因此更容易去使用。
限制標(biāo)定到特定的參數(shù)
如果某相機參數(shù)已知了,你可以用算子set_calib_data從標(biāo)定中排除它們,類似的,你可以限制標(biāo)定到某些參數(shù)。
執(zhí)行標(biāo)定
在準(zhǔn)備了標(biāo)定數(shù)據(jù)模型以后,可以通過調(diào)用calibrate_cameras來執(zhí)行標(biāo)定,用標(biāo)定數(shù)據(jù)模型作為輸入:
作為一個直接結(jié)果是,僅僅是標(biāo)定錯誤被返回。你可以用算子get_calib_data來更進一步的去分析標(biāo)定結(jié)果的質(zhì)量。
主要的標(biāo)定結(jié)果,例如相機的內(nèi)參,被存儲在標(biāo)定數(shù)據(jù)模型中。
訪問標(biāo)定結(jié)果
算子calibrate_cameras的主要結(jié)果由相機內(nèi)參和每一張圖像標(biāo)定板的位姿組成。算子將它們存儲在標(biāo)定數(shù)據(jù)模型中,可以用算子get_calib_data來訪問它們。
相機外參并不能直接被獲取,因為所需的世界坐標(biāo)系統(tǒng)的信息沒有存儲在標(biāo)定數(shù)據(jù)模型中。然而,如果標(biāo)定板被直接放置在測量平面上,其位姿可以被用來很容易的得到相機的外參,其是測量平面的位姿。
確定相機外參
相機外參描述了測量平面和相機的關(guān)系,例如如果僅僅外參是已知,就可能將相機坐標(biāo)系統(tǒng)(CCS)轉(zhuǎn)化到測量平面的坐標(biāo)系統(tǒng),反之亦然。在HALCON中,測量平面被定義為世界坐標(biāo)系統(tǒng)(WCS)z=0的平面。
相機外參可以用不同的方法來確定:
利用從某一個標(biāo)定圖像獲取的位姿,其中標(biāo)定圖像中標(biāo)定板被直接放置在測量平面上。在這種情況下,你就可以用算子get_calib_data來獲得其位姿。
通過一個標(biāo)定板被直接放置在測量平面的額外圖像,將相機內(nèi)參的確定從相機外參的確定分離出來。應(yīng)用find_calib_object去提取標(biāo)定標(biāo)志點和位姿。
自己去確定3D世界點和它們在圖像映射的對應(yīng)關(guān)系,然后調(diào)用vector_to_pose。
如果你僅僅需要去精確地測量一個物體的尺寸,而不是在一個給定坐標(biāo)系統(tǒng)的物體的絕對位置,前兩種方法中一種就可以使用。
后兩種情況具有相機外參的決定不依賴相機內(nèi)參的優(yōu)勢。如果用單個相機在數(shù)個平面上做測量,或者不能在原地標(biāo)定相機,這將是更加靈活和有用。
下面將對不同的情況做詳細(xì)的講解。
在標(biāo)定圖像之一將標(biāo)定板放置在測量平面上
第一種情況是一種最容易決定外參的方法。標(biāo)定板必須直接放置在測量平面上,例如流水線。
因為通過算子calibrate_cameras,標(biāo)定板的位姿可以確定下來,你可以通過算子get_calib_data簡單的訪問其位姿。這樣,用一個單一的標(biāo)定步驟,內(nèi)參和外參就能確定下來。這里,在第一個標(biāo)定圖像中標(biāo)定板(標(biāo)定物索引0)的位姿被確定。請注意的是每一個位姿是由7個值組成的。
如果標(biāo)定把是無限的薄的,結(jié)果位姿將是測量平面的真實位姿。因為真實的標(biāo)定板有一個厚度d>0,標(biāo)定板的位姿通過一個垂直于測量平面的量d的移動,例如沿著WCS的z軸。為了矯正它,我們需要沿著WCS的z軸去移動位姿d個單位。為了執(zhí)行這個移動,算子set_origin_pose被利用:
一般地,只要標(biāo)定板和測量平面的空間關(guān)系是已知的,標(biāo)定板在WCS中就可以任意地鎖定方向(如圖3所示)。然后,為了從標(biāo)定板位姿中獲得測量平面的位姿,一個剛性轉(zhuǎn)換時必須的。在下面的例子中,標(biāo)定板的位姿沿著y軸平移,接著繞著x軸旋轉(zhuǎn)。
在一個單獨圖像中放置標(biāo)定板在測量平面上
如果用HALCON標(biāo)定板的優(yōu)勢可以將相機內(nèi)參和外參分離所具有的靈活性相結(jié)合,第二種相機外參確定的方法可以使用。
首先,相機按照標(biāo)定步驟進行標(biāo)定。這可以優(yōu)先于相機在最終使用點安裝之前完成。
然后,在最終使用點安裝完相機以后,外參就可以被確定。僅僅需要做的就是取一張圖,圖中標(biāo)定被直接放在了測量平面上。從這張圖中,外參就可以被確定下來。這里,內(nèi)參,標(biāo)定板被直接放在測量平面上的圖像和標(biāo)定標(biāo)志點的世界坐標(biāo)可從文件中讀取。
然后,標(biāo)定標(biāo)志點和標(biāo)定板的位姿被提?。?/p>
最后,考慮到標(biāo)定板的厚度,被給相機位姿原點的值平移標(biāo)定板厚度個單位。
圖3 標(biāo)定板和測量平面的關(guān)系
需要注意的是,如果你想將標(biāo)定步驟分為兩個部分來完成的話,相機的聚焦是很重要的,因為改變焦點就相當(dāng)于改變焦距,其是內(nèi)參的一部分。
利用已知的3D點和它們對應(yīng)的圖像點
如果在給定的世界坐標(biāo)系統(tǒng)中執(zhí)行測量是必要的,對于外參的確定,第三種情況就可以使用。這里,你需要知道至少不再一條直線上3個點的3D世界坐標(biāo),然后,你必須確定這些點映射后相對應(yīng)的圖像坐標(biāo)?,F(xiàn)在,算子vector_to_pose可以被用來確定相機的外參。
下面的程序作為一個確定外參的例子。
首先,三個點的世界坐標(biāo)被設(shè)定。
然后,在圖像上這些點映射后的圖像坐標(biāo)被確定。在這個例子中,它們被很簡單的設(shè)定位一些接近的 值。實際上,它們應(yīng)該以亞像素的精度確定下來,因為他們定義了相機外參。
最后,算子vector_to_pose在已知對應(yīng)關(guān)系和相機內(nèi)參的情況下,被調(diào)用。
從標(biāo)定數(shù)據(jù)模型中刪除觀測圖
為了確定有關(guān)標(biāo)定的觀測效果,或者從標(biāo)定數(shù)據(jù)模型中移除壞質(zhì)量的觀測數(shù)據(jù),可以用算子remove_calib_data_observ刪除一個觀測圖。
當(dāng)再次執(zhí)行相機標(biāo)定的時候,需要注意標(biāo)定錯誤的改變。
保存結(jié)果和銷毀標(biāo)定數(shù)據(jù)模型
在訪問結(jié)果(或者用算子write_cam_par和write_pose來存儲它們),你可以借助算子clear_calib_data銷毀標(biāo)定數(shù)據(jù)模型。
原文標(biāo)題:HALCON高級篇:3D相機標(biāo)定
文章出處:【微信公眾號:新機器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
責(zé)任編輯:haq
-
3D
+關(guān)注
關(guān)注
9文章
2945瀏覽量
109242 -
相機
+關(guān)注
關(guān)注
4文章
1422瀏覽量
54430
原文標(biāo)題:HALCON高級篇:3D相機標(biāo)定
文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
對于結(jié)構(gòu)光測量、3D視覺的應(yīng)用,使用100%offset的lightcrafter是否能用于點云生成的應(yīng)用?
DLP_LightCrafter_4500_3D_Scan_Application軟件進行相機和投影儀標(biāo)定時,進入相機拍照界面后程序未響應(yīng)然后退出怎么解決?
肇觀電子首發(fā)自標(biāo)定3D深度相機
SciChart 3D for WPF圖表庫

技術(shù)指南丨深視智能3D相機上下對射測厚操作流程



裸眼3D筆記本電腦——先進的光場裸眼3D技術(shù)
奧比中光3D相機打造高質(zhì)量、低成本的3D動作捕捉與3D動畫內(nèi)容生成方案
OpenCV攜奧比中光3D相機亮相CVPR 2024

評論