使用blockproc
和余弦离散变换(DCT
)和一个阈值,我只是在Matlab中压缩图像。
我需要找到压缩比,这可能不难找到。
它应该是压缩图像中的位数/原始图像中的位数。
使用BitDepth
,我无法获得有效的压缩比。
f1 = @(block_struct) dct2(block_struct.data);
f2 = @(block_struct) idct2(block_struct.data);
I=imread('autumn.tif','tiff');
Im=rgb2gray(I);
J = blockproc(Im, [8 8], f1);
seuil = find(abs(J) < 15);
J(seuil) = zeros(size(seuil));
K = blockproc(J, [8 8], f2) / 255;
subplot(2,2,2)
imshow(K);
如何使用 Matlab 找到压缩比?
首先,您需要定义压缩比。
让我们同意压缩率是原始图像中的位数除以压缩图像中的位数。由于所有值(DCT 系数)都由相同的固定位数表示,因此您可以通过计算系数数而不是位数来推断压缩率。
在原始图像中,系数的数量是numel(J)
的,而在压缩图像中是numel(seuil)
的。因此,此图像的压缩比为:
compression_ratio = numel(J) / numel(seuil)
例如,假设您的图像尺寸为 640×480,并且seuil
包含低于阈值的 100000 个值索引。因此,您的压缩比是640*480 / 100000 = 3.072