【Python点群処理】3次元点群の正規化
正規化
3次元点群データの正規化をしてみます。
ディープラーニングを用いた推論や前処理時に使用します。
今回は、データの平均値からの偏差をデータ範囲(=最大値-最小値)で割ることで、データの最小値を-1、最大値を1に変換します。
def Normalize(pointcloud):
norm_pointcloud = pointcloud - np.mean(pointcloud, axis=0)
norm_pointcloud /= np.max(np.linalg.norm(norm_pointcloud, axis=1))
return norm_pointcloud
半径2の球を正規化してみます。
import open3d as o3d
import get_ball
#半径2の点群作成
num_points=1000
r=2
test_data=get_ball(num_points,r)
# numpy open3d に変換
pcd=o3d.geometry.PointCloud()
pcd.points = o3d. utility.Vector3dVector(test_data)
# 色の設定
color = np.zeros([len(test_data),3])
color[:,2]=1
pcd.colors = o3d.utility.Vector3dVector(color[:, :3])
# 正規化する点群をnumpy open3d に変換
pcd_normal=o3d.geometry.PointCloud()
# Normalize(test_data)で正規化
pcd_normal.points = o3d. utility.Vector3dVector(Normalize(test_data))
# 色の設定
color_normal = np.zeros([len(test_data),3])
color_normal [:,0]=1
pcd_normal.color_normal = o3d.utility.Vector3dVector(color_normal [:, :3])
# Open3dで可視化
o3d.visualization.draw_geometries([pcd,pcd_normal])
青色の点群が正規化前、赤色の点群が正規化後の点群です。
正規化された点群は最大1、最小-1の範囲になっていることが分かります。
おすすめ参考書
リンク
リンク
ディスカッション
コメント一覧
まだ、コメントがありません