Как экспортировать не размытые изображения в формате EPS?

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

И вот полученное изображение с использованием eps: введите здесь описание изображения


person Gorayni    schedule 07.07.2011    source источник


Ответы (10)


ОБНОВИТЬ:

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

Скриншот предварительного просмотра

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

Скриншот GSview

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

Ясно, что информация не теряется. Это просто неправильно интерпретируется/читается некоторыми зрителями 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')

а.png

a.png

б.эпс

b.eps

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

person Amro    schedule 07.07.2011
comment
Отличный ответ, но не могли бы вы объяснить, как explicitly set it to use GS/GSview для LaTeX? Я пробовал гуглить, но не нашел способа сделать это. Спасибо! - person Sibbs Gambling; 09.03.2015
comment
@SibbsGambling: я в основном пользователь Windows, часть ответа для Mac была отредактирована yoda в то время (который с тех пор изменил учетную запись на rm, если я не ошибаюсь)... Я предполагаю, что он имел в виду связать файлы PDF и EPS для открытия с помощью GSView по умолчанию вместо средства просмотра по умолчанию в OSX (которое, по-видимому, делает своего рода анти- псевдонимы, которые объясняют размытые изображения). В отличие от других приложений OSX (Preview, Keynote, ..), GSView, по-видимому, имеет собственный механизм рендеринга и, по-видимому, не использует тот, который предоставляется системой (Quartz). - person Amro; 10.03.2015
comment
Понимаю. Большое спасибо. Я нашел только вариант Ghostscript в Distiller. Это правильное место? Если это правильное место, то это странно, так как я уже поставил галочку Ghostscript и снял галочку Apple Distiller, но .eps все еще размыт. - person Sibbs Gambling; 10.03.2015
comment
@Amro В какой системе вы открывали файлы? Я думаю, что мне нужно иметь Ubuntu Linux с GSview в VirtualBox, только для предварительного просмотра файлов .eps в OS X El Capitan. - person Léo Léopold Hertz 준영; 21.03.2016
comment
@Masi, на самом деле я работаю в Windows, где использую любой из GSView, SumatraPDF или Evince для открытия файлов PostScript (они также поддерживают PDF). Ни один из них не показывает размытости. Возможно, вы можете установить Evince на OSX (я думаю, что он доступен как в доморощенном, так и в fink). Кстати, часть ответа для Mac - это не я :) - person Amro; 21.03.2016
comment
@Amro Я профилировал Эвинса с помощью своих тестовых сигналов. Он теряет данные при открытии файлов .eps. Есть ли у вас дополнительные рекомендации для зрителей .eps? - person Léo Léopold Hertz 준영; 21.03.2016
comment
@Masi, вы пробовали версию GSView для Mac, как предполагалось изначально (в качестве бэкэнда используется ghostscript)? - person Amro; 21.03.2016
comment
@Amro Нет. У них отключены серверы, поэтому я не могу загрузить их изображения. Вместо этого я установил Ubuntu Linux в VirtualBox, где я использую gv напрямую. Мне нужно иметь несколько тестов, чтобы я мог оценить качество каждого зрителя. Я пытаюсь получить стандартный встроенный образ GSView, работающий, когда они размещены для OS X. - person Léo Léopold Hertz 준영; 21.03.2016

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

eps2eps oldfile newfile

помогает мне (на Mac OS)

person avigoz    schedule 13.11.2013
comment
Для меня это работает и в Mac OS X. (Все другие подходы не помогли.) - person Piotr Migdal; 10.12.2013
comment
Какая у вас версия psutils? Здесь сообщается, что не работает с 1.23 stackoverflow.com/a/35793889/54964 - person Léo Léopold Hertz 준영; 21.03.2016

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

В любом случае, мой обходной путь этой проблемы состоял в том, чтобы использовать pcolor с shading flat вместо imagesc. Когда вы экспортируете это в формат eps, изображение сохраняется правильно. Пример:

pcolor(rand(20));
shading flat
print('-depsc','figure.eps')

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

ПРИМЕЧАНИЕ. Вы можете увидеть появление тонких тусклых белых линий вдоль антидиагоналей каждого маленького квадрата (зависит от ОС и программы просмотра). Это края графических примитивов, которые используются для рендеринга изображения. Однако это не недостаток экспорта MATLAB, а скорее недостаток рендеринга в вашей программе просмотра EPS/PDF. Например, с настройками по умолчанию в Preview на моем Mac эти строки отображаются, тогда как с настройками по умолчанию в Adobe Reader 9.4 они не отображаются.

person abcd    schedule 07.07.2011
comment
Это работает отлично! При использовании epstopdf преобразования LaTeX не появляются слабые белые линии. Большое спасибо! - person Jean-Paul; 03.06.2015

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

person Tim    schedule 14.11.2011
comment
Это работает? Я думал, что pdfkit на Mac не учитывает параметр Interpolate? Кроме того, в моем EPS, сгенерированном в Matlab, я не нахожу линию интерполяции. Можно подробнее, куда его вставлять? - person robince; 26.04.2012
comment
Я не нашел Interpolate в своем eps - person codekitty; 10.04.2015
comment
/Interpolate true — это PDF, а не EPS. - person arcticmac; 05.04.2016

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

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

person carmel    schedule 01.08.2011
comment
Очень интересное уведомление! Как снять флажок Сглаживание текста и рисунков на экране в настройках предварительного просмотра? Я не могу найти его в Эль-Капитане. У вас есть представление о том, как выглядят белые диагональные линии? Мне очень интересно посмотреть на их внешний вид. Я открыл новую ветку о вашей претензии здесь apple.stackexchange.com/q/231745/15504 - person Léo Léopold Hertz 준영; 21.03.2016

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

  1. Экспортируйте рисунок в pdf, следуя инструкциям здесь
  2. pdf2ps файл.pdf файл.eps
person Johannes    schedule 04.03.2016
comment
Пожалуйста, не используйте saveas. Это очень глючит в Matlab 2016a. Команда export_fig намного надежнее mathworks.com/matlabcentral/fileexchange/23629-export. -рис - person Léo Léopold Hertz 준영; 09.07.2016

Я только что написал эту простую замену для 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');
person marton78    schedule 04.07.2014
comment
Не могли бы вы описать, что делает ваш код? Пример вывода также был бы отличным. - person Léo Léopold Hertz 준영; 21.03.2016

Примените средство визуализации opengl к фигуре.

figure(gcf);
set(gcf,'renderer','opengl');
person user1165814    schedule 18.10.2013
comment
Вы должны подробнее описать, почему это работает. Или что все это значит. - person pippin1289; 18.10.2013
comment
Это работает только потому, что, изменив средство визуализации на opengl, он сохраняет его как растровый EPS, а не как настоящую векторную графику. - person Suever; 18.08.2016

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

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

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

person user664303    schedule 11.01.2012

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

И это также полезно: Ошибка Gnuplot-AquaTerm: установить терминальное расширенное название Aqua Рисунок 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")

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

set pm3d interpolate 2, 2

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

imagesc(magic(3)), colorbar

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

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

person peketamin    schedule 03.02.2018