читать и показывать необработанное изображение глубины в Matlab - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть набор изображений глубиной .raw.Формат изображения 500X290 с 32 байтами на пиксель.Когда я открываю их с помощью средства просмотра изображений IrfanView, я правильно вижу изображение глубины следующим образом: отображаемое изображение в IrfanView

Теперь я хочу прочитать и отобразить изображение той же глубины в Matlab.Мне это нравится:

 FID=fopen('depthImage.raw','r');
 DepthImage = fread(FID,[290,500],'bit32');
 fclose(FID);
 colormap winter;
 imshow(DepthImage);

DepthImage - двойная матрица типа 290X500.то, что я получаю из этого кода, это изображение: отображаемое изображение в программе просмотра Matlab

, когда я изменяю параметр fread с 'bit32' на 'bit24', я получаю это: отображаемое изображение вMatlab с битами 24

Я предполагаю, что каждый элемент в DepthImage содержит 32 бита, где каждые 8 ​​бит соответствуют значениям R, G, B и D.но как я могу правильно прочитать изображение и отобразить его, как в IrfanView?

необработанный файл: https://drive.google.com/file/d/1aHcRmMKvi5gtodahR5l_Dx8SbK_920c5/view?usp=sharing

1 Ответ

0 голосов
/ 27 декабря 2018

Может быть проблема с заголовком метаданных изображения, например, «дата и время снимка», «тип камеры».Откройте ваше изображение с помощью notepad ++, чтобы проверить «дату и время».Если вы загрузите исходное исходное изображение, вам будет проще попробовать.

Upd: Хорошо, это что-то.Проверьте, поможет ли это

 FID=fopen('camera00000000000014167000.raw','r');
 DepthImage = fread(FID,290*500*4,'int8');
 DepthImageR = DepthImage(1:4:end);
 DepthImageG = DepthImage(2:4:end);
 DepthImageB = DepthImage(3:4:end);
 DepthImageD = DepthImage(4:4:end);

 dataR = reshape(DepthImageR, 500,290);
 dataG = reshape(DepthImageG, 500,290);
 dataB = reshape(DepthImageB, 500,290);
 dataD = reshape(DepthImageD, 500,290); % all equal to 64 - useless

 figure()
 subplot(2,2,1)
 image(dataR)
 subplot(2,2,2)
 image(dataG)
 subplot(2,2,3)
 image(dataB)
 subplot(2,2,4)

 data = zeros(500,290,3);
 data(:,:,1) = dataR;
 data(:,:,2) = dataG;
 data(:,:,3) = dataB;

 image(data)
...