Halcon 点云拟合平面并获取单位法向量及位姿
確實因為halcon的文檔寫的太好了,所以網(wǎng)上關(guān)于halcon的博客就很少,點云擬合平面的文檔上介紹的比較詳細,但是如何從平面模型中讀取法向量可確實是難到了,找了三個小時人傻了,然后發(fā)現(xiàn)還是一行函數(shù)。
首先來說三維點云擬合平面,首先gen_object_model_3d_from_points,把點云轉(zhuǎn)化為3d模型,輸入:X,Y,Z坐標,輸出ObjectModel3D
gen_object_model_3d_from_points( : : X, Y, Z : ObjectModel3D)
?再選擇擬合成想要的平面,使用fit_primitives_object_model_3d 把該上模型轉(zhuǎn)化到Plane
fit_primitives_object_model_3d( : : ObjectModel3D, ParamName, ParamValue : ObjectModel3DOut)
ObjectModel3D:輸入模型
ParamName:選擇'primitive_type':擬合的類型,'fitting_algorithm':擬合方法等等
ParamValue:對應(yīng)'primitive_type'------'cylinder', 'sphere', 'plane',就是"圓柱體","球體","平面"。對應(yīng)'primitive_type'------'least_squares', 'least_squares_huber', 'least_squares_tukey'幾種最小二乘法,這里選擇plane和least_squares
ObjectModel3DOut:輸出的平面
得到平面之后,ObjectModel3DOut相當于一個平面的模型,他里邊包含各種平面的參數(shù):pose,nomals等等,需要使用一個函數(shù)get_object_model_3d_params
get_object_model_3d_params( : : ObjectModel3D, ParamName : ParamValue)
F1文檔查看,有所有想要的信息~
然后選擇ParamName是'primitive_parameter',取出法向量
選擇ParamName是'primitive_pose',取出位姿
?代碼如下:
X:=[-0.04, -0.03, -0.02, -0.01, 0.0, 0.01, 0.02, 0.03, 0.04, -0.04, -0.03, -0.02, -0.01, 0.0, 0.01, 0.02, 0.03, 0.04, -0.04, -0.03, -0.02, -0.01, 0.0, 0.01, 0.02, 0.03, 0.04, -0.04, -0.03, -0.02, -0.01, 0.0, 0.01, 0.02, 0.03, 0.04, -0.04, -0.03, -0.02, -0.01, 0.0, 0.01, 0.02, 0.03, 0.04, -0.04, -0.03, -0.02, -0.01, 0.0, 0.01, 0.02, 0.03, 0.04, -0.04, -0.03, -0.02, -0.01, 0.0, 0.01, 0.02, 0.03, 0.04, -0.04, -0.03, -0.02, -0.01, 0.0, 0.01, 0.02, 0.03, 0.04, -0.04, -0.03, -0.02, -0.01, 0.0, 0.01, 0.02, 0.03, 0.04]
Y:=[-0.04, -0.04, -0.04, -0.04, -0.04, -0.04, -0.04, -0.04, -0.04, -0.03, -0.03, -0.03, -0.03, -0.03, -0.03, -0.03, -0.03, -0.03, -0.02, -0.02, -0.02, -0.02, -0.02, -0.02, -0.02, -0.02, -0.02, -0.01, -0.01, -0.01, -0.01, -0.01, -0.01, -0.01, -0.01, -0.01, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04]
Z:=[-0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0]
*生成3D模型
gen_object_model_3d_from_points(X, Y, Z, ObjectModel3D)
dev_open_window(0, 0, 512, 512, 'black', WindowHandle)
*展示一下這個平面
fit_primitives_object_model_3d (ObjectModel3D, ['primitive_type','fitting_algorithm'], ['plane','least_squares_tukey'], ObjectModel3DOut)
visualize_object_model_3d (WindowHandle,[ObjectModel3D,ObjectModel3DOut], [],[], \['color_0','color_1','alpha_1','disp_pose'], ['green','gray',0.5,'true'],'RectBOX', [], [], Pose)
*獲取法向量,Normal的前三個數(shù)值就是單位法向量
get_object_model_3d_params (ObjectModel3DOut, 'primitive_parameter', Normals)
平面圖如下:
?
?單位法向量:
剛好是Z軸正方向的那個法向量。
?
?
總結(jié)
以上是生活随笔為你收集整理的Halcon 点云拟合平面并获取单位法向量及位姿的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Halcon 读写txt文件,以逗号或空
- 下一篇: Opencv-python 图像处理基础