最近我使用MATLAB开始使用kinect。我采用uint16
格式的深度帧。但当我显示它或使用MATLAB命令保存它时,如:imshow
&分别为imwrite
,它显示的图像太暗。但是,当设置显示范围或以uint8
格式转换它时,它会变得更亮。但我希望将其保存为更明亮的格式,而不转换为uint8
格式,例如缩放0
到4500
之间的范围。
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]);
设置显示范围时:
不设置显示范围:
答案 0 :(得分:0)
16位图像中的值范围为0到65535。
如果我们看一下图像的直方图:
我们看到最大值是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