前言
KITTI數據集是自動駕駛和計算機視覺領域中一個廣泛使用的基準數據集,它提供了豐富的傳感器數據,包括激光雷達、相機和GPS等。Open3D是一個功能強大的3D數據處理和可視化庫,支持多種3D數據格式。本文將介紹如何使用Open3D對KITTI數據集的檢測結果進行可視化。
準備工作
確保你已經安裝了Open3D庫。如果尚未安裝,可以通過pip安裝:
pip install open3d
加載點云
points = np.fromfile(str(bin_file), dtype=np.float32).reshape(-1, 4)mask = points[:,0]>0points= points[mask]pts = o3d.geometry.PointCloud() pts.points = o3d.utility.Vector3dVector(points[:, :3])
解析檢測框
def get_obj_corners(obj):center = [obj["Center"]["CenterX"], obj["Center"]["CenterY"], obj["Center"]["CenterZ"]]size = [obj["Size"]["ObjectLength"], obj["Size"]["ObjectWidth"], obj["Size"]["ObjectHeight"]]yaw = obj["Yaw"]rot = np.asmatrix([[math.cos(yaw), -math.sin(yaw)],\[math.sin(yaw), math.cos(yaw)]])plain_pts = np.asmatrix([[0.5 * size[0], 0.5*size[1]],\[0.5 * size[0], -0.5*size[1]],\[-0.5 * size[0], -0.5*size[1]],\[-0.5 * size[0], 0.5*size[1]]])tran_pts = np.asarray(rot * plain_pts.transpose())tran_pts = tran_pts.transpose()corners = np.arange(24).astype(np.float32).reshape(8, 3)for i in range(8):corners[i][0] = center[0] + tran_pts[i%4][0]corners[i][1] = center[1] + tran_pts[i%4][1]corners[i][2] = center[2] + (float(i >= 4) - 0.5) * size[2]return cornersdef render_3dbbox(points, color):lines = [[0, 1], [1, 2], [2, 3], [3, 0], [4, 5], [5, 6], [6, 7], [7, 4],[0, 4], [1, 5], [2, 6], [3, 7]]colors = [color for i in range(len(lines))]line_set = o3d.geometry.LineSet()line_set.points = o3d.utility.Vector3dVector(points)line_set.lines = o3d.utility.Vector2iVector(lines)line_set.colors = o3d.utility.Vector3dVector(colors)return line_set
結果可視化
源碼下載
添加我的微信ailaukalfp29, 回復Open3d