matlab - 可以提高Matlab export_fig中点的分辨率吗?

标签 matlab

假设我有一个背景图像,并在其上绘制了一些附加点。我在下面提供了一个示例,为了简单起见,背景图像只是一个纯白色图像:

testim=ones(1024,1024);

imshow(testim); hold on

for j=1:20
    plot(20+.33,20.27+j*10, '.r','MarkerSize',4);
end
for j=1:20
    plot(300+.33,20.27+j*10, '.r','MarkerSize',4);
end
for j=1:15
    plot(j*20+.33,220.27, '.r','MarkerSize',4);
end
for j=1:15
    plot(j*20+.33,20.27, '.r','MarkerSize',4);
end

当我放大 Matlab 图形时,它看起来像:

enter image description here

然后我缩小回原始图形大小,然后使用 export_fig 保存:

export_fig exportFig-q100-painters-testim.png -q100 -painters
export_fig exportFig-q102-painters-testim.png -q102 -painters

当我打开这些 png 文件并放大时,图像看起来像:

enter image description here

这不是我想要的,因为我希望原始图中的每个点在放大的 png 文件中都会变成一个像素大小,但对于每个中心像素,由于存在大约 6 个红色微弱像素到模糊。有什么办法可以消除export_fig中的这种模糊吗?

编辑:

当我使用 print(gcf,'foo.png','-dpng','-r300') 将图形保存为图像时,即使我调整 dpi 为 1、100、300、900 等值

编辑2:

在尝试下面的绘图时,更容易看出 export_fig out.png -q100 -painters -a1 没有帮助:

testim=rand(1024,1024);

imshow(testim); hold on

for j=1:100
    plot(20+.33,20.27+j*2, '.r','MarkerSize',4);
end
for j=1:100
    plot(300+.33,20.27+j*2, '.r','MarkerSize',4);
end
for j=1:60
    plot(j*5+.33,220.27, '.r','MarkerSize',4);
end
for j=1:60
    plot(j*5+.33,20.27, '.r','MarkerSize',4);
end

编辑3

当我使用saveas保存为pdf时,背景图像为1024x1024,代码如下:

testim=rand(1024,1024);
f2=figure(2); imshow(testim); hold on
plot(217.47, 227.3, '.r','MarkerSize',1);
plot(218.74, 226.8, '.r','MarkerSize',1);
plot(219.2, 227.1, '.r','MarkerSize',1);
plot(219.1, 228.5, '.r','MarkerSize',1);
saveas(f2, 'saveas-pdf-testim-1024-marker1.pdf');

结果是:

enter image description here

但是当背景图片是4096x4096时看起来很糟糕:

testim=rand(4096,4096);
f2=figure(2); imshow(testim); hold on
plot(217.47, 227.3, '.r','MarkerSize',1);
plot(218.74, 226.8, '.r','MarkerSize',1);
plot(219.2, 227.1, '.r','MarkerSize',1);
plot(219.1, 228.5, '.r','MarkerSize',1);
saveas(f2, 'saveas-pdf-testim-4096-marker1.pdf');

enter image description here

最佳答案

您在输出中看到的是抗锯齿。它使线条在位图中看起来更漂亮。

应用了两个级别的抗锯齿:

  1. MATLAB 本身现在可以使用抗锯齿进行渲染。您可以使用关闭此功能

    set(gcf,'GraphicsSmoothing','off')
    
  2. export_fig 有一个选项可以控制位图文件格式的抗锯齿功能:

    -a1, -a2, -a3, -a4 - option indicating the amount of anti-aliasing to
                     use for bitmap outputs. '-a1' means no anti-aliasing;
                     '-a4' is the maximum amount (default).
    

    默认为-a4,这是抗锯齿的最大量。它使图形以 4 倍的分辨率渲染,然后缩放生成的图像。将 -a1 添加到 export_fig 命令会禁用抗锯齿功能。

    export_fig out.png -a1
    

两者的结合让你的身材更加清爽。然而,在我看来,虚线的渲染看起来仍然很差。尝试添加 -m4 或某些此类值,以将导出位图的分辨率提高到与屏幕渲染相比的整数倍。

关于matlab - 可以提高Matlab export_fig中点的分辨率吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59292043/

相关文章:

matlab - 将条形图的刻度标签更改为对数刻度

matlab - MATLAB 中的信号量和锁

matlab - 在 Matlab 中使用父类(super class)函数修改子类属性

matlab - Open-CV Haar教练应用程序

matlab - 生成已知维度的空矩阵

arrays - 在 MATLAB 中随机改组矩阵有更好/更快的方法吗?

arrays - Matlab 中的逐元素数组复制

arrays - 3d 矩阵中 `repmat` 和 `permute` 的更快替代方案?

matlab - 高频和低频傅里叶变换系数

MATLAB LIBSVM 安装