在Matlab中保存Kinect深度图像?

6
通过使用Kinect,我可以获得深度图像,其中每个深度图像像素存储相机和物体之间的距离(以毫米为单位)。现在我想将它们保存下来以便以后使用。最好的建议是什么?
我考虑将深度图像保存为图像(jpg / png等)。然而,该值通常从50毫米到10000毫米,而普通图像元素只能存储0-255。然后,我将需要将数据缩放到0-255范围内,这可能会某种程度上削弱数据的价值。
2个回答

8
您可以使用任何支持16位灰度图像的格式,如tiff或png,因为您的数据将适合于16位(2^16-1=65535)。
使用这些格式的优点当然是您将能够使用另一个程序读取它们。由于压缩伪影,您很可能不想使用jpeg格式。
这是matlab文档关于png格式的imwrite的说明:
默认情况下,如果图像为double或uint8,则imwrite使用每像素8位;如果图像为uint16,则使用每像素16位;如果图像为逻辑值,则使用每像素1位。
因此,如果您已将数据存储为uint16,则已经很好了。

2
您可以使用save()和load()命令将矩阵直接存储到磁盘中,但这样只有Matlab才能读取它。这是最好的选择,因为您不会失去精度。
如果必须将值缩放到0..255,则不要进行线性缩放。您需要更高的精度以获得更接近的对象。所以只需将以下函数应用于矩阵ln(DepthImage-49)*25,以获得大约0..255的值。现在保存图像,加载时应用相反的函数。 通过使用lan函数,您的精度将受到较小的损害。

非常感谢您的建议。使用ln函数进行缩放是一个不错的建议。但是,考虑到Depthimage = 100。那么ln(100-49)*25 = 7.15。当值7.15被存储在矩阵中(作为图像),它变成了7.00。如果我应用反向函数,我将得到92.86。我失去了精度。 - John
无论如何,我将使用save()和load()。 - John

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接