Matlab imwrite()质量

Matlab imwrite()质量,matlab,matlab-figure,Matlab,Matlab Figure,我对Matlab非常陌生,虽然我知道一些其他编程语言,所以如果这是一个简单的问题,请原谅我。无论是在StackOverflow还是其他地方,我都找不到任何答案 我使用以下代码生成图形: figure(6),imageplot(P); drawnow; 看起来是这样的: 然后,我使用以下命令将此图像保存到我的计算机: imwrite(P, 'images/plot.png'); 生成的图像很小,缺少一些颜色信息: 但是,如果我使用开放图形(图像#1)中的保存功能并手动保存,我会得到我想要的

我对Matlab非常陌生,虽然我知道一些其他编程语言,所以如果这是一个简单的问题,请原谅我。无论是在StackOverflow还是其他地方,我都找不到任何答案

我使用以下代码生成图形:

 figure(6),imageplot(P); drawnow;
看起来是这样的:

然后,我使用以下命令将此图像保存到我的计算机:

imwrite(P, 'images/plot.png');
生成的图像很小,缺少一些颜色信息:

但是,如果我使用开放图形(图像#1)中的保存功能并手动保存,我会得到我想要的,也就是存储在计算机上的确切图像

我该如何编程?我假设imwrite()将直接写入图像,但显然我做错了什么。有什么建议吗?也许它与imageplot命令有关?我似乎无法用imwrite实现这一点

更新:基于下面的评论,我已经开始使用带有“最近”选项的“imresize”。这会适当地缩放图像,但结果图像仍然比我点击图中的“保存”按钮时暗得出奇(因此信息更少)

从图中保存的图像:

使用带有“最近”选项的“imresize”图像:


MATLAB
imwrite
命令精确保存图像矩阵中指定的像素数。这是您计算的实际结果;输出之所以“微小”,是因为它应该是微小的。要使其更大,只需根据需要对其进行缩放

然而,save figure选项的作用却大不相同:它将在figure窗口中获得的输出光栅化,并提供将其保存为图像的选项。这是显而易见的事实,当你这样做,你得到一个白色的背景除了你的结果,这实际上只是你看到的灰色背景,然后再保存它;这可以通过在使用“保存”选项之前调整“地物”窗口的大小来调整

如果您只是希望将输出图形放大,我建议您使用类似于
imresize
命令的方法

例如,如果希望默认大小是实际结果大小的两倍,只需使用:

imresize(P, 2.0);

有关更多选项,请尝试
help imresize

图形的“另存为…”功能所需的命令称为“打印”。我经常使用

print(gcf, '-dpng', 'some_filename.png')


将图形保存为屏幕上显示的图形。png格式提供了小文件大小和出色的质量,大多数图像查看器和浏览器都能理解它。eps格式是一种矢量格式,我用于printig。'-r0'选项为矢量格式属性指定“使用与屏幕分辨率相同的大小”

这确实会调整图像的大小,但它似乎使用了以前的光栅化版本,只会使图像变大。例如,运行imwrite(imresize(P,2.0),filename);简单地将图像拉伸到两倍的尺寸-它更大,但非常模糊,仍然缺少原始图形中的一些颜色信息。使用
imresize
'nearest'
选项停止插值(从而模糊)。请参阅我的更新-使用最近的作品,但这仍然不是我想要的,因为尽管现在缩放效果很好,但颜色要暗得多。@user774359:这里的选项似乎更简单。它甚至不需要你创建一个图形。你需要调整你的1×1像素到72 dpi的屏幕分辨率,或者你想要的任何东西。我认为生成的图像更暗的原因是灰度PNG默认为8位<代码>打印输出(truecolor)24位(每个通道8位)RGB PNG,无论输入是什么。检查文档,了解如何更改
imwrite
的输出。您建议我如何将代码与print()函数结合使用?如我在问题中所述,我可以使用imageplot(P)查看我想要的图像。使用print(P,'-dpng',filename.png')会产生一个错误:“句柄输入必须是标量、向量或向量的单元格数组。”我还尝试使用print(imageplot(P),'-dpng',filename.png')来精确打印我显示的内容,但这会产生错误“输出参数太多”。您需要在图形句柄上使用打印-绘制矩阵P后,
gcf
返回当前图形句柄,如Martin J.H.使用的。您还可以使用
f=figure;影像图(P);印刷品(f,…)。我们开始了。完美非常感谢你!
print(gcf, '-depsc', 'some_filename.eps','-r0')