0

最近我使用 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]);

当我设置显示范围时:

当我设置显示范围时:

不设置显示范围:

不设置显示范围:

4

2 回答 2

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
于 2017-06-26T12:14:05.037 回答
0

16bit 图像的取值范围为 0 到 65535。

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

在此处输入图像描述

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

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

为了使它对人类看起来更好,我们必须对其进行规范化。(一些图像查看器会自动执行此操作)。

因此,为了在您的 power point 演示文稿中获得更好的图像,您有两种选择。

a)将其显示在可以很好地显示并截取屏幕截图的图像查看器中

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

您可以通过在标准化之前移除这些异常值来进一步改善图像。

于 2017-06-25T11:08:35.770 回答