目錄
一、ho手眼標定:影象座標到相機座標(世界座標)轉換
二、關鍵函式理解:define_reference_coord_system ('ref.bmp', cameraparam, calplatefile, windowhandle, poseref)
三、關鍵函式理解 image_points_to_world_plane (camparampixrect, poseref,modulerowobverse,modulecolumnobverse, 'mm', cornersx_ref_obverse, cornersy_ref_obverse) 總結
*******************************=轉化抓取的影象座標為機械人base下物理座標***********************************===
read_image (refimage, 'ref.bmp')
dev_display (refimage)
*標定板模板
calplatefile := 'calibratetable120.descr'
*從標定板中讀取marks中心座標,該座標值是標定板座標系統裡的座標值,該座標系統以標定板為參照,向右*為x正,下為y正,垂直標定板向下為z正。該運算元控制輸出為標定板中心3d座標。
*caltab_points (calplatefile, x, y, z)
sizegauss := 3
markthresh := 100
mindiammarks := 5
startthresh := 128
deltathresh := 10
minthresh := 8
alpha := 0.9
mincontlength := 15
maxdiammarks := 100
*分割出影象中的標準標定板區域region
find_caltab (refimage, caltab, calplatefile, sizegauss, markthresh, mindiammarks)
*從影象該區域中提取矩形排列的二維校準標記(換算到物理座標系後的),並計算相機外參(用到的影象未去畸變,所以用cameraparam)
find_marks_and_pose (refimage, caltab, calplatefile, cameraparam, startthresh, deltathresh, minthresh, alpha, mincontlength, maxdiammarks, rcoord, ccoord, posecamref)
* disp_3d_coord_system (windowhandle, camparam, posecamref, 0.01)
dev_display (refimage)
dev_set_color ('blue')
*通過影象中校準板的位置定義世界座標繫在攝像機座標系中的3d位姿[x(單位:m),y(m),z(m),a,b,c,0],
*標定後世界座標中心的影象的**,所以此時x為負值,y為正
define_reference_coord_system ('ref.bmp', cameraparam, calplatefile, windowhandle, poseref)
*獲取乙個3d位姿,並展示出來,但是展示的影象是3d位姿在平面圖上的投影
* poseref1 := [-0.0986341,0,0.916344,0,0,0,0]
* dev_set_color ('blue')
* disp_3d_coord_system (windowhandle, cameraparam, poseref1, 0.01)
*將三維姿勢轉換為齊次變換矩陣
pose_to_hom_mat3d (poseref, cam_h_ref)
phyx_obverse:=
phyy_obverse:=
phyangle_obverse:=
*影象在處理過程中已進行去畸變處理,所以用camparampixrect而不是cameraparam,
*影象中的點轉化到世界座標的z=0的平面上,所謂的z=0的平面即物料所在面,實際上獲取的特徵點就是在該平面上的,這個函式就是確定特徵帶在那個平面上獲得的,得到的cornersx_ref_obverse,
*cornersy_ref_obverse為該平面尺度上的座標
image_points_to_world_plane (camparampixrect, poseref,modulerowobverse,modulecolumnobverse, 'mm', cornersx_ref_obverse, cornersy_ref_obverse)
引數:『ref.bmp』:影象路徑;cameraparam:相機內參;calplatefile:標定板模板檔案;poseref:得到的3d座標
描述:通過影象中校準板的位置定義世界座標繫在相機座標系中的3d位姿[x(單位:m),y(m),z(m),a,b,c,0],標定後世界座標中心的影象的**
圖中:o1:鏡頭焦點及世界座標系原點
o2:標定板原點
o3:影象座標系的座標原點
通過該運算元,獲取標定板中心畫素在世界座標系中的位置即(x',y',z',a',b',c',0)例如圖中座標為:[-0.0986341, 0.0803844, 0.916344, 0.390286, 0.636935, 270.004, 0],,圖中o1『為世界座標原點在平面1的投影,x偏移:--0.0986341m,
y偏移:0.0803844,,z偏移:0.916344, 繞x:0.390286, 繞y:0.636935, 繞z:270.004
引數:camparampixrect:相機內參;poseref:上乙個函式求出的標定板原點在相機座標系下的姿態;modulerowobverse,modulecolumnobverse:模型特徵點在影象座標系中的x,y;mm:單位mm
cornersy_ref_obverse:輸出,特徵點在相機座標系(世界座標系中)的x,y
通過該 運算元,獲取特徵點的物理座標,原理應該是相似三角型。如圖:
焦距及靶平面資訊在引數camparampixrect中,焦距資訊在poseref中
新建:hom_mat2d_identity (hommat2d)
平移:hom_mat2d_translate (hommat2d, row, column, hommat2dtranslate)
旋**hom_mat2d_rotate (hommat2dtranslate, angle, 0, 0, hommat2drotate)
影象變換就是點的變換,平面上的點只有下x方向,y方向的變換,不包含旋轉資訊,旋轉體現在點構成的圖形上。影象變換原理參照:
公式的正確首先要正確定義旋轉方向:θ的方向:由x轉向y為正,反之為負;holcon中從row轉向col為正,否則為負;在此,數學座標系和畫素座標系保證一致;
先說一下引數row,column,angle,這三個引數在畫素座標系中的表示如下圖:這裡row相當於數學座標系中的x軸,column相當於y軸,繞原點逆時針轉為正方向;
初學者,個人見解,歡迎指正!
halcon手眼標定
手眼標定最簡單的方法 九點標定 九點標定的目的 建立mark點的影象座標與其在機械手座標系下的仿射變換矩陣,利用求得的仿射變換矩陣,可以把mark點的影象座標轉成物理座標,進而控制機械手完成定點抓取任務。halcon九點標定運算元 mark點畫素座標 area center sortedregion...
手眼標定(一)
所謂手眼系統,就是人眼鏡看到乙個東西的時候要讓手去抓取,就需要大腦知道眼鏡和手的座標關係。如果把大腦比作b,把眼睛比作a,把手比作c,如果a和b的關係知道,b和c的關係知道,那麼c和a的關係就知道了,也就是手和眼的座標關係也就知道了。相機知道的是畫素座標,機械手是空間座標系,所以手眼標定就是得到畫素...
手眼標定 九點標定
手眼標定 就是建立影象座標系和 機械人座標系之間的轉化關係 換矩陣 機械人座標系 通俗的說就是機械手上的座標點 二維平面,為什麼是二維平面,讀者們可以自己考慮一下 22.40 開始.23.52 其實沒有講 得到九個點的 影象座標 和 機械手位置座標怎麼 求 轉換矩陣的。25.12 開始講原理 如果 ...