这个真的太简单了,我就直接上代码了,包括了X,Y,Z 三个方向的直通滤波,以及可以根据偏航角范围来滤波;
def filter(point_stack):
y = point_stack[:, 1]
x = point_stack[:, 0]
# z = point_stack[:, 2]
# yaw = np.arctan2(y, x)
# print(yaw.max, yaw.min)
# print(x.max(), x.min())
# print(y.max(), y.min())
# print(z.max(), z.min())
# field1 = yaw < 0.8
# field2 = yaw > 0.3
# field = np.logical_and(field1, field2)
field1 = x < 20
field2 = x > 1.5 # 滤波的时候根据自己的需求改这里的数值即可
field = np.logical_and(field1, field2)
field3 = np.abs(y) > 5
field = np.logical_and(field, field3)
point_stack = point_stack[field, :]
return point_stack
filename_pic = r"2.pcd"
pcd_source = o3d.io.read_point_cloud(filename_pic)
target_np = np.asarray(pcd_source.points)
source = filter(target_np)