сохранение серых изображений в формате JPEG с помощью Matlab imwrite

#matlab #image-processing #jpeg

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

Вопрос:

Я новичок в мире обработки изображений и хотел бы обратиться за помощью в решении проблемы, которую я не смог выяснить. Проблема заключается в следующем:

У меня есть серое (черно-белое) изображение «grayimage», которое я хочу сохранить с помощью imwrite функции в Matlab с использованием формата JPEG. Я использую следующий синтаксис:

 imwrite(grayimage,cmap, 'imagename.jpg', 'jpeg');
 

Теперь, когда я открываю файл изображения imagename.jpg используя средства просмотра изображений, я не вижу серого изображения. Это цветное изображение, отличное от желаемого.

Может кто-нибудь подсказать, что я делаю неправильно, и какие параметры / параметры мне не хватает imwrite ?

Я подумал о преобразовании изображения в RGB, а затем сохранить его в формате jpeg. Поможет ли это?

Ответ №1:

Откуда берется ваш cmap? Вероятно, это «цветная» цветовая карта. Попробуйте использовать серую цветовую карту:

 cmap = colormap('gray');
imwrite(grayimage,cmap, 'imagename.jpg', 'jpeg');
 

Дополнительная информация о colormap: http://www.mathworks.se/help/techdoc/ref/colormap.html

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

1. Большое спасибо, и это работает как шарм. Я думаю, что я использовал цветовую карту по умолчанию, которая создавала проблему. При добавлении строки cmap = colormap(‘gray’) цветовая карта серого цвета устанавливается правильно.

2. Теперь, пожалуйста, покажите мне несколько больших пальцев 🙂

3. Пожалуйста, примите этот ответ, если он помог вам решить вашу проблему . Это даст четкое указание на то, что на этот вопрос был дан удовлетворительный ответ, предоставит будущим посетителям индикатор того, какой ответ сработал (если таковой имеется), и даст немного дополнительной репутации тому, у кого есть ответ, в качестве стимула продолжать отвечать на вопросы. Спасибо!

Ответ №2:

мне кажется, у вас есть индексированное изображение с соответствующей цветовой картой. Вы можете использовать функцию IND2GRAY для преобразования его в изображение в оттенках серого перед сохранением на диск с помощью IMWRITE:

 I = ind2gray(grayimage,cmap);
imwrite(I,'imagename.jpg');
 

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

1. Амро, мое изображение не в индексном формате, а хранится в файле jpeg. Я считываю это серое изображение из файла jpeg, выполняю фильтрацию по этому серому изображению и хотел бы сохранить полученное на выходе серое изображение после фильтрации в формате jpeg. Я могу правильно видеть выходное изображение в imshow, но когда я сохраняю его с помощью imwrite в формате jpeg, я вижу своего рода цветное изображение в программе просмотра изображений. Какие-либо указания?

2. @Shan: ваш вопрос немного сбивает с толку и не содержит информации; Вы говорите, что ваше изображение не является индексированным изображением, но все же вы используете какую-то цветовую карту… Сначала вы должны понять, какие типы изображений поддерживаются (двоичные, индексированные, оттенки серого, truecolor).

Ответ №3:

Добро пожаловать в мир сжатия с потерями.

Если вам просто нужен jpeg в оттенках серого, вероятно, проще всего было бы установить jpegtrans программу и использовать ее -grayscale опцию для настройки цветового канала изображения:

цветной jpeg
преобразовано в оттенки серого с помощью jpegtrans

Лучшим вариантом было бы выводить данные с использованием формата сжатия без потерь, такого как png.

(Спасибо странице Википедии о сжатии с потерями за цветное изображение идеального размера, с которым можно работать.)

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

1. Спасибо за ответ. Я немного смущен здесь, так как я хочу использовать функцию imwrite в скрипте Matlab для сохранения серого изображения в формате jpeg. Есть ли какой-либо эквивалент jpegtrans в Matlab?