MATLAB imread () неправильная шкала серого - PullRequest
1 голос
/ 26 марта 2020

Я сделал простое изображение в градациях серого с краской. net:

image I drew

Затем я просто прочитал изображение с помощью MATLAB imread () и получил что-то вроде этого (то же самое для Octave):

enter image description here

Я проверил фоновое значение, и оно равно 55 вместо 255.

I затем попытался сделать то же самое в Python, используя pyplot.imread () и получить ожидаемый результат:

enter image description here

Я видел это пару раз, даже когда я читал что-то вроде Лены в MATLAB - серая шкала была полностью испорчена. Кто-нибудь знает, что не так с imread в MATLAB (и Octave)?

1 Ответ

1 голос
/ 27 марта 2020

Ваше изображение PNG является изображением RGB, а не изображением серого цвета. Он был сохранен как индексированное изображение, то есть 56 различных значений RGB были сохранены в таблице, и изображение ссылается на эти значения RGB, указав индекс для каждого пикселя.

Изображение, которое вы видите, состоит из индексы в таблицу цветов, а не фактические сохраненные значения RGB.

Вам необходимо прочитать и индексы, и карту цветов следующим образом:

[img,cm] = imread('https://i.stack.imgur.com/rke2o.png');

Далее вы можете восстановить исходный RGB изображения, используя ind2rgb, или, если вы ищете изображение в оттенках серого, вы можете восстановить значения серого, используя ind2gray:

img = ind2gray(img,cm);
...