2011-06-12 140 views
6

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

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

回答

8

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

使用这些格式的优点当然是您可以使用其他程序读取它们。由于压缩工件,您很可能不想使用jpeg格式。

这里是matlab的文件说,有关imwrite为PNG格式:

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

因此,如果您将数据存储为uint16,那么您已经很好了。

2

您可以使用命令save()和load()将矩阵直接存储到光盘。但是只有matlab才能读取它。这是最好的选择,因为你不会失去精确性。

如果您必须将值缩放到0..255,则不要线性缩放。您需要更高精度的近距离物体。因此,只需将以下函数应用于矩阵 ln(DepthImage - 49)​​ 25以获得大约0..255的值。现在保存图像,并在加载时应用反转功能。 以这种方式(使用lan函数),您的精度将受到损害较少

+0

非常感谢您的建议。使用ln函数进行缩放是个不错的建议。但是,考虑Depthimage = 100.然后ln(100-49)* 25 = 7.15。当数值7.15 7.15存储在矩阵中(作为图像)时,它变为7.00。如果我应用反向函数,我会得到92.86。我失去了精确度。 – John 2011-06-13 05:05:38

+0

无论如何,我将使用save()和load() – John 2011-06-13 05:13:08