#matlab #octave #image-preprocessing #octave-gui
#matlab #октава #предварительная обработка изображения #октава-графический интерфейс
Вопрос:
У меня есть сохраненный набор данных Matlab .mat
, который я пытаюсь обработать в графическом интерфейсе Octave. Данные состоят из изображений, и я хочу сохранить их в формате JPG (или любом другом формате изображения), но у меня возникает это странное поведение при попытке отображения или записи изображений. так часть изображения отображается в виде массива:
91 90 91 88 93
88 91 86 81 88
93 100 90 85 91
93 100 94 93 96
87 87 87 87 89
Но когда я пишу изображение
imwrite(img, 'D:image_test_1.jpg')
и прочитайте это снова
img_read=imread('D:image_test_1.jpg')
В итоге я получаю это:
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
Я попытался найти причину, но не смог найти окончательного ответа или разъяснения по этой проблеме. Даже когда я использую imshow
для отображения изображения, я получаю пустое изображение.
Что случилось со всеми значениями пикселей?
Ответ №1:
Настройка в виде uint8
изображения
Чтобы указать, что это изображение использует 8-битный масштаб / формат, мы можем преобразовать массив в uint8()
(8-битное целое число без знака). Этот формат предполагает диапазон значений интенсивности от 0 до 255 (типичный формат JPG). Я думаю, что причина, по которой массив отображается как 1, заключается в том, что Octave пытается проанализировать массив как двойной в диапазоне от 0 до 1. Поэтому результаты массива достигают предела 1, поскольку все значения интенсивности Image
img
массива / находятся вне диапазона (превышены). В качестве альтернативы мы можем преобразовать массив в double с помощью im2double()
функции или увеличить исходный массив на 255.
Image = [91 90 91 88 93;
88 91 86 81 88;
93 100 90 85 91;
93 100 94 93 96;
87 87 87 87 89];
Image = uint8(Image);
imwrite(Image, 'D:image_test_1.jpg')
imshow(imread('D:image_test_1.jpg'),'InitialMagnification','fit');
Запускался с использованием MATLAB R2019b
Комментарии:
1. Это сработало! Большое спасибо за точный ответ!
2. Нет проблем, рад помочь.
3. еще один вопрос :). Я обнаружил, что могу указать качество изображения здесь octave.org/doc/v4.2.0/Loading-and-Saving-Images.html . но когда я устанавливаю значение качества, у меня возникает ошибка. У вас есть какие-либо идеи, почему? Спасибо
4. Это звучит как отдельный вопрос.
5. @salRad
imwrite(Image, 'D:image_test_1.jpg','Quality',20)
, похоже, работает для меня в MATLAB.