#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
опцию для настройки цветового канала изображения:
Лучшим вариантом было бы выводить данные с использованием формата сжатия без потерь, такого как png.
(Спасибо странице Википедии о сжатии с потерями за цветное изображение идеального размера, с которым можно работать.)
Комментарии:
1. Спасибо за ответ. Я немного смущен здесь, так как я хочу использовать функцию imwrite в скрипте Matlab для сохранения серого изображения в формате jpeg. Есть ли какой-либо эквивалент jpegtrans в Matlab?