基於表面的3d識別定位,即在乙個3d 場景下,用3d表面模型去識別零件,得到零件的pose,這個pose是基於3d場景座標系的。
模型可以用solidworks軟體畫,儲存成.stl格式,也可以是程式生成的。
讀入檔案然後生成3d表面模型:
file:='零件模型的位址及名稱'
*『mm』也可以是'm','dm',設定成和後續3d scene的讀入一致即可
read_object_model_3d (file, 'mm', , , objectmodel3dmodel, status)
create_su***ce_model (objectmodel3dmodel, 0.03, , , sfm)
讀入3d場景:
*3d場景可以是.ply等型別的點雲
name:='3d點雲的位置和名字'
read_object_model_3d(name, 'mm', , , objectmodel3d, status)
接下來識別:
*可以詳細設定引數
find_su***ce_model (sfm, objectmodel3d, 0.02, 0.6, 0.3, 'true', , , pose, score, su***cematchingresultid)
展示結果:
objectmodel3dresult :=
for index2 := 0 to |score| - 1 by 1
if (score[index2] < 0.11)
continue
endif
cpose := pose[index2 * 7:index2 * 7 + 6]
* rigid_trans_object_model_3d (objectmodel3dmodel, cpose, objectmodel3drigidtrans)
objectmodel3dresult := [objectmodel3dresult,objectmodel3drigidtrans]
endfor
message[1] := 'found ' + |objectmodel3dresult| + ' object(s) in ' + timeformatching1$'.3' + 'ms'+' without remove noise'
scorestring := sum(score$'.2f' + ' / ')
message[2] := 'score(s): ' + scorestring
numresult := |objectmodel3dresult|
tuple_gen_const (numresult, 'green', colors)
tuple_gen_const (numresult, 3, radii)
indices := [1:numresult]
* dev_clear_window ()
visualize_object_model_3d (windowhandle, [objectmodel3d,objectmodel3dresult1], , , ['color_' + [0,indices],'point_size_0'], ['gray',colors,1.0], message, , instructions, poseout)
還可以提前對3d場景資料進行去噪,平滑等預處理,在生成模型和進行識別時,可以根據需要設定不同引數來提高精確度或者加速識別。
另外halcon18.05的新功能,能限定零件的位姿和對稱性來加速識別。
Halcon中的3D技術
對於檢測一些產品的3d資訊,我們通過3d相機能獲取其點雲資料或一張帶有高度資訊的影象。這邊我們用smartray相機,獲取到一張16位的png影象。實際上就是一張高度資訊圖。這邊x y縮放比例為0.019,z方向為0.0016,意思就是你xyz乘這係數就是相對距離。在那個相機軟體中能看到如上的3d圖...
3D 相機halcon運算元,持續更新
add scene 3d camera 功能 將相機新增到三維場景中。add scene 3d instance 功能 將三維物件模型的例項新增到三維場景中。add scene 3d label 功能 向三維場景新增文字標籤。add scene 3d light 功能 將光源新增到三維場景。clea...
3D相機如何獲取基於立體視覺的3D資料
本文概述了使用立體相機獲取深度感知的主要處理步驟。立體視覺的深度感知基於三角測量原理。我們講兩台搭載投影光學系統的相機併排放置,使兩台相機的視野在所需物距發生重疊。我們通過這兩台相機的拍攝,可以得到兩個不同角度下的場景圖。如圖1所示。物體在圓錐筒前面,圓錐筒散落排列。在3d空間內,兩幅影象中的每乙個...