【问题标题】:Python: Convert 2d point cloud to grayscale imagePython:将二维点云转换为灰度图像
【发布时间】:2020-09-23 23:31:48
【问题描述】:

我有一个可变长度的数组,其中填充了分布在 (0,0) 周围的 2d 坐标点(来自点云),我想将它们转换为 2d 矩阵(=灰度图像)。

# have
array = [(1.0,1.1),(0.0,0.0),...]
# want
matrix = [[0,100,...],[255,255,...],...]

我将如何使用 python 和 numpy 实现这一目标

【问题讨论】:

  • 点云是坐标数。灰度图像是强度值。您打算如何将坐标转换为强度值?映射是什么?
  • 如果许多点“落在”同一个网格(像素)中,那么强度会增加。
  • 除非您提供一个,否则到强度的映射仍然是任意的。看来问题已经解决了。

标签: python arrays numpy matrix point-clouds


【解决方案1】:

看起来matplotlib.pyplot.hist2d 就是您要查找的内容。

它基本上将您的数据分箱到二维箱中(您可以选择大小)。 here 文档和工作示例如下。

import numpy as np
import matplotlib.pyplot as plt
data = [np.random.randn(1000), np.random.randn(1000)]
plt.scatter(data[0], data[1])

然后你可以在你的数据上调用hist2d,例如这样

plt.hist2d(data[0], data[1], bins=20)

请注意,hist2d 的参数是两个一维数组,因此在将其提供给 hist2d 之前,您必须对我们的数据进行一些重塑。

【讨论】:

    【解决方案2】:

    仅使用 numpy 的快速解决方案,无需 matplotlib 和绘图:

    import numpy as np
    # given a 2dArray "array" and a desired image shape "[x,y]"
    matrix = np.histogram2d(array[:,0], array[:,1], bins=[x,y])
    

    【讨论】:

    • 如果您有强度值 (I) 以及 x 和 y 坐标,则可以使用 matrix = np.histogram2d(array[:,0], array[:,1], bins=[x,y], weights=I)。也可以考虑设置normed=False对强度值求和。
    猜你喜欢
    • 1970-01-01
    • 2014-11-21
    • 2020-02-20
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    • 2013-06-21
    • 2013-12-16
    • 1970-01-01
    相关资源
    最近更新 更多