image compression

图像与视频压缩技术解析
本文深入探讨了图像和视频压缩的关键技术,包括JPEG压缩算法的详细步骤,从颜色模式转换到编码的全过程,以及H.264视频压缩中的帧间压缩原理,对比I-frame、P-frame和B-frame的不同作用。

图片压缩

图片压缩算法概览

1 JPEG压缩

JPEG压缩算法用失真的压缩方式来处理图像,但失真的程度是肉眼无法辨认的。

压缩过程
1.颜色模式转换及采样;2.DCT变换;3.量化;4.编码

1.1 颜色模式转换及采样

RGB色彩系统是我们最常用的表示颜色的方式。JPEG采用的是YCbCr色彩系统,Y代表亮度,Cb代表色度,Cr代表饱和度,计算公式如下:

Y=0.2990R+0.5870G+0.1140B
Cb=-0.1687R-0.3313G+0.5000B+128
Cr=0.5000R-0.4187G-0.0813B+128

人类的眼睛对低频的数据比对高频的数据具有更高的敏感度,对亮度的改变也比对色彩的改变要敏感的多,因此Y成分的数据是比较重要的,而Cb和Cr成分的数据相对不重要,就可以只取部分数据来处理。JPEG通常有两种采样方式:YUV411和YUV422,它们所代表的意义是Y,Cb和Cr三个成分的数据取样比例。

1.2 DCT变换

DCT,Discrete Cosine Transform,离散余弦变换
经过DCT转换后,矩阵左上角代表低频向量,矩阵右下角代表低频向量

1.3 量化

量化过程有量化表的,JPEG压缩标准中有推荐的亮度量化表和色度量化表(饱和度不用量化吗???)
量化过程说明

1.4 编码

huffman编码是JPEG最常用的编码方式
DC编码,DC是采用差值脉冲编码调制(DPCM)的差值编码法,也就是在同一图像分量中取得每个DC值与前一个DC值的差

AC编码,AC编码方式与DC略有不同,在AC编码之前,首先得将63个AC值按Zig-zag排
序,即按照下图箭头所指示的顺序串联起来。
Zig-zag排序

视频压缩

H.264

帧间压缩,
视频帧示意
I-frame是完全编码的图片,每个I-frame包含了显示图片的所有内容,I-frame本身是进行了压缩的,如JPEG压缩方式,
P-frame只需要存储与上一个I-frame不同的地方
B-frame是双向帧,需要的数据来自上一个P-frame和下一个I-frame
帧压缩示意

不采用帧间压缩的视频所有帧都是I-frame的

<think>好的,我现在需要解决Albumentations库中ImageCompression的quality_lower参数无效的问题。用户遇到了警告,提示quality_lower参数被忽略。首先,我得弄清楚这个问题的原因是什么。 根据经验,可能的情况是参数设置不正确或者版本问题。Albumentations的ImageCompression变换可能有不同的参数要求。比如,某些版本可能要求quality_lower和quality_upper同时设置,或者其中一个参数被弃用了。用户可能只设置了quality_lower而没有设置quality_upper,导致库无法识别而忽略该参数。 接下来,我需要查阅Albumentations的官方文档,确认ImageCompression的参数使用方式。在文档中,ImageCompression通常需要指定quality_lower和quality_upper两个参数,它们定义了压缩质量的范围。如果只设置其中一个,库可能无法处理,从而发出警告。例如,正确的用法应该是同时设置这两个参数,如quality_lower=50, quality_upper=100。 另外,检查用户使用的Albumentations版本也很重要。如果用户使用的是旧版本,可能参数名称或用法有变化。比如,某些版本可能将参数名改为min_quality和max_quality,或者调整了参数的默认值。升级到最新版本可能解决这个问题。 还有可能是用户在使用ImageCompression时没有正确传递参数。例如,应该使用关键字参数而不是位置参数。需要确认代码中的调用方式是否正确,比如是否正确写成ImageCompression(quality_lower=50, quality_upper=100, always_apply=False, p=0.5)。 此外,查看库的源代码或GitHub上的issues可能会有帮助。其他用户可能遇到过类似的问题,开发者可能已经修复或者在讨论中提供了解决方案。比如,在某个issue中,开发者提到需要同时设置quality_lower和quality_upper,否则会使用默认值,导致警告出现。 综合以上分析,解决方案应该是确保同时设置quality_lower和quality_upper参数,并且检查库的版本是否需要更新。同时,验证代码中的参数传递是否正确,避免语法错误。如果问题依旧存在,可能需要查看具体的警告信息,进一步调试或向社区寻求帮助。</think>### Albumentations ImageCompression quality_lower 参数警告解决方案 在使用Albumentations的`ImageCompression`变换时,如果出现`quality_lower`参数被忽略的警告,通常是由于以下原因及解决方案: --- #### 1. **参数未成对使用** - **问题原因**:`ImageCompression`要求同时设置`quality_lower`和`quality_upper`参数。若仅设置其中一个,库会忽略该参数并采用默认值[^1]。 - **示例错误代码**: ```python ImageCompression(quality_lower=50, always_apply=False, p=0.5) # 缺少 quality_upper ``` - **解决方案**: ```python ImageCompression(quality_lower=50, quality_upper=100, always_apply=False, p=0.5) ``` --- #### 2. **版本兼容性问题** - **问题原因**:旧版本Albumentations(如1.0.0以下)可能对参数命名或行为有差异。 - **检查版本**: ```bash pip show albumentations ``` - **升级到最新版本**: ```bash pip install --upgrade albumentations ``` --- #### 3. **参数范围错误** - **问题原因**:`quality_lower`和`quality_upper`需满足: - 取值范围:`0 ≤ quality_lower ≤ quality_upper ≤ 100` - 若设置`quality_lower=100`且`quality_upper=100`,等同于无压缩。 - **正确示例**: ```python ImageCompression(quality_lower=50, quality_upper=90) # 压缩质量在50-90之间随机选择 ``` --- #### 4. **警告忽略(临时方案)** 若需临时屏蔽警告(不推荐长期使用): ```python import warnings warnings.filterwarnings("ignore", message="quality_lower parameter is ignored") ``` --- #### 验证代码 ```python from albumentations import ImageCompression import cv2 # 正确参数设置 transform = ImageCompression(quality_lower=50, quality_upper=100, p=1.0) image = cv2.imread("test.jpg") augmented = transform(image=image) # 应无警告 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值