【图像压缩】基于离散余弦变换DCT变换实现图像压缩PSNR附Matlab代码

matlab

% 读取原始图像
originalImage = imread(‘input_image.jpg’);
originalImage = im2double(originalImage);

% 设置压缩参数
blockSize = 8; % DCT块大小
compressionRatio = 0.5; % 压缩比例

% 将图像分成不重叠的块
[h, w] = size(originalImage);
numBlocksH = floor(h / blockSize);
numBlocksW = floor(w / blockSize);
numBlocks = numBlocksH * numBlocksW;

% 初始化压缩后的图像和峰值信噪比
compressedImage = zeros(h, w);
psnr = 0;

% 对每个块进行DCT变换和量化
for i = 1:numBlocksH
for j = 1:numBlocksW
% 提取当前块
block = originalImage((i-1)blockSize+1:iblockSize, (j-1)blockSize+1:jblockSize);

    % 进行DCT变换
    dctBlock = dct2(block);
    
    % 量化
    quantizedBlock = round(dctBlock / compressionRatio);
    
    % 反量化
    dequantizedBlock = quantizedBlock * compressionRatio;
    
    % 反DCT变换
    compressedBlock = idct2(dequantizedBlock);
    
    % 更新压缩后的图像和峰值信噪比
    compressedImage((i-1)*blockSize+1:i*blockSize, (j-1)*blockSize+1:j*blockSize) = compressedBlock;
    psnr = psnr + 10 * log10(1 / mean((block(:) - compressedBlock(:)).^2));
end

end

% 计算平均峰值信噪比
psnr = psnr / numBlocks;

% 显示原始图像和压缩后的图像
figure;
subplot(1, 2, 1);
imshow(originalImage);
title(‘原始图像’);
subplot(1, 2, 2);
imshow(compressedImage);
title(‘压缩后的图像’);

% 显示峰值信噪比
disp([‘压缩后的图像的PSNR:’, num2str(psnr), ’ dB’]);

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天天酷科研

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值