2013-06-20 2 views
2

Я очень новичок в Matlab, хотя знаю несколько других языков программирования, поэтому, пожалуйста, простите меня, если это что-то простое. Я не смог найти ответы на это, либо на StackOverflow, либо в другом месте.Matlab imwrite() качество

производит фигуру, используя следующий код:

figure(6),imageplot(P); drawnow; 

который выглядит следующим образом: enter image description here

Я тогда сохранить это изображение на компьютер, используя следующие команды:

imwrite(P, 'images/plot.png'); 

И полученное изображение является крошечным, и отсутствует некоторая информация о цвете:

enter image description here

Если, однако, я использую функцию сохранения на открытой фигуре (изображение # 1) и сохраняю ее вручную, я получаю именно то, что хочу, это точное изображение, хранящееся на моем компьютере.

enter image description here

Как запрограммировать это? Я предположил, что imwrite() просто напишет изображение напрямую, но, видимо, я делаю что-то неправильно. Любой совет? Возможно, это как-то связано с командой imageplot? Кажется, я не могу так работать.

Обновление: основываясь на приведенных ниже комментариях, я начал использовать «imresize» с «ближайшей» опцией. Это правильно масштабирует изображение, но в результате изображение все еще выглядит более темным (и, следовательно, имеет меньше информации), чем если бы я нажал кнопку «Сохранить» на рисунке.

Изображение сохраняется из рисунка:

enter image description here

изображений с использованием "imresize" с "ближайшим" вариантом:

enter image description here

ответ

2

Команда, необходимая для функции «Сохранить как ...» цифр, называется «печать». Я часто использую

print(gcf, '-dpng', 'some_filename.png') 

или

print(gcf, '-depsc', 'some_filename.eps','-r0') 

, чтобы сохранить фигуру, как показано на экране. Формат png предлагает небольшой размер файла и отличное качество, и это понимают большинство зрителей и браузеров изображений. Формат eps - это векторный формат, который я использую для печати. Параметр «-r0» указывает «использовать тот же размер, который задается разрешением экрана» для свойств векторного формата.

+0

Как вы предлагаете мне объединить мой код с функцией print()? Как указано в моем вопросе, я могу просмотреть изображение, которое я хочу, используя imageplot (P). Использование print (P, '-dpng', 'filename.png') приводит к ошибке: «Ввод ручки должен быть скалярным, векторным или клеточным массивом векторов». Я также попытался использовать print (imageplot (P), '- dpng', 'filename.png'), пытаясь напечатать то, что я показываю, но это приводит к ошибке «Слишком много выходных аргументов». – Jake

+1

Вам нужно использовать печать на фигурной ручке - после того, как вы построили матрицу P, 'gcf' вернет текущий фигурный дескриптор, как Martin J.H. использует. Вы также можете использовать 'f = figure; imageplot (Р); печать (е, ...); '. –

+0

Там мы идем. Совершенство. Спасибо огромное! – Jake

3

Команда MATLAB imwrite сохраняет именно количество пикселей, как указано в вашей матрице изображений. Это фактический результат ваших вычислений; причина, по которой выход «крошечный», является тем, что он должен быть. Чтобы сделать его более крупным, было бы просто масштабировать/масштабировать его по мере необходимости.

Опция save figure однако делает что-то совсем другое: она растеризует вывод, который вы получаете в окне рисунка, и дает вам возможность сохранить его как изображение. Это видно из того факта, что когда вы делаете это, вы получаете белый фон в дополнение к вашему результату, который на самом деле является только серым фоном, который вы видите перед тем, как сохранить его; это можно отрегулировать, изменив размер окна фигуры перед использованием опции сохранения.

Если вы хотите просто увеличить размер вывода, я бы рекомендовал использовать что-то вдоль строк команды imresize.

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

imresize(P, 2.0); 

Для получения дополнительных возможностей, попробуйте help imresize.

+0

Это действительно изменяет размер изображения, но, похоже, использует ранее растрированную версию и просто делает ее более крупной. Так, например, запуск imwrite (imresize (P, 2.0), имя файла); просто растягивает изображение до двух размеров - оно больше, но чрезвычайно размыто и по-прежнему отсутствует часть информации о цвете от исходного рисунка. – Jake

+1

Используйте параметр '' ближайший'' 'imresize', чтобы остановить интерполяцию (и, следовательно, размытие). – wakjah

+0

Пожалуйста, посмотрите мое обновление - с помощью ближайших работ, но это все еще не совсем то, что я хочу, потому что, хотя масштабирование работает сейчас, оно значительно темнее. – Jake