方法1:将点云或模型投影到2D相机平面,生成X,Y,Z map图,通过获取鼠标点选坐标,获取XYZ map图中对应的灰度值,该灰度值即模型鼠标点选的xyz坐标值。
方法2:通过将鼠标点选的点映射到三维空间中,将原点和点选点连成一条直线,求取三维直线和模型的最近距离点。
read_object_model_3d ('mvtec_bunny_normals', 'm', [], [], ObjectModel3D, Status)
dev_open_window (0, 0, 1920,966, 'black', WindowHandle2)
CamParam := ['area_scan_division',0.06,0,8.5e-06,8.5e-06,960,483,1920,966]
Pose := [-68.7544,-26.3678,825.156,0,0,0,0]
GenParamName := ['colored','color_0']
GenParamValue := [12,'light gray']
dev_get_window (WindowHandle)
disp_object_model_3d (WindowHandle, ObjectModel3D, CamParam, Pose, GenParamName, GenParamValue)
get_mbutton (WindowHandle, Row, Column, Button)
dev_close_window ()
*第一种方式
object_model_3d_to_xyz (X1, Y1, Z1, ObjectModel3D, 'cartesian_faces', CamParam, Pose)
get_grayval (X1, Row, Column, Xcord)
get_grayval (Y1, Row, Column, Ycord)
get_grayval (Z1, Row, Column, Zcord)
*第二种方式
image_points_to_world_plane (CamParam, Pose, Row, Column, 'm', X, Y)
pose_to_hom_mat3d (Pose, HomMat3D)
affine_trans_point_3d (HomMat3D, X, Y,0, Qx, Qy, Qz)
M:=sqrt((Qx*Qx+Qy*Qy+Qz*Qz))
Nx:=Qx/M
Ny:=Qy/M
Nz:=Qz/M
tuple_gen_sequence (0, Nx*2000, Nx, SequenceX)
tuple_gen_sequence (0, Ny*2000, Ny, SequenceY)
tuple_gen_sequence (0, Nz*2000, Nz, SequenceZ)
gen_object_model_3d_from_points (SequenceX, SequenceY, SequenceZ, Line)
affine_trans_object_model_3d (ObjectModel3D, HomMat3D, Object3DShow)
distance_object_model_3d (Object3DShow, Line, [], 3, [ 'store_closest_index' ], ['true'])
get_object_model_3d_params (Object3DShow,'&closest_index', GenParamValue2)
select_points_object_model_3d (Object3DShow, '&distance',0, 2, ObjectModel3DThresholded0)
get_object_model_3d_params (ObjectModel3DThresholded0, 'num_points', num_points)
if (num_points>0)
get_object_model_3d_params (ObjectModel3DThresholded0, 'point_coord_x', px)
get_object_model_3d_params (ObjectModel3DThresholded0, 'point_coord_y', py)
get_object_model_3d_params (ObjectModel3DThresholded0, 'point_coord_z', pz)
endif
distance_point_line (px, py, pz, 0, 0, 0, Qx, Qy, Qz, Distance)
tuple_sort_index (Distance, Indices)
if (|Indices|>2)
tuple_select (px, Indices[0:1], pxSelected)
tuple_select (py, Indices[0:1], pySelected)
tuple_select (pz, Indices[0:1], pzSelected)
endif
closestP:=sqrt(pxSelected*pxSelected+pySelected*pySelected+pzSelected*pzSelected)
tuple_sort_index (closestP, Indices)
tuple_select (pxSelected, Indices[0], px1)
tuple_select (pySelected, Indices[0], py1)
tuple_select (pzSelected, Indices[0], pz1)
gen_sphere_object_model_3d_center (px1, py1, pz1, 0.5, objectPointSelected)
show:=[Object3DShow,Line,ObjectModel3DThresholded0,objectPointSelected]