1

我正在做一个小项目,给我一个二维的 XYZ 数据数组。以这种方式:

a = [[1,7,13,3,4],
     [6,21,32,11,2]]

其中x代表数组的列,y代表数组的行,z代表数组的内容,也就是距离。我想要完成的是使用 2d 数组并以 RGB 绘制深度图像。详细地说,距离 (z) 值越接近,我希望将点绘制为红色。随着距离(z)值的增加,我想根据距离的大小将其绘制为黄色、绿色或蓝色。

我添加了一张示例图片以便更好地说明。
深度图像

我正在尝试在 python 中完成此操作。我尝试研究它,但大多数时候我发现如何从深度图像或点云中提取 XYZ 数据,而不是使用 XYZ 数据来绘制深度图像。

请让我知道这是否可行,或者有哪些 python 库可以实现这一点。

谢谢你。

编辑:我相信注意到二维阵列由测距仪传感器生成的点云数据组成可能会有所帮助。我希望能够使用数据点构建扫描区域的静止 2d 图像。我还想利用颜色图来可视化图像的深度。

4

2 回答 2

2

这是一个使用示例seaborn

生成样本数据:

pip install seaborn  # for those who have not yet installed seaborn
---
AND
---
import seaborn as sns

def func(x, y):
    return np.exp(-x**2-y**2)

xaxis = np.linspace(-1, 1, 100)
yaxis = np.linspace(-1, 1, 200)
result = func(xaxis[:,None], yaxis[None,:])

绘图:

sns.heatmap(result, cmap=sns.color_palette("Spectral_r", as_cmap=True))
plt.yticks([],[])
plt.xticks([],[])

结果: 在此处输入图像描述

于 2020-10-27T07:41:50.263 回答
1

类似的东西?

from matplotlib.pylab import plt
a = [[1,7,13,3,4],
     [6,21,32,11,2]]
plt.matshow(a, cmap=plt.cm.viridis)
plt.colorbar()

在此处输入图像描述

您可以传递大型数组,例如图像。在这里,我使用 matplotlib 中的示例图像,我剪切颜色以获得 (120, 560) 而不是 (120, 560, 3) 数组并显示它:

from matplotlib.pylab import plt
from matplotlib.cbook import get_sample_data
fn = get_sample_data("logo2.png", asfileobj=False)
img = plt.imread(fn, format='png')[...,0] #get single color channel
plt.matshow(img,cmap=plt.cm.jet,interpolation='bicubic')#see imshow for more arguments
plt.colorbar()

在此处输入图像描述

如果我没记错的话 plt.matshow 是 plt.imshow 的子类

于 2020-10-26T23:26:24.323 回答