最近的MATLAB和Octave具有更强的JPEG压缩并显示出伪像

tar*_*dis 3 matlab image octave

我想知道为什么最近的MATLAB和Octave版本中的jpeg压缩如此强大,以至于引起明显的压缩伪像:

  1. 八度3 jpeg图像,大小为41 KB,没有伪影: 八度3 jpeg图像,大小为41 KB,无伪影

  2. MATLAB 9 jpeg图像,大小为26 KB,带有伪像: MATLAB 9 jpeg图像,大小为26 KB,带有伪像

  3. 带有伪像的八度5 jpeg图像,大小为23 KB: 带有伪像的八度5 jpeg图像,大小为23 KB

这是要绘制的代码:

description = strcat('version-', num2str(version));% find out MATLAB/Octave version

x=1:2; % simple var

figure; % plot
plot(x, x);
title(description);

print(strcat("test_jpeg_size_", description ,'.jpg'), '-djpeg'); % write file
Run Code Online (Sandbox Code Playgroud)

您知道是否可以告诉MATLAB和Octave进行较弱的jpeg压缩。我无法在https://de.mathworks.com/help/matlab/ref/print.html上找到类似的内容。

我知道我可以绘制png文件并使用imagemagick以给定的质量将其转换为jpeg,但这是使用其他工具的解决方法。或者我可以首先放置png文件,但是实际图像对png没有压缩优势(就像这里的简单图像一样),我将不得不更改许多其他内容。

Cri*_*ngo 6

曾经被记录过*,令我惊讶的是在文档页面中找不到它。我使用最新版本的MATLAB(R2019b)对其进行了测试,但仍可以使用:

-djpeg选项的质量值可以在0到100之间(含0和100)。设备选项变为-djpeg100-djpeg80,或您要使用的任何值。

print(strcat("test_jpeg_size_", description ,'.jpg'), '-djpeg100');
Run Code Online (Sandbox Code Playgroud)

*或至少我记得它被记录过……在线文档可以追溯到R13(MATLAB 6.5),并且在该版本的文档中以及在该版本与当前版本之间的一些随机版本中都没有进行描述。


但是,强烈建议您使用PNG绘制线条。JPEG不适用于线条图,并且会弄乱它们(即使在最高质量设置下也是如此)。PNG将以较小的文件大小产生更好的质量。

在这里,我用-djpeg100和打印了一个图形-dpng,然后切出了两个文件的一小部分,并排显示了它们。JPEG,即使是100画质,也使情况变得一团糟:

比较-djpeg100和-dpng

请注意,尽管没有任何数据丢失,但PNG文件比JPEG100文件小约10倍。

  • @Cris:我添加了一个功能请求:https://savannah.gnu.org/bugs/index.php?57029 (2认同)