MATLAB图像压缩代码:无损与有损压缩详解
MATLAB图像压缩代码:无损与有损压缩详解
本文将提供两个MATLAB代码示例,分别实现图像的无损压缩和有损压缩。每个示例将展示如何使用JPEG格式进行图像压缩,并解释其采用的技术原理。最后,我们将展示原图和压缩后的图片。
无损压缩代码
% 读入原图
img = imread('lena.png');
% 无损压缩
compressed_img = imwrite(img, 'lena_lossless.jpg', 'jpg', 'Mode', 'lossless');
% 显示原图和压缩后的图
figure;
subplot(1,2,1); imshow(img); title('原图');
subplot(1,2,2); imshow(compressed_img); title('无损压缩');
该代码使用的是JPEG格式的无损压缩技术。在这种压缩技术中,图像被分成一系列的8x8像素块,每个块都进行离散余弦变换(DCT),然后对DCT系数进行量化和编码。在解码时,系数被反量化并经过逆DCT变换恢复原始图像。由于无损压缩过程中不丢失任何信息,因此压缩后的图像与原图完全相同。
有损压缩代码
% 读入原图
img = imread('lena.png');
% 有损压缩
compressed_img = imresize(img, 0.5, 'bilinear');
imwrite(compressed_img, 'lena_lossy.jpg', 'jpg', 'Quality', 50);
% 显示原图和压缩后的图
figure;
subplot(1,2,1); imshow(img); title('原图');
subplot(1,2,2); imshow(compressed_img); title('有损压缩');
该代码使用的是JPEG格式的有损压缩技术。与无损压缩类似,图像同样会被分成8x8像素块并进行DCT变换。但不同的是,有损压缩会对DCT系数进行量化,并在量化过程中舍弃部分信息。这会导致图像质量的损失,但可以实现更高的压缩比。
该代码中,我们使用了imresize函数对原图进行了降采样,将图像尺寸缩小为原来的50%,从而进一步提高压缩效率。这种方法会造成一定程度的图像质量损失,但可以根据实际需求调整降采样比例和压缩质量参数来控制压缩效果。
总结
本文介绍了两种常见的图像压缩方法:无损压缩和有损压缩。无损压缩能够保留所有图像信息,但压缩比相对较低;有损压缩则能够实现更高的压缩比,但会造成一定程度的图像质量损失。在实际应用中,应根据具体需求选择合适的压缩方法。
原文地址: https://www.cveoy.top/t/topic/oRWC 著作权归作者所有。请勿转载和采集!