Как экспортировать не размытые изображения 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

Я получил это.

введите описание изображения здесь