最近的 MATLAB 和 Octave 具有更强的 JPEG 压缩并显示伪像
Recent MATLAB and Octave have stronger JPEG compression and show artifacts
我想知道为什么最近的 MATLAB 和 Octave 版本中的 jpeg 压缩如此强烈以至于导致明显的压缩伪影:
Octave 3 jpeg 图像,大小为 41 KB,无伪影:
MATLAB 9 jpeg 图像,大小为 26 KB,有瑕疵:
Octave 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
您是否知道可以让 MATLAB 和 Octave 进行较弱的 jpeg 压缩。我在 https://de.mathworks.com/help/matlab/ref/print.html.
上找不到类似的内容
我知道我可以绘制 png 文件并使用 imagemagick 将其转换为具有给定质量的 jpeg,但这将是使用其他工具的解决方法。或者我可以首先使用 png 文件,但真实图像对 png 没有压缩优势(就像这里的简单图像一样),我将不得不更改很多其他东西。
你可以去
f = getframe(gcf);
imwrite(f.cdata, 'Fig1.jpg')
其中 imwrite
采用以下选项
Compression
(压缩方案)
Quality
(JPEG 压缩文件的质量从 0 到 100)
参见 imwrite
的 doc。
这个曾经被记录*,我很惊讶没有在文档页面中找到它。我使用最新版本的 MATLAB (R2019b) 对其进行了测试,它仍然有效:
-djpeg
选项可以采用 0 到 100 之间的质量值,包括 0 和 100。设备选项变为 -djpeg100
或 -djpeg80
,或您要使用的任何值。
print(strcat("test_jpeg_size_", description ,'.jpg'), '-djpeg100');
* 或者至少我 记得 它被记录了...在线文档可以追溯到 R13 (MATLAB 6.5),但在那里面没有描述文档版本和当前版本之间的一些随机版本。
但是,我强烈建议您使用 PNG 来绘制线条图。 JPEG 不适用于线条图,并且会把它们弄得一团糟(即使是在最高质量设置下)。 PNG 将以更小的文件大小产生更好的质量。
这里我用-djpeg100
和-dpng
打印了一张图,然后剪下两个文件的一小部分并排显示。 JPEG,即使是 100 质量,也会使线条混乱:
请注意,尽管没有任何数据丢失,但 PNG 文件比 JPEG100 文件小约 10 倍。
我想知道为什么最近的 MATLAB 和 Octave 版本中的 jpeg 压缩如此强烈以至于导致明显的压缩伪影:
Octave 3 jpeg 图像,大小为 41 KB,无伪影:
MATLAB 9 jpeg 图像,大小为 26 KB,有瑕疵:
Octave 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
您是否知道可以让 MATLAB 和 Octave 进行较弱的 jpeg 压缩。我在 https://de.mathworks.com/help/matlab/ref/print.html.
上找不到类似的内容我知道我可以绘制 png 文件并使用 imagemagick 将其转换为具有给定质量的 jpeg,但这将是使用其他工具的解决方法。或者我可以首先使用 png 文件,但真实图像对 png 没有压缩优势(就像这里的简单图像一样),我将不得不更改很多其他东西。
你可以去
f = getframe(gcf);
imwrite(f.cdata, 'Fig1.jpg')
其中 imwrite
采用以下选项
Compression
(压缩方案)Quality
(JPEG 压缩文件的质量从 0 到 100)
参见 imwrite
的 doc。
这个曾经被记录*,我很惊讶没有在文档页面中找到它。我使用最新版本的 MATLAB (R2019b) 对其进行了测试,它仍然有效:
-djpeg
选项可以采用 0 到 100 之间的质量值,包括 0 和 100。设备选项变为 -djpeg100
或 -djpeg80
,或您要使用的任何值。
print(strcat("test_jpeg_size_", description ,'.jpg'), '-djpeg100');
* 或者至少我 记得 它被记录了...在线文档可以追溯到 R13 (MATLAB 6.5),但在那里面没有描述文档版本和当前版本之间的一些随机版本。
但是,我强烈建议您使用 PNG 来绘制线条图。 JPEG 不适用于线条图,并且会把它们弄得一团糟(即使是在最高质量设置下)。 PNG 将以更小的文件大小产生更好的质量。
这里我用-djpeg100
和-dpng
打印了一张图,然后剪下两个文件的一小部分并排显示。 JPEG,即使是 100 质量,也会使线条混乱:
请注意,尽管没有任何数据丢失,但 PNG 文件比 JPEG100 文件小约 10 倍。