【问题标题】:Save Kinect depth image in Matlab?在 Matlab 中保存 Kinect 深度图像?
【发布时间】:2011-09-13 11:59:15
【问题描述】:

通过使用 Kinect,我可以获得深度图像,其中每个深度图像像素存储相机和物体之间的距离(以毫米为单位)。现在我想保存它们以便以后使用。最好的建议是什么?

我正在考虑将深度图像保存为图像(jpg/png 等)。但是,该值通常从 50 毫米到 10000 毫米,而普通图像元素可以存储 0-255。然后我需要将数据缩放到 0-255 范围内,这可能会以某种方式利用数据。

【问题讨论】:

    标签: matlab image-processing depth kinect


    【解决方案1】:

    您可以使用命令 save() 和 load() 将矩阵直接存储到磁盘。但是只有 matlab 才能读取它。这是最佳选择,因为您根本不会丢失精度。

    如果您必须将值缩放到 0..255,则不要线性缩放它。对于更近的物体,您需要更高的精度。所以只需将以下函数应用于矩阵 ln(DepthImage - 49)*25 得到大约 0..255 个值。现在保存图像并在加载时应用反向功能。 这样(使用 lan 函数)你的精度会受到更少的伤害

    【讨论】:

    • 非常感谢您的建议。使用 ln 函数进行缩放是一个不错的建议。但是,考虑 Depthimage = 100。然后 ln(100-49)*25 = 7.15。当值 7.15 7.15 存储在矩阵中(作为图像)时,它变为 7.00。如果我应用反向函数,我将得到 92.86。我失去了精确度。
    • 不管怎样,我会使用 save() 和 load()
    【解决方案2】:

    您可以使用任何支持 16 位灰度图像的格式,例如 tiff 或 png,因为您的数据适合 16 位 (2^16-1=65535)。

    使用这些格式的好处当然是您可以使用其他程序来阅读它们。由于压缩伪影,您很可能不想使用 jpeg 格式。

    matlab 文档中关于 imwrite 的 png 格式是这样说的:

    默认情况下,imwrite 每个像素使用 8 位,如果图像是 double 或 uint8;如果图像是 uint16,则每像素 16 位;如果图像是逻辑的,则每像素 1 位。

    因此,如果您将数据存储为 uint16 就可以了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-04
      • 2019-08-12
      • 2018-12-05
      • 1970-01-01
      • 1970-01-01
      • 2014-05-20
      • 1970-01-01
      • 2014-11-17
      相关资源
      最近更新 更多