16

我正在使用 eps 格式在 Matlab 中导出图像,但它会平滑图像。Matlab 不会使用 png 等其他格式对图像进行模糊处理。我想知道如何以 eps 格式导出非模糊图像。这是使用 png 生成的图像: 在此处输入图像描述

这是使用 eps 生成的图像: 在此处输入图像描述

4

10 回答 10

11

更新:

这个问题在 Mac 上是可重现的,问题在于 eps 渲染器而不是 MATLAB。例如,imagesc(rand(20))使用 Preview 和 GSview 保存和查看会导致以下结果:

预览截图

在此处输入图像描述

GSview 截图

在此处输入图像描述

显然,信息没有丢失。它只是没有被一些 EPS 查看器正确解释/读取。解决方案很简单:使用 GSview 查看您的eps图像。你可以从这里下载

特别是在 Mac 上,如果您的最终应用程序是 latex/pdflatex,则必须明确将其设置为使用 GS/GSview,否则,它将默认使用嵌入操作系统的 Quartz 引擎。


以前的答案:

我无法重现您描述的行为。这是我使用的代码,在 WinXP 32 位上使用 R2010b 进行了测试:

M = fspecial('gaussian',[20 20],5);
imagesc(M)
print('-dpng','a.png')
print('-depsc2','b.eps')

一个.png

一个.png

b.eps

b.eps

也许这是您的 EPS 查看器的问题...

于 2011-07-07T21:46:48.533 回答
5

不确定它为什么起作用,但您可以尝试执行以下操作:

eps2eps oldfile newfile

对我有用(在mac os上)

于 2013-11-13T14:18:28.987 回答
4

起初我以为你做错了什么,但后来我记得这是一个问题,大约一年前困扰着我。我想不出一种方法来“修复”这种行为,根据我的研究,这很可能是一个错误,其他几个人也遇到了这个问题,并且没有已知的解决方案。当然,我对最后一部分的看法可能是错误的,并且自从我寻找它们以来可能已经出现了一些解决方案。

无论如何,我的解决方法是使用pcolorwithshading flat而不是imagesc. 当您将其导出为eps格式时,它会正确保留图像。例子:

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

在此处输入图像描述

注意:可能会看到沿每个小方块的对角线出现的细而微弱的白线(取决于操作系统和查看器)。这些是用于渲染图像的图形基元的边缘。但是,这不是MATLAB 导出中的缺陷,而是在您的 EPS/PDF 查看器中呈现的错误。例如,在我的 Mac 上使用 Preview 中的默认设置时,这些行会显示出来,而在 Adob​​e Reader 9.4 中使用默认设置时,它们不会出现。

于 2011-07-07T17:33:23.683 回答
2

如果有人仍然对解决方法感兴趣:使用文本编辑器打开 .eps 文件并搜索“interpolate”。您可能会发现“/Interpolate true def”两到三遍。用“假”代替“真”,开心就好:)

于 2011-11-14T13:26:31.973 回答
1

关于 Yoda 回答的注释:在 Mac OS X 中的预览中,您可以通过取消选中“抗锯齿文本和屏幕艺术”使每个正方形上的细白色对角线消失。当然,缺点是任何文本(例如图形轴等)都没有抗锯齿。不幸的是,如果您使用的是 imagesc,则取消选中对模糊没有影响。

另一个注意事项是,如果您使用预览从您的 eps 制作 pdf,当您在 Acrobat 中打开它时,生成的 pdf 仍然正确显示(不模糊)。

于 2011-08-01T23:31:20.763 回答
1

我也一直在努力解决这个问题。到目前为止,GSView 是我发现的唯一可以正确显示 Matlab (R2015b) 生成的 eps 数字的查看器。eps2eps 对我不起作用(psutils 1.23)。以下最终对我有用:

  1. 按照此处的说明将图形导出为 pdf
  2. pdf2ps 文件.pdf 文件.eps
于 2016-03-04T10:38:58.663 回答
0

模糊实际上取决于您的查看器应用程序或打印机使用的渲染软件。为了始终获得良好的效果,请将图像中的每个像素设置为 8x8 相同颜色的像素块,即像这样调整图像大小:

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

然后,模糊只影响每个块边缘的像素。8x8 块是最好的,因为它们使用 DCT 压缩(有时在 eps 文件中使用)进行压缩而没有令人讨厌的伪影。

于 2012-01-11T16:15:52.363 回答
0

opengl渲染器应用于图形

figure(gcf);
set(gcf,'renderer','opengl');
于 2013-10-18T01:28:30.743 回答
0

我刚刚为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');
于 2014-07-04T13:31:29.700 回答
0

这个页面对我帮助很大: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")

并在 octave 窗口中,键入“system gnuplot”后,然后

set pm3d interpolate 2, 2

保存文件后,打开 octave-cli.app,然后输入

imagesc(magic(3)), colorbar

我懂了。

在此处输入图像描述

于 2018-02-03T06:42:27.260 回答