Как экспортировать не размытые изображения eps?
Я экспортирую изображение в Matlab, используя формат eps, но он сглаживает изображение. Matlab не размывает изображение, используя другие форматы, такие как png. Я хотел бы знать, как экспортировать не-размытое изображение с форматом eps. Вот результирующее изображение с использованием png:
![enter image description here]()
И вот результирующее изображение с использованием eps:
![enter image description here]()
Ответы
Ответ 1
UPDATE:
Проблема воспроизводится на Mac, и проблема связана с рендерером eps, а не с MATLAB. Например, сохранение imagesc(rand(20))
и просмотр с помощью Preview и GSview результатов в следующем:
Предварительный снимок экрана
![enter image description here]()
Снимок GSview
![enter image description here]()
Очевидно, что информация не потеряна. Это просто не интерпретируется/читается правильно некоторыми пользователями EPS. Решение прост: используйте GSview для просмотра изображений eps
. Вы можете скачать его из здесь
В частности, для Mac, если ваше конечное приложение - латекс /pdflatex, вам нужно будет явно установить его для использования GS/GSview, потому что в противном случае он по умолчанию будет работать с процессором Quartz, который запекается в ОС.
ПРЕДЫДУЩИЙ ОТВЕТ:
Я не могу воспроизвести описанное вами поведение. Вот код, который я использовал, проверенный с помощью R2010b на 32-битной WinXP:
M = fspecial('gaussian',[20 20],5);
imagesc(M)
print('-dpng','a.png')
print('-depsc2','b.eps')
a.png
![a.png]()
b.eps
![b.eps]()
Возможно, это проблема с вашим веб-браузером...
Ответ 2
не уверен, почему он работает, но вы можете попробовать сделать следующее:
eps2eps oldfile newfile
делает трюк для меня (на mac os)
Ответ 3
Сначала я думал, что вы делаете что-то неправильно, но потом я вспомнил, что это была проблема, которая беспокоила меня из года в год. Я не мог придумать способ "исправить" это поведение и из того, что я исследовал, это, скорее всего, ошибка, и некоторые другие тоже столкнулись с этой проблемой, и нет известного решения. Конечно, я мог ошибаться в отношении последней части, и там могут быть решения, которые появились с тех пор, как я их искал.
В любом случае, моим решением этой проблемы было использование pcolor
с shading flat
вместо imagesc
. Когда вы экспортируете это в формат eps
, он сохраняет изображение правильно. Пример:
pcolor(rand(20));
shading flat
print('-depsc','figure.eps')
![enter image description here]()
ПРИМЕЧАНИЕ.. Вы можете видеть появление тонких, слабых белых линий вдоль антидиагоналей каждого маленького квадрата (зависит от ОС и зрителя). Это грани графических примитивов, которые используются для рендеринга изображения. Однако это не недостаток в экспорте MATLAB, а скорее ошибка в рендеринге в вашем средстве просмотра EPS/PDF. Например, с настройками по умолчанию в Preview на моем mac, эти строки отображаются, тогда как по умолчанию в Adobe Reader 9.4 они не отображаются.
Ответ 4
Если кому-то все еще интересно обходное решение: откройте файл .eps с текстовым редактором и найдите "интерполировать". Вероятно, вы найдете "/Interpolate true def" два или три раза. Замените "true" на "false" и будьте счастливы:)
Ответ 5
Замечание относительно ответа Йоды: в режиме предварительного просмотра в Mac OS X вы можете сделать тонкие белые диагональные линии по каждому квадрату исчезающими, сняв флажок "Anti-alias text and screen art". Конечно, недостатком является то, что любой текст (например, оси фигуры и т.д.) Не сглаживается. К сожалению, снятие флажка не влияет на размытость, если вы используете imagesc.
Еще одно замечание: если вы используете предварительный просмотр, чтобы сделать pdf файл из вашего eps, полученный pdf файл будет отображаться правильно (не размытым), когда вы откроете его в Acrobat.
Ответ 6
Я тоже долго боролся с этой проблемой. Пока что GSView - единственный зритель, который я нашел, который правильно отображает цифры eps, созданные Matlab (R2015b). eps2eps не работал у меня (psutils 1.23).
В конечном итоге работала для меня:
- Экспортируйте рисунок в pdf, следуя инструкциям здесь
- pdf2ps file.pdf file.eps
Ответ 7
Размытие фактически зависит от программного обеспечения рендеринга, которое использует ваше приложение-зритель или принтер. Чтобы получить хорошие результаты все время, сделайте каждый пиксель в своем изображении блоком 8x8 пикселей одного цвета, то есть измените размер изображения следующим образом:
im2 = imresize(im1, 8, 'nearest');
Размытие затем влияет только на пиксели на краю каждого блока. 8x8 лучше, поскольку они сжимают без неприятных артефактов, используя сжатие DCT (иногда используется в файлах eps).
Ответ 8
Применить рендеринга opengl к фигуре
figure(gcf);
set(gcf,'renderer','opengl');
Ответ 9
Я просто написал эту простую замену для imagesc
. Он не поддерживает все, кроме самых основных функций, но я все еще надеюсь, что это поможет.
function h = imagesc4pdf(C)
[ny nx] = size(C);
px = bsxfun(@plus, [-0.5; 0.5; 0.5; -0.5], reshape(1:nx, [1 1 nx]));
py = bsxfun(@plus, [-0.5; -0.5; 0.5; 0.5], 1:ny);
n = numel(C);
px = reshape(repmat(px, [1 ny 1]), 4, n);
py = reshape(repmat(py, [1 1 nx]), 4, n);
h = patch(px, py, reshape(C,1,n), 'linestyle', 'none');
xlim([.5 nx+.5]);
ylim([.5 ny+.5]);
set(gca, 'ydir', 'reverse');
Ответ 10
Эта страница мне очень помогла: http://tech.mof-mof.co.jp/blog/machine-learning-octave.html (написано на японском языке, используйте для этого перевод Google)
И это также полезно: Ошибка Octave-Gnuplot-AquaTerm: установить заголовок с расширенным расширением терминалов "Рисунок 1" ... неизвестный тип терминала"
Я также ответил на https://www.coursera.org/learn/machine-learning/discussions/weeks/2/threads/Dh-aRfqSEeaHSQ6l4xnh6g.
Я переустановил gnuplot следующим образом:
$ brew cask install xquartz
$ brew cask install aquaterm
$ brew uninstall gnuplot
$ brew install gnuplot --with-aquaterm --with-x11 --with-qt # you can show other options by `$ brew options gnuplot`
Вы можете редактировать ~/.octaverc следующим образом:
setenv("GNUTERM", "qt")
и в октавом окне, после ввода "системного gnuplot", затем
set pm3d interpolate 2, 2
После сохранения файла откройте файл octave-cli.app и введите
imagesc(magic(3)), colorbar
Я получил это.
![введите описание изображения здесь]()