我正在使用eps格式在Matlab中导出图像,但它会使图像平滑。 Matlab不会使用其他格式(如png)模糊图像。我想知道如何使用eps格式导出非模糊图像。这是使用png生成的图像:
这是使用eps生成的图像:
答案 0 :(得分:11)
问题在Mac上是可重现的,问题在于eps渲染器而不是MATLAB。例如,保存imagesc(rand(20))
并使用预览和GSview查看结果如下:
显然,信息不会丢失。某些EPS查看器无法正确解释/读取。解决方案很简单:使用GSview查看您的
eps
图像。您可以从here 下载
特别是在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浏览器的问题......
答案 1 :(得分:5)
不确定为什么会有效,但您可以尝试执行以下操作:
eps2eps oldfile newfile
为我做了伎俩(在mac os上)
答案 2 :(得分:4)
起初我以为你做错了什么,但后来我记得这是一个困扰我一年多前的问题。我无法想出一种“修复”这种行为的方法,而且从我研究的内容来看,这很可能是一个错误,其他几个也有这个问题,并且没有已知的解决方案。当然,我对最后一部分可能是错的,可能会有解决方案,因为我找到了它们。
任何方式,我解决此问题的方法是使用pcolor
而不是shading flat
代替imagesc
。将其导出为eps
格式时,它会正确保留图像。例如:
pcolor(rand(20));
shading flat
print('-depsc','figure.eps')
注意:您可能看到每个小方块的反对角线上出现细而微弱的白线(取决于操作系统和观察者)。这些是用于渲染图像的图形基元的边缘。然而,这是不 MATLAB导出中的缺陷,而是EPS / PDF查看器中渲染的错误。例如,使用我的Mac上的预览中的默认设置,这些行显示,而使用Adobe Reader 9.4中的默认设置,它们不会出现。
答案 3 :(得分:2)
如果有人仍然对解决方法感兴趣:使用文本编辑器打开.eps文件并搜索“interpolate”。您可能会发现“/插值真正的def”两到三次。将“true”替换为“false”并快乐:)
答案 4 :(得分:1)
有关Yoda答案的说明:在Mac OS X中的预览中,您可以通过取消选中“消除别名文本和屏幕艺术”来消除每个方块上的细白色对角线。当然,缺点是任何文本(例如数字轴等)都没有消除锯齿。不幸的是,如果您正在使用imagesc,则取消选中对模糊性没有影响。
另一个注意事项是,如果您使用预览从您的eps制作pdf,则在Acrobat中打开时,生成的pdf仍会正确显示(非模糊)。
答案 5 :(得分:1)
我也一直在努力解决这个问题。到目前为止,GSView是我发现的唯一一个能够正确显示Matlab(R2015b)生成的eps数字的浏览器。 eps2eps对我不起作用(psutils 1.23)。 以下最终对我有用:
答案 6 :(得分:0)
模糊实际上取决于您的查看器应用程序或打印机使用的渲染软件。为了始终获得良好的效果,请将图像中的每个像素设置为相同颜色的8x8像素块,即调整图像大小如下:
im2 = imresize(im1, 8, 'nearest');
模糊然后仅影响每个块边缘的像素。 8x8块是最好的,因为它们使用DCT压缩(有时在eps文件中使用)压缩而没有令人讨厌的伪像。
答案 7 :(得分:0)
将 opengl 渲染器应用于图
figure(gcf);
set(gcf,'renderer','opengl');
答案 8 :(得分: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');
答案 9 :(得分:0)
这页帮助了我很多:http://tech.mof-mof.co.jp/blog/machine-learning-octave.html(用日语写的,请用google翻译)
这也很有用:Octave-Gnuplot-AquaTerm error: set terminal aqua enhanced title "Figure 1"...unknown terminal type"
我也在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
我明白了。