2011-06-12 123 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