簡體   English   中英

將XYZ點雲轉換為灰度圖像

[英]Convert XYZ point cloud to grayscale image

每個人我都試圖使用python將點雲(X,Y,Z)轉換為灰度圖像。 我了解到灰度圖像可以由Numpy數組生成。 但我現在擁有的是一組包含X,Y和高度的點。 我想生成一個基於X,Y和灰度值的灰度圖像,即高度。

有人可以給我一個關於這個的想法嗎? 先謝謝。

羅文

讓我們假設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)

多謝你們。 我剛剛編寫了自己的代碼來進行插值。 但我的想法來自你的。 感謝@asaflotz和@Paul Panzer。

事情就是在我的場景中,點雲中的點數排列不好。 兩個附近點之間的間隔不均勻。 直接使用網格是不可能的。 所以我在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()

注意到在griddata中,可以根據您的場景應用“線性”,“最近”,“立方”等方法。 這是生成的灰度高程圖像。 在此輸入圖像描述

最后,我的問題基本上得到了解決。 如果您有任何好的想法或困惑,請評論這篇文章。 謝謝大家!

羅文

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM