2013-06-20 66 views
2

虽然我知道一些其他编程语言,但我对Matlab很陌生,所以请原谅我,如果这很简单。我无法在StackOverflow或其他地方找到任何答案。Matlab imwrite()质量

figure(6),imageplot(P); drawnow; 

,看起来像这样:

我用下面的代码生成一个数字enter image description here

然后我用下面的命令此图像保存到我的电脑:

imwrite(P, 'images/plot.png'); 

由此产生的图像很小,并且缺少一些颜色信息:

enter image description here

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

enter image description here

我将如何编程呢?我认为imwrite()会直接写图像,但显然我做错了什么。有什么建议?也许它与imageplot命令有关?我似乎无法让它在imwrite中工作。

更新:基于以下评论,我已开始使用“imresize”与“最近”选项。这样可以正确缩放图像,但是由此产生的图像仍然奇怪地较暗(因此信息较少),比按下图中的“保存”按钮时更加奇怪。

图像从图中保存的:使用

enter image description here

图像 “imresize” 与 “最近” 选项:

enter image description here

回答

2

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

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

print(gcf, '-depsc', 'some_filename.eps','-r0') 

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

+0

你会如何将我的代码和print()函数结合起来?正如我的问题所述,我能够使用imageplot(P)查看我想要的图像。使用print(P,'-dpng','filename.png')会产生一个错误:“句柄输入必须是向量的标量,向量或单元阵列。” 我也尝试使用print(imageplot(P),' - dpng','filename.png')试图正确打印我显示的内容,但这会产生错误“输出参数太多”。 – Jake

+1

您需要在图形手柄上使用打印 - 在绘制了矩阵P之后,'gcf'返回当前的图形句柄,如Martin J.H.使用。你也可以使用'f = figure; imageplot(P);打印(F ...);'。 –

+0

我们走了。完美。非常感谢! – Jake

3

的MATLAB imwrite命令保存像素数完全按规定在你的图像矩阵中。这是您计算的实际结果;输出“很小”的原因是因为它应该是。为了使其更大,可以根据需要简单地缩放它。

然而,保存图形选项会有很大的不同:它会对您在图形窗口中获得的输出进行光栅化处理,并为您提供将其保存为图像的选项。这一点很明显,当你这样做的时候,除了你的结果之外,你还会获得一个白色背景,这实际上就是你保存之前看到的灰色背景;这可以通过在使用保存选项之前调整数字窗口的大小来进行调整。

如果你只是想让输出数字更大,我会推荐使用沿着imresize命令行的东西。

说,如果你想默认大小是真正的结果的两倍大小,只需使用:

imresize(P, 2.0); 

更多的选择,尝试help imresize

+0

这确实调整了图像的大小,但它似乎使用先前的栅格化版本,并且使其更大。所以,例如,运行imwrite(imresize(P,2.0),filename);只是将图像拉伸到两倍的尺寸 - 它更大,但非常模糊,仍然缺少原始图形中的一些颜色信息。 – Jake

+1

使用'imresize'的''nearest'''选项来停止插值(并因此模糊)发生。 – wakjah

+0

请参阅我的更新 - 使用最近的作品,但它仍然不是我想要的,因为虽然缩放现在可用,但它显得更加黑暗。 – Jake