使用MATLAB保存kinect深度框架(uint16),但为什么它太暗了?

时间:2017-06-24 22:44:46

标签: matlab image-processing kinect kinect-v2

最近我使用MATLAB开始使用kinect。我采用uint16格式的深度帧。但当我显示它或使用MATLAB命令保存它时,如:imshow&分别为imwrite,它显示的图像太暗。但是,当设置显示范围或以uint8格式转换它时,它会变得更亮。但我希望将其保存为更明亮的格式,而不转换为uint8格式,例如缩放04500之间的范围。

vid = videoinput('kinect',1);
vid2 = videoinput('kinect',2);
vid.FramesPerTrigger = 1;
vid2.FramesPerTrigger = 1;
% % Set the trigger repeat for both devices to 200, in order to acquire 201 frames from both the color sensor and the depth sensor.
vid.TriggerRepeat = 200;
vid2.TriggerRepeat = 200;
% % Configure the camera for manual triggering for both sensors.
triggerconfig([vid vid2],'manual');
% % Start both video objects.
start([vid vid2]);
trigger([vid vid2])
[imgDepth, ts_depth, metaData_Depth] = getdata(vid2);
f=imgDepth;
figure,imshow(f);
figure,imshow(f,[0 4500]);
imwrite(f,'C:\Users\sufi\Desktop\matlab_kinect\Data_image\output\depth\fo.tiff');
stop([vid vid2]);

设置显示范围时:

When I set display range:

不设置显示范围:

Without setting display range:

2 个答案:

答案 0 :(得分:0)

16位图像中的值范围为0到65535。

如果我们看一下图像的直方图:

enter image description here

我们看到最大值是7995.但这只是一些异常值。大多数信息介于700到4300之间。

所以我们所有的价值都在我们价值范围的5-10%之内。这让它看起来很暗。

为了让它看起来更适合人类,我们必须将其标准化。 (某些图像查看器会自动执行此操作)。

因此,为了在您的功率点演示中获得更好的图像,您有两种选择。

a)在图像查看器中显示它,可以很好地显示它并拍摄屏幕截图

b)在matlab中规范化图像并将其保存到文件中。

您可以通过删除异常值来进一步改善图像。

答案 1 :(得分:0)

一种简单的方法是根据以下公式缩放图像:

    Pixel_value=Pixel_value/4500*65535

如果你想看到你从uint8获得的确切图像;我想以下步骤对您有用。

可能在将图像转换为uint8时,matlab首先将值高于某个阈值,让我们说4095=2**12-1(我不确定值)然后它会进行右移(在我们的情况下为4个班次)来制作它在0-255范围内。

所以我猜uint8的值乘以256并将其转换为uint16将帮助您获得相同的图像

        Pixel_uint16_value= Pixel_uint8_value*256 //or Pixel_uint16_value= Pixel_uint8_value<<8 
        //dont forget to cast the result as uint16