Как экспортировать не размытые изображения в формате eps? - PullRequest
16 голосов
/ 07 июля 2011

Я экспортирую изображение в Matlab, используя формат eps, но оно сглаживает изображение.Matlab не размывает изображение, используя другие форматы, такие как png.Я хотел бы знать, как экспортировать не размытое изображение в формате EPS.Вот результирующее изображение с использованием png: enter image description here

А вот результирующее изображение с использованием eps: enter image description here

Ответы [ 10 ]

11 голосов
/ 08 июля 2011

ОБНОВЛЕНИЕ:

Проблема воспроизводима на Mac, и проблема связана с рендерером eps, а не с MATLAB.Например, сохранение imagesc(rand(20)) и просмотр с предварительным просмотром и GSview приводит к следующим результатам:

Предварительный просмотр скриншота

enter image description here

Скриншот GSview

enter image description here

Понятно, информация не потеряна.Это просто не интерпретируется / читается правильно некоторыми зрителями EPS.Решение простое: используйте GSview для просмотра изображений eps.Вы можете скачать его с здесь

Особенно на Mac, если ваше конечное приложение - latex / pdflatex, вам придется явно настроить его на использование GS / GSview, потому что в противном случае оно будет по умолчаниюк кварцевому движку, который встроен в ОС.


ПРЕДЫДУЩИЙ ОТВЕТ:

Я не могу воспроизвести описанное вами поведение.Вот код, который я использовал, протестированный с использованием 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

Возможно, это проблема с вашим средством просмотра EPS ...

5 голосов
/ 13 ноября 2013

не знаю, почему это работает, но вы можете попробовать сделать следующее:

eps2eps oldfile newfile

делает свое дело для меня (на Mac OS)

4 голосов
/ 07 июля 2011

Сначала я думал, что вы что-то делаете неправильно, но потом я вспомнил, что это была проблема, которая чертовски беспокоила меня год или около того назад. Я не мог придумать способ «исправить» это поведение, и из того, что я исследовал, это, скорее всего, ошибка, и у некоторых других тоже была эта проблема, и нет известного решения. Конечно, я могу ошибаться в последней части, и могут быть какие-то решения, которые вышли с тех пор, как я их искал.

В любом случае, я мог обойти эту проблему, используя 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 они не отображаются.

2 голосов
/ 14 ноября 2011

Если кто-то все еще заинтересован в обходном пути: откройте .eps-файл в текстовом редакторе и выполните поиск «интерполировать». Вы, вероятно, найдете «/ Interpolate true def» два или три раза. Замените «true» на «false» и будьте счастливы:)

1 голос
/ 04 марта 2016

Я тоже долго боролся с этой проблемой. Пока что GSView является единственным средством просмотра, которое, как я обнаружил, правильно отображает графики eps, созданные Matlab (R2015b). У меня не работает eps2eps (psutils 1.23). В конечном итоге у меня сработало следующее:

  1. Экспорт рисунка в pdf, следуя инструкциям здесь
  2. pdf2ps file.pdf file.eps
1 голос
/ 02 августа 2011

Примечание относительно ответа Йоды: в Preview в Mac OS X вы можете сделать так, чтобы тонкие белые диагональные линии поперек каждого из квадратов исчезли, сняв флажок «Сглаживание текста и экранных рисунков». Конечно, недостатком является то, что тогда любой текст (например, оси рисунков и т. Д.) Не является сглаженным. К сожалению, снятие отметки, которая не влияет на размытость, если вы используете imagesc.

Еще одно замечание: если вы используете предварительный просмотр для создания PDF-файла из вашего eps-файла, полученный PDF-файл по-прежнему будет отображаться правильно (без размытия) при его открытии в Acrobat.

0 голосов
/ 03 февраля 2018

Эта страница мне очень помогла: http://tech.mof -mof.co.jp / blog / machine-learning-octave.html (написано на японском языке, используйте для этого гугл-переводчик)

И это также полезно: Ошибка 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")

и в окне октав после ввода "systemgnuplot ", затем

set pm3d interpolate 2, 2

После сохранения файла откройте octave-cli.app и введите

imagesc(magic(3)), colorbar

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

enter image description here

0 голосов
/ 04 июля 2014

Я только что написал эту простую замену для 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');
0 голосов
/ 18 октября 2013

Применить opengl рендеринг к рисунку

figure(gcf);
set(gcf,'renderer','opengl');
0 голосов
/ 11 января 2012

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

im2 = imresize(im1, 8, 'nearest');

Затем размытие влияет только на пиксели на краюкаждого блока.Блоки 8x8 лучше всего подходят для сжатия без неприятных артефактов с использованием сжатия DCT (иногда используется в файлах eps).

...