我正在使用 eps 格式在 Matlab 中导出图像,但它会平滑图像。Matlab 不会使用 png 等其他格式对图像进行模糊处理。我想知道如何以 eps 格式导出非模糊图像。这是使用 png 生成的图像:
这是使用 eps 生成的图像:
我正在使用 eps 格式在 Matlab 中导出图像,但它会平滑图像。Matlab 不会使用 png 等其他格式对图像进行模糊处理。我想知道如何以 eps 格式导出非模糊图像。这是使用 png 生成的图像:
这是使用 eps 生成的图像:
这个问题在 Mac 上是可重现的,问题在于 eps 渲染器而不是 MATLAB。例如,imagesc(rand(20))
使用 Preview 和 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')
也许这是您的 EPS 查看器的问题...
不确定它为什么起作用,但您可以尝试执行以下操作:
eps2eps oldfile newfile
对我有用(在mac os上)
起初我以为你做错了什么,但后来我记得这是一个问题,大约一年前困扰着我。我想不出一种方法来“修复”这种行为,根据我的研究,这很可能是一个错误,其他几个人也遇到了这个问题,并且没有已知的解决方案。当然,我对最后一部分的看法可能是错误的,并且自从我寻找它们以来可能已经出现了一些解决方案。
无论如何,我的解决方法是使用pcolor
withshading flat
而不是imagesc
. 当您将其导出为eps
格式时,它会正确保留图像。例子:
pcolor(rand(20));
shading flat
print('-depsc','figure.eps')
注意:您可能会看到沿每个小方块的对角线出现的细而微弱的白线(取决于操作系统和查看器)。这些是用于渲染图像的图形基元的边缘。但是,这不是MATLAB 导出中的缺陷,而是在您的 EPS/PDF 查看器中呈现的错误。例如,在我的 Mac 上使用 Preview 中的默认设置时,这些行会显示出来,而在 Adobe Reader 9.4 中使用默认设置时,它们不会出现。
如果有人仍然对解决方法感兴趣:使用文本编辑器打开 .eps 文件并搜索“interpolate”。您可能会发现“/Interpolate true def”两到三遍。用“假”代替“真”,开心就好:)
关于 Yoda 回答的注释:在 Mac OS X 中的预览中,您可以通过取消选中“抗锯齿文本和屏幕艺术”使每个正方形上的细白色对角线消失。当然,缺点是任何文本(例如图形轴等)都没有抗锯齿。不幸的是,如果您使用的是 imagesc,则取消选中对模糊没有影响。
另一个注意事项是,如果您使用预览从您的 eps 制作 pdf,当您在 Acrobat 中打开它时,生成的 pdf 仍然正确显示(不模糊)。
我也一直在努力解决这个问题。到目前为止,GSView 是我发现的唯一可以正确显示 Matlab (R2015b) 生成的 eps 数字的查看器。eps2eps 对我不起作用(psutils 1.23)。以下最终对我有用:
模糊实际上取决于您的查看器应用程序或打印机使用的渲染软件。为了始终获得良好的效果,请将图像中的每个像素设置为 8x8 相同颜色的像素块,即像这样调整图像大小:
im2 = imresize(im1, 8, 'nearest');
然后,模糊只影响每个块边缘的像素。8x8 块是最好的,因为它们使用 DCT 压缩(有时在 eps 文件中使用)进行压缩而没有令人讨厌的伪影。
将opengl渲染器应用于图形
figure(gcf);
set(gcf,'renderer','opengl');
我刚刚为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');
这个页面对我帮助很大: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
我懂了。