图像压缩算法

8.1 JPEG压缩 (JPEG Compression)

介绍

JPEG(Joint Photographic Experts Group)压缩是最常用的有损图像压缩算法之一。它通过减少图像中的冗余数据来实现高效压缩,特别适用于自然图像。

原理

JPEG压缩的基本步骤包括颜色空间转换、离散余弦变换(DCT)、量化和熵编码。颜色空间转换将RGB图像转换为YCrCb格式,以分离亮度信息和色度信息。DCT将图像块转换到频域,量化步骤减少高频系数的精度,熵编码则进一步压缩数据。

公式

JPEG压缩的核心步骤是离散余弦变换,其公式为:

其中,f(x,y) 为图像块中的像素值,α(u) 和 α(v) 为正则化系数。

案例

使用Python和OpenCV进行JPEG压缩和解压缩。

代码解析
python 复制代码
import cv2
import numpy as np

# 读取图像
image = cv2.imread('image.jpg')

# 保存为JPEG格式,设置压缩质量
cv2.imwrite('compressed_image.jpg', image, [int(cv2.IMWRITE_JPEG_QUALITY), 50])

# 读取压缩后的图像
compressed_image = cv2.imread('compressed_image.jpg')

# 显示原图和压缩图像
cv2.imshow('Original Image', image)
cv2.imshow('Compressed Image', compressed_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
生活场景案例

JPEG压缩广泛应用于数码相机、手机、互联网中的图像存储和传输,由于其压缩效率高且支持大多数设备,是最流行的图像格式之一。

总结

JPEG压缩通过有损的方式显著减少图像文件大小,适用于对压缩质量要求不高的场景,如照片存储和网页图像加载。

8.2 无损压缩 (Lossless Compression)

介绍

无损压缩通过高效编码原理在不丢失任何信息的情况下压缩图像数据。常见的无损压缩格式包括PNG和GIF,适用于需要精确保存图像信息的场景。

原理

无损压缩利用了图像中的冗余信息,通过熵编码、预测编码等技术来减少数据量。典型的无损压缩方法包括基于LZ77算法的PNG和基于LZW算法的GIF。

公式

无损压缩的一般原理基于信息论中的熵编码:

其中,H(X) 是信息熵,P(xi) 是符号 xi 的概率。

案例

使用Python和PIL进行PNG图像的压缩和解压缩。

代码解析
python 复制代码
from PIL import Image

# 读取图像
image = Image.open('image.png')

# 保存为PNG格式
image.save('compressed_image.png', format='PNG')

# 读取压缩后的图像
compressed_image = Image.open('compressed_image.png')

# 显示图像信息
compressed_image.show()
生活场景案例

无损压缩适用于需要精确保存每个像素值的图像,如医学图像、工程图纸和一些高质量的图形设计工作。

总结

无损压缩可以在保持图像完整性的同时,减少存储空间,适用于精确度要求高的应用场景。

8.3 基于变换的压缩 (Transform-based Compression)

介绍

基于变换的压缩方法,如小波变换压缩,是现代图像压缩技术的核心。它通过多分辨率分析,对图像进行有效压缩,适合于各种图像类型的高效存储。

原理

小波变换通过将图像分解为多个不同尺度和分辨率的子带,捕捉图像的局部特征。高频部分通常代表图像的细节,而低频部分代表图像的整体结构。通过量化和编码这些分解后的子带,能够实现图像的高效压缩。

公式

小波变换的基本公式为:

其中,Wψ(a,b) 是小波系数,f(t) 是原始信号,ψ是小波函数,a 和 b 分别是尺度和位置参数。

案例

使用Python和PyWavelets进行小波变换图像压缩。

代码解析
python 复制代码
import pywt
import cv2
import numpy as np
import matplotlib.pyplot as plt

# 读取图像
image = cv2.imread('image.jpg', 0)

# 进行小波变换
coeffs2 = pywt.dwt2(image, 'haar')
LL, (LH, HL, HH) = coeffs2

# 显示不同分辨率下的子带
plt.subplot(221), plt.imshow(LL, cmap='gray')
plt.title('Approximation')
plt.subplot(222), plt.imshow(LH, cmap='gray')
plt.title('Horizontal detail')
plt.subplot(223), plt.imshow(HL, cmap='gray')
plt.title('Vertical detail')
plt.subplot(224), plt.imshow(HH, cmap='gray')
plt.title('Diagonal detail')

plt.show()
生活场景案例

基于变换的压缩广泛应用于高清电视、电影存储、医疗成像等领域,能够在保持图像质量的同时,显著降低数据量。

总结

基于变换的压缩方法通过对图像的频域分析实现高效压缩,适用于对压缩效率和图像质量要求高的场景。

相关推荐
微三云 - 廖会灵 (私域系统开发)10 小时前
存量社区破局:当物业困局遇上消费返物业费,重构社区商业新生态
大数据·人工智能·重构
T型码农要学习12 小时前
开源项目5|FileBrowser:免费在线文件管理器!随时随地管控服务器文件
运维·服务器·人工智能·开源
智恒百亿12 小时前
8 卡 RTX 5090 服务器深度实测:256GB 显存能否支撑 70B 模型微调?选型参考
大数据·运维·服务器·人工智能
ai小陈15 小时前
PyTorch DataLoader数据加载性能排查:GPU利用率低的实操指南
人工智能·pytorch·python·深度学习·ai·gpu算力
测试者家园16 小时前
为什么意图驱动测试是自动化测试的下一站,而不是替代品
自动化测试·软件测试·人工智能·持续测试·ai赋能·智能化测试·软件测试变革
D2020202017 小时前
TikTok Shop禁止AI语音直播落地后,跨境卖家如何通过达秘合规调整带货内容
人工智能
像风一样自由202017 小时前
20.Milvus常见问题检索不到维度错误和数据一致性
人工智能·大模型·milvus
现代野蛮人18 小时前
【深度学习实验】—— 基于 LSTM 与 Optuna 调参的丙型肝炎预测
人工智能·深度学习·lstm
支支დ18 小时前
VO by Vercel 前端特定优势:为什么它是构建 AI 应用的新范式
前端·人工智能
ZGIAI18 小时前
ZGI 让那些"等你去处理"的事,真正跑起来
人工智能·架构