2012-12-07 163 views
1

使用blockproc和Cosinus离散变换(DCT)和阈值,我只是在Matlab中压缩图像。使用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找到压缩比?

回答

1

首先,你需要定义压缩比

我们同意压缩比是原始图像中的位数量除以压缩图像中的位数量。由于所有值(DCT系数)都由相同的固定位数表示,因此可以通过计算系数数而不是位来推断压缩比。

在原始图像中,系数的数量是numel(J),而在压缩图像中是numel(seuil)。因此此图像的压缩比是:

compression_ratio = numel(J)/numel(seuil) 

例如,让我们假设图像尺寸为640×480,并且seuil包含低于阈值的100000个索引。因此,你的压缩比是640*480/100000 = 3.072

+0

我的图像尺寸是206 x 345和numel(seuil)= 61915。所以我的压缩比是206 * 345/61915 = 1.148? –

+0

@ Pier-AlexandreBouchard显然。不是很好的压缩,呃? –

+1

有更大的门槛,我想这会是一个更好的压缩比!谢谢! –