> 由于不同地物之间存在着高程的差异,为了去除地形起伏对点云数据高程值的影响,所以需要根据提取出的地面点进行点云归一化处理,这一步是很多算法的基础,可以提高后续点云分类或分割的准确度等,如下图所示。
> 归一化的过程其实相对简单,遍历每一个非地面点 ,找寻距离最近的地面点 ,求取这两点之间的高差,将计算出的高差值作为 新的高程值即可完成归一化操作。
import numpy as np
import matplotlib.pyplot as plt
from sklearn.neighbors import KDTree
from mpl_toolkits.mplot3d import Axes3D
from tkinter import filedialog
import tkinter as tk
# 获取地面点云数据
root = tk.Tk()
root.withdraw()
file_path = filedialog.askopenfilename(filetypes=[('Text Files', '*.txt')], title='Input Data-File')
if not file_path:
print("未选择点云文件!")
exit()
ground_data = np.loadtxt(file_path)[:, :3]
# 获取非地面点云数据
file_path = filedialog.askopenfilename(filetypes=[('Text Files', '*.txt')], title='Input Data-File')
if not file_path:
print("未选择点云文件!")
exit