【问题标题】:Matlab: How to avoid artefacts in filled contour plotsMatlab:如何避免填充等高线图中的伪影
【发布时间】:2015-02-04 16:03:37
【问题描述】:

我正在尝试将 Matlab 中的填充等高线图导出为矢量图形以包含在 Latex 文件中。我目前的方法是:

contourf(x,y,v_mag,20), axis([0,width,0,height]),daspect('manual') ;
grid off
colormap jet
h = colorbar;
caxis([0 v_lid])
h.Label.String = 'Velocity Magnitude (m/s)';
set(gcf,'renderer','painters')
export_fig('-painters', '-transparent', 'pdf', 'filename.pdf');

这种方法的问题在于它会产生如下所示的伪像(白线):

我知道这些白线是定义阴影区域的多边形,这些区域具有不可见的边缘,并且不会完全重叠(according to here)。该问题是由 pdf 查看器本身引起的,它试图平滑屏幕上显示的线条(according to here)。我的问题是大多数查看文档的人不知道这一点,也不知道如何阻止查看者这样做。所以我的问题是:

是否可以在没有这些人工制品的情况下从 Matlab 创建填充轮廓图的矢量图形?

Eps 会产生同样的问题。我曾尝试使用SVG function,但没有任何运气。由于放大导致像素化,我试图避免使用光栅图形。任何建议将不胜感激。

编辑 - 附加信息 - 使用 Matlab v.2014b 和 Ghostscript v.9.15

【问题讨论】:

  • 当您在 PDF 查看器中放大和缩小时,这些线条是否会发生变化?
  • 是的,它们确实发生了变化。缩放时它们会消失。缩放后它们会发生变化。
  • 在这种情况下,文件正确无误,但这是使用中的 PDF 查看器的问题。该效果主要是由渲染器中的舍入差异引起的。这可能很烦人,需要一些说明才能忽略这些行。
  • 感谢您的回复。我很感激这是pdf查看器的错。我什至知道要防止 pdf 查看器这样做。问题是其他人不会。我的问题是是否可以在 Matlab 中创建矢量图形,这样 pdf 查看器就不会首先显示这些伪影。
  • 好的,我的专长是 PDF,所以,对于 Matlab 问题,我相信其他人可以提供帮助。

标签: matlab pdf vector-graphics


【解决方案1】:

这是一个非常令人沮丧的问题,似乎没有解决方案(甚至很少尝试解决方案),而且已经有很多年了。总之,Matlab 无法处理输出无伪影的轮廓图或曲面图(任何具有复杂网格或透明度的图)。

我可以建议一个简单的解决方法,在大多数情况下都可以使用,在这种情况下,底层等高线图的颜色或细节不需要完美地保留。

  1. 以足够高的分辨率以 png 格式输出没有线条的图形版本。

  2. 以 pdf 格式输出不带颜色的图形版本。这应该没有任何人工制品。如果您的图形很复杂并且有很多透明度,您可能需要输出多个版本来构建“关卡”。

  3. 使用 Adob​​e Illustrator(或其他类似工具)执行光栅图像的矢量化跟踪。您可能会在这里丢失一些细节,但对于细节有限的简单等高线图,它将很容易转换为矢量化形式。

  4. 在 Illustrator 中叠加两个图像。以矢量格式输出。

这还允许您使用 Illustrator 压缩 pdf 的功能。

如果您不想对光栅输出进行矢量化处理,您也可以简单地替换步骤 3-4 并将光栅彩色图像与矢量化线图像结合起来。这适用于复杂的等高线图,可以为您提供清晰的线条,但可以压缩基础颜色。

【讨论】:

    【解决方案2】:

    最终,MatLab 2013b 没有这个问题。此外,它生成的文件的体积要小得多。这是因为 MatLab 2013b 合成了大重叠图形的矢量化图像,而 MatLab 2014b 进行了可怕的网格划分。

    这里第一个文件来自 2013b,第二个来自 MatLab 2014b(我用红色笔划突出显示了一个多边形以显示差异)。卷的差异大约为 22 倍(38 Kb 与 844 Kb)。

    所以这不是查看器的问题,而是从 MatLab 导出图像的方式。

    这里Triangular split patches with painters renderer in MATLAB 2014b and above也讨论了这个问题,但仍然没有直接的解决方案。

    【讨论】:

      猜你喜欢
      • 2014-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-25
      相关资源
      最近更新 更多