Multimedia-Ajax-Lecture4

本文深入探讨数据压缩的基础,包括无损与有损压缩的概念,以及压缩比的计算。重点讲解了RLC行程编码、VLC可变长度编码(如霍夫曼编码)和算术编码的原理与应用。霍夫曼编码以其最小冗余码和平均bit长度优势被广泛使用。算术编码在JPEG和JPEG2000中得到应用,虽接近信息熵下限但计算复杂。了解这些编码技术对于优化数据存储和传输至关重要。

本期主题:数据压缩基础
重点掌握:RLC行程编码,VLC可变长度编码,算术编码。

无损压缩,有损压缩,字面意思

压缩比 C_ratio = Bit_before/Bit_after

常见的熵编码有:香农(Shannon)编码、哈夫曼(Huffman)编码和算术编码(arithmetic coding)。RLC不算熵编码。  

Information Theory信息论基础

Probability Distribution Function (PDF):概率分布函数,表示数据集中每个元素出现的概率。

信息论之父:香农

信息熵Entropy计算公式:

信息熵计算示范:

信息熵的意义:定义了每个字符占用bit数的下限,可以理解为任何编码存储得到的平均bit数,一定大于等于1.9bits。

对于一个256的灰度图片,如果他的每个像素值出现概率均等,那么可以计算它的熵为

所以对于此图片的元素平均占bit位最少为8.

Run_length Coding行程编码

用数字表示重复字符,重复字符多才有意义

二进制文件总是01,RLC可以有效压缩。



Variable_Length Coding可变长度编码

香隆算法:按照出现频率分割元素树。自上而下
霍夫曼算法:自下而上,合并成树。
霍夫曼code优点:最小冗余码,平均bit长度

可谓非常优秀了


霍夫曼编码Huffman Coding
一个文件中有不同的字母,正常都是占一个字节,但是可能也不需要8bits这么多字节,如果字符数量比较少的的话,而且每个字符出现的频率也是不一样的,那么很朴素的想到,就是使用较少的bit去记录频率比较高的字符,长bit去记录频率低的的字符,这样最后出来的bits用量就经可能少。
要进行huffman编码:
1要知道所以的字符,以及每个字符出现的频率.
2然后计算霍夫曼字典huffmandict
3有了字典就可以对字符串编码和解码

考点,掌握手动计算Huffman字典的方法

Arithmetic Coding算术编码

JPEG and JPEG2000使用了算数编码
非常接近bit下限,但是计算复杂。
算术编码结果是一个十进制小数,在一个左闭右开区间。

需要对结果进行十进制小数到二进制小数转换,找到一个属于区间的二进制小数。


二进制小数在线转换器​​​​​​​

在 Linux 系统中安装 `Qt5Multimedia` 和 `LCM` 库并解决链接错误(`cannot find -lQt5Multimedia` 和 `cannot find -llcm`)的完整步骤如下: --- ### **1. 安装 Qt5Multimedia** #### **Ubuntu/Debian 系统** ```bash # 安装 Qt5Multimedia 运行时库和开发包 sudo apt update sudo apt install libqt5multimedia5 libqt5multimedia5-plugins qtmultimedia5-dev # 验证安装(检查库文件是否存在) ls /usr/lib/x86_64-linux-gnu/libQt5Multimedia.so* ``` #### **CentOS/RHEL 系统** ```bash # 启用 EPEL 仓库(如果需要) sudo yum install epel-release # 安装 Qt5Multimedia sudo yum install qt5-qtmultimedia qt5-qtmultimedia-devel # 验证安装 ls /usr/lib64/libQt5Multimedia.so* ``` --- ### **2. 安装 LCM 库** #### **方法一:通过源码编译安装(推荐)** ```bash # 安装依赖 sudo apt install build-essential cmake libglib2.0-dev # Ubuntu/Debian sudo yum install gcc-c++ cmake glib2-devel # CentOS/RHEL # 下载并编译 LCM git clone https://github.com/lcm-proj/lcm.git cd lcm mkdir build && cd build cmake .. make sudo make install # 验证安装 ls /usr/local/lib/liblcm.so* ``` #### **方法二:通过包管理器安装(仅限部分发行版)** ```bash # Ubuntu/Debian(可能版本较旧) sudo apt install liblcm-dev # CentOS/RHEL(需手动添加仓库或使用源码) ``` --- ### **3. 配置动态链接库路径** 如果安装后仍报错,可能是系统未找到库文件路径: ```bash # 临时生效(当前终端) export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH # 永久生效(添加到 ~/.bashrc 或 /etc/ld.so.conf) echo "/usr/local/lib" | sudo tee -a /etc/ld.so.conf sudo ldconfig ``` --- ### **4. 在 CMake 项目中正确链接库** 确保 `CMakeLists.txt` 中包含以下内容: ```cmake # 查找 Qt5Multimedia find_package(Qt5 COMPONENTS Multimedia REQUIRED) # 查找 LCM find_package(LCM REQUIRED) # 链接到目标 target_link_libraries(your_target Qt5::Multimedia lcm ) ``` --- ### **5. 验证安装结果** #### **检查 Qt5Multimedia** ```bash # 检查库文件 pkg-config --modversion Qt5Multimedia # 输出示例:5.15.2 ``` #### **检查 LCM** ```bash # 检查库版本 lcm-gen --version # 输出示例:1.4.0 ``` --- ### **6. 常见问题解决** #### **问题1:仍提示 `cannot find -lQt5Multimedia`** - **原因**:Qt5 库路径未正确识别。 - **解决**: ```bash # 显式指定库路径 sudo ln -s /usr/lib/x86_64-linux-gnu/libQt5Multimedia.so /usr/lib/ ``` #### **问题2:LCM 运行时错误** - **原因**:未设置 `LCM_DEFAULT_URL` 环境变量。 - **解决**: ```bash echo "export LCM_DEFAULT_URL=udpm://239.255.76.67:7667?ttl=1" >> ~/.bashrc source ~/.bashrc ``` --- ### **附:卸载方法** ```bash # 卸载 Qt5Multimedia sudo apt remove libqt5multimedia5 qtmultimedia5-dev # Ubuntu/Debian sudo yum remove qt5-qtmultimedia-devel # CentOS/RHEL # 卸载 LCM sudo rm -rf /usr/local/lib/liblcm* /usr/local/include/lcm ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值