以下是matlab代码实现:

% 读入图像 img = imread('lena.jpg'); img = rgb2gray(img); % 分块大小 block_size = 8; % 将图像分块 blocks = mat2cell(img, block_sizeones(1,size(img,1)/block_size), block_sizeones(1,size(img,2)/block_size)); % DCT变换 dct_blocks = cellfun(@(block) dct2(block), blocks, 'UniformOutput', false); % 选择系数 num_coeffs = [6, 10, 15]; for i = 1:length(num_coeffs) % 构造系数区域选择模板 coeffs_mask = zeros(block_size); coeffs_mask(1:num_coeffs(i),1:num_coeffs(i)) = 1; coeffs_mask = repmat(coeffs_mask, size(blocks)); % 保留系数 dct_blocks_masked = cellfun(@(block) block.*coeffs_mask, dct_blocks, 'UniformOutput', false); % 逆DCT变换 idct_blocks = cellfun(@(block) idct2(block), dct_blocks_masked, 'UniformOutput', false); % 重构图像 img_reconstructed = cell2mat(idct_blocks); % 显示压缩率和重构图像 compression_ratio = (num_coeffs(i)^2)/(block_size^2); figure;imshow(img_reconstructed);title(['Compression Ratio: ', num2str(compression_ratio)]); end

通过更改num_coeffs数组中的值,可以选择不同数量的系数进行保留,从而得到不同压缩率和重构图像的对比效果


原文地址: https://www.cveoy.top/t/topic/cxbv 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录