改进的SPIHT图像压缩算法:基于HVS模型

需积分: 10 1 下载量 136 浏览量 更新于2024-09-06 收藏 407KB PDF 举报
"基于HVS模型的SPIHT图像压缩算法通过改进传统的SPIHT算法,利用人类视觉系统的特性提高图像压缩效率和质量。该方法主要针对SPIHT算法在编码时对所有子带采用相同重要性的策略,以及对SAR图像能量分布不敏感的问题。作者余楚才和李雷来自电子科技大学电子工程学院,他们提出了一种新的压缩算法,该算法结合小波系数的能量分布和频率敏感性,应用可变量化步长,以更好地适应人眼视觉感知。 在SPIHT(Set Partitioning in Hierarchical Trees)算法中,尽管其具有高压缩效率、嵌入式码流和多码率解码能力,但存在内存需求大、子带处理不灵活以及所有频域同等重要编码的缺陷。为解决这些问题,文献中提到的LZC算法简化了SPIHT,减少了内存需求,但牺牲了部分编码性能。 本文提出的改进算法首先分析图像在小波域的能量分布,然后利用HVS(Human Visual System)模型,即模拟人类视觉对不同频率的敏感度。通过这种方式,对于不同频带的小波系数,可以采用不同的量化步长,使得量化结果更符合人眼的视觉感知。这样不仅能减少不重要系数的冗余扫描和比特输出,提高编码效率,还能在保持图像边缘清晰度的同时,提升压缩后的主观质量。 实验结果证明,改进后的算法在边缘保持能力和主观图像质量方面均优于原始的SPIHT算法。这一改进对于需要高效、高质量图像压缩的领域,如遥感图像处理、视频通信和数字存储等,具有重要的实际应用价值。通过结合视觉感知模型,算法可以更加智能地处理图像信息,减少不必要的数据传输,降低存储需求,同时保持良好的图像质量,从而满足不同用户的需求。"

from PIL import Image import numpy as np import io # 读取原始图像和压缩后图像 original_img = Image.open('test.jpg') compressed_img = Image.open('test_compressed.jpg') # 将图像转换为 NumPy 数组 original_img_arr = np.array(original_img) compressed_img_arr = np.array(compressed_img) # 计算原始图像大小 original_size = original_img_arr.nbytes # 计算压缩后图像大小 compressed_size = compressed_img_arr.nbytes # 计算压缩率 compression_ratio = compressed_size / original_size # 计算峰值信噪比(PSNR) mse = np.mean((original_img_arr - compressed_img_arr) ** 2) psnr = 10 * np.log10(255**2 / mse) # 计算结构相似性指数(SSIM) from skimage.metrics import structural_similarity as ssim ssim_score = ssim(original_img_arr, compressed_img_arr, multichannel=True) # 计算峰值信噪比改进比(PSNR-HVS) from skimage.metrics import peak_signal_noise_ratio as psnr_hvs psnr_hvs_score = psnr_hvs(original_img_arr, compressed_img_arr, data_range=original_img_arr.max()) # 计算多样性信噪比(MS-SSIM) from skimage.metrics import multi_scale_ssim as ms_ssim ms_ssim_score = ms_ssim(original_img_arr, compressed_img_arr, data_range=original_img_arr.max(), win_size=11) # 计算复杂度压缩比(CPC) cpc = psnr / compression_ratio # 输出七种压缩率 print(f"Compression ratio: {compression_ratio:.4f}") print(f"Peak Signal-to-Noise Ratio (PSNR): {psnr:.2f}") print(f"Structural Similarity Index (SSIM): {ssim_score:.4f}") print(f"Peak Signal-to-Noise Ratio - HVS (PSNR-HVS): {psnr_hvs_score:.2f}") print(f"Multi-Scale Structural Similarity (MS-SSIM): {ms_ssim_score:.4f}") print(f"Complexity-Compression Ratio (CPC): {cpc:.2f}") print(f"Original size: {original_size:,}") print(f"Compressed size: {compressed_size:,}")ValueError: operands could not be broadcast together with shapes (417,556,3) (418,558,3)

2023-05-30 上传