MATLAB imread() не может прочитать старые изображения?

#image #matlab #image-processing

#изображение #matlab #обработка изображений

Вопрос:

Итак, я столкнулся со странной проблемой с функцией MATLAB imread (), когда она не может прочитать старые изображения (в данном случае bmp с 2002 года). По сути, когда я передаю изображение в качестве аргумента imread(), оно распознает изображение как оттенки серого, даже если оно явно RGB.

Изображение является частью стандартного набора тестов, доступного для загрузки здесь. Я использую изображение ‘boy.bmp’.

 % In Downloads folder    
I_dl = imread('boy.bmp');
whos %to show current variables
  

ВЫВОД:

 Name                    Size                 Bytes  Class     Attributes
I_dl                  512x768               393216  uint8               
  

Размер изображения на самом деле составляет около 390 КБ, так что дело не в том, что в рабочую область каким-то образом загружается только один канал. Похоже, это связано с какой-то старой системой кодирования.

Я запустил imshow(), чтобы проверить изображение, и это был результат.

ВРЕМЕННОЕ РЕШЕНИЕ: я импортировал изображение в GIMP, сохранил его как xcf (собственный формат GIMP), а затем экспортировал его как bmp. Затем я сделал imread() и затем whos . Это работает.

 Name                    Size                 Bytes  Class     Attributes
I                     512x768x3            1179648  uint8               
  

Размер файла также увеличился до 1,2 МБ. Странно.

Кто-нибудь еще сталкивался с такой же проблемой?

С уважением.

Ответ №1:

boy.bmp содержит индексированное изображение. Вы должны загрузить и использовать матрицу цветовой карты:

 [I_dl,cmap] = imread('boy.bmp');
imshow(I_dl,cmap);
  

Комментарии:

1. Боже мой. Теперь я чувствую себя глупо. Спасибо!