Yun*_*hao 3 python numpy point-clouds lidar
我正在尝试使用 python 将点云(X、Y、Z)转换为灰度图像。我了解到灰度图像可以由 Numpy 数组生成。但我现在拥有的是一组包含 X、Y 和高度的点。我想根据 X、Y 和灰度值(即高度)生成灰度图像。
有人可以给我一个想法吗?先谢谢了。
罗文
谢谢你们。我刚刚写完自己的代码来进行插值。但我的想法来自你的。感谢@asaflotz 和@Paul Panzer。
事情是在我的场景中,点云中的点排列不好。两个相邻点之间的间隔不均匀。直接使用 grid 是不可能的。所以我在Scipy.Interpolate 中选择了一个非结构化的方法,它有很多实用的方法可以根据不同的用例使用。我下面的代码是Scipy.Interpolate.griddata示例的修改版本。
x_range=((df.X.max()-df.X.min()))
y_range=((df.Y.max()-df.Y.min()))
grid_x, grid_y = np.mgrid[df.X.min():df.X.max():(x_range*1j), df.Y.min():df.Y.max():(y_range*1j)]
points = df[['X','Y']].values
values = df['new'].values
grid_z0 = griddata(points, values, (grid_x, grid_y), method='linear').astype(np.uint8)
im=Image.fromarray(grid_z0,'L')
im.show()
Run Code Online (Sandbox Code Playgroud)
请注意,在 griddata 中,可以根据您的场景应用诸如“线性”、“最近”、“三次”之类的方法。这是生成的灰度高程图像。
终于,我的问题基本解决了。如果您有任何好的想法或困惑,请在这篇文章中发表评论。谢谢大家!
罗文
我们假设 X、Y 已排列,以便它们形成一个网格(这是构建矩形图像所必需的)。从那里这很容易:
import numpy as np
import matplotlib.pyplot as plt
# generate some data
ax = np.arange(-9, 10)
X, Y = np.meshgrid(ax, ax)
Z = X ** 2 + Y ** 2
# normalize the data and convert to uint8 (grayscale conventions)
zNorm = (Z - Z.min()) / (Z.max() - Z.min()) * 255
zNormUint8 = zNorm.astype(np.uint8)
# plot result
plt.figure()
plt.imshow(zNormUint8)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5232 次 |
最近记录: |