使用blockproc
和Cosinus离散变换(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找到压缩率?
答案 0 :(得分:1)
首先,您需要定义压缩率。
我们同意压缩比是原始图像中的位数除以压缩图像中的位数。由于所有值(DCT系数)都由相同的固定位数表示,因此可以通过计算系数而不是位数来推断压缩比。
在原始图像中,系数的数量为numel(J)
,而压缩图像中的系数为numel(seuil)
。因此,该图像的压缩率为:
compression_ratio = numel(J) / numel(seuil)
例如,假设您的图片尺寸为640×480,seuil
包含100000个低于阈值的指数。因此,您的压缩率为640*480 / 100000 = 3.072