【图像编解码】图像编解码技术简介

图像编码概述

相关概念:
图像采集与ISP
色彩空间,从RGB到YUV。视频工程师发现,眼睛对于亮和暗的分辨要比对颜色的分辨更精细一些,也就是说,人眼对色度的敏感程度要低于对亮度的敏感程度

将数字视频转换为YUV,用4:2:0采样方式获得1/2的压缩率。

所谓编码算法,即寻找规律,构建模型。谁能找到更精准的规律,建立更高效的模型,谁就是厉害的算法。

视频里的冗余信息分类:

种类描述
空间冗余静态图像中存在的主要冗余
时间冗余帧序列中相邻帧包含相同的背景或物体
构造冗余是不是编码冗余或熵冗余
知识冗余由于先验常识导致的信息冗余
视觉冗余由于人视觉系统的不完美,察觉不到某些细微的变化,导致比(应忽略人不可察觉细微)理想编码更多的数据
其他冗余

首先解决空间和时间冗余。

DCT

将N维实数变换为相应的系数,并可逆变换。

一维DCT

F(u)=2Nc(u)∑i=0N−1f(i)cos((2i+1)uπ2N) F(u) = \frac{2}{N}c(u)\sum_{i=0}^{N-1}f(i)cos(\frac{(2i+1)u\pi}{2N}) F(u)=N2c(u)i=0N1f(i)cos(2N(2i+1)uπ)

归一化,
2Nc(u)∑i=0N−1f(i)cos((2i+1)uπ2N) \sqrt{\frac{2}{N}}c(u)\sum_{i=0}^{N-1}f(i)cos(\frac{(2i+1)u\pi}{2N}) N2c(u)i=0N1f(i)cos(2N(2i+1)uπ)
f(i)f(i)f(i)相当于数组的索引,表示第i个元素

c(u)=1(2),u=0c(u)=1,u≠0 c(u) = \frac{1}{\sqrt(2)}, u = 0 \\ c(u) = 1, u \not = 0 c(u)=(2)1,u=0c(u)=1,u=0

二维DCT

8x8 2D DCT
F(u,v)=c(u)2c(v)2∑m=07∑n=07f(m,n)cos((2m+1)uπ16)cos((2n+1)vπ16) F(u,v) = \frac{c(u)}{2}\frac{c(v)}{2} \sum_{m=0}^7\sum_{n=0}^7f(m,n)cos(\frac{(2m+1)u\pi}{16})cos(\frac{(2n+1)v\pi}{16}) F(u,v)=2c(u)2c(v)m=07n=07f(m,n)cos(16(2m+1)uπ)cos(16(2n+1)vπ)

熵编码

熵编码需要离散信号的先验概率分布,该分布称为熵模型。

基于神经网络的编解码,将原始图像x转换为隐特征y,对该特征做熵编码。
注意区分y的边缘分布与熵模型,熵模型是参数化的。
神经网络学习获取估计熵模型的能力,即变分自编码器VAE。
Balle 2017的论文称与VAE相似。

量化

简单理解是从连续变量离散化为离散变量。

例子

JPEG 编码流程

Image
RGB
YCbCr
DCT
Quantization
Encoding
JPEG

图像分块,每块做DCT。
量化,使用一张精心设计的量化表,保留低频信息,去除高频信息。
zig-zag,每块的DC(直流部分)具体用Differential Pulse Modulation,相邻块间DC的差而非DC本身被压缩。
DPCM与RLE
霍夫曼编码与算术编码

JPEG 2000

Discrete Wavelet Transform是该技术的基础
JPEG 2000 包含Motion JPEG 2000,成为数字电影的视频编码标准。

视频编码

I帧:关键帧,自带全部信息的独立帧,完整画面。进行帧内编码。
P帧: 预测编码帧,对前面的I、P帧有依赖性。进行帧间编码。
B帧:双向预测编码帧,以前后帧为参考帧。不适合实时传输。

H264

x264代码

  1. 主函数:初始化参数x264_param_t,根据参数分配帧等内。
    C语言
    #define x264_encoder_glue1(x,y) x##y

质量评价

编码效果的评价包括主客观评价和客观评价。

客观评价指标

  • 峰值信噪比( peak signal noise ratio)
    PSNR=10lg[(2n−1)MSE] PSNR = 10lg[\frac{(2^n-1)}{MSE}] PSNR=10lg[MSE(2n1)]
    MSE为原图与编解码后图像的像素差的均方差;工程中首先求各张图像的MSE,再求多个数值的均值。

  • structural similarity

国际标准

ITU提出的H.26x系列
ISO/IEC提出的MPEG系列

1 Chroma Subsampling
Resolution of Cb Cr can be reduced by half or more.
Huffman coding.

Arithmetic encoding
Psychoacoustics
Psychovisuals

AI-codec

目标函数
Loss=λR+D Loss = \lambda R+D Loss=λR+D

编码参数

https://stackoverflow.com/questions/40668616/whats-the-difference-with-crf-and-qp-in-ffmpeg
qp、crf参数对比
https://slhck.info/video/2017/02/24/crf-guide.html
Constant Rate Factor is a little more sophisticated than that. It will compress different frames by different amounts, thus varying the QP as necessary to maintain a certain level of perceived quality.
进一步参考https://www.codenong.com/cs105772872/
QP参数的区间 0-51 https://www.vcodex.com/news/h264-quantization-parameter/

GPU并行编解码

https://stackoverflow.com/questions/44510765/gpu-accelerated-video-processing-with-ffmpeg

参考

  1. 数字视频编码技术原理
  2. A Concise Introduction to Data Compression ISBN-9781848000728
### 回答1: 1. 打开终端,输入以下命令安装fcitx输入法: sudo apt-get install fcitx fcitx-config-gtk fcitx-table-wubi 2. 安装完毕后,打开“系统设置”-“语言支持”,将“键盘输入法系统”设置为fcitx。 3. 重新启动电脑,打开任意文本编辑器,按下Ctrl+Space键即可切换输入法,选择中文输入法即可开始输入中文。 ### 回答2: 在Linux系统下安装中文输入法有多种方法,以下是其中一种较常见的方法: 1. 打开终端,输入以下命令安装fcitx输入法框架: sudo apt-get install fcitx 2. 安装后,再次在终端中输入以下命令安装fcitx的输入法引擎: sudo apt-get install fcitx-googlepinyin 3. 安装完成后,打开系统设置,找到“地区和语言”或“语言支持”选项,在“输入源”或“键盘输入法系统”中选择fcitx作为默认输入法。 4. 重新启动电脑,启动时会自动加载fcitx输入法框架。 5. 在系统托盘中找到输入法图标,右键点击选择“配置”,进入fcitx配置页面。 6. 在配置页面中,点击“+”号添加中文输入法。一般情况下,选择“pinyin”或“googlepinyin”作为中文输入法。 7. 完成上述步骤后,就可以在需要输入中文的应用程序中使用中文输入法了。在输入框中点击右键,选择“切换输入法”,或使用快捷键(默认为Ctrl + Space)进行切换。 需要注意的是,以上方法适用于大多数Linux系统,对于不同的发行版可能会有细微的差异。对于某些特定的发行版,也可以通过软件包管理器直接搜索和安装相应的中文输入法。另外,还可以通过其他输入法框架,如ibus,来安装和使用中文输入法。 ### 回答3: 要在Linux系统中安装中文输入法,可以按照以下步骤进行操作。 第一步,打开终端窗口,在终端中输入以下命令,以安装ibus输入法框架: sudo apt-get install ibus 第二步,再次在终端中输入以下命令,以安装ibus-pinyin中文输入法: sudo apt-get install ibus-pinyin 第三步,在终端中输入以下命令,以重新启动ibus服务: ibus restart 第四步,打开系统设置,选择“区域与语言”或类似选项,找到“输入源”或“输入法”,然后添加中文输入法。 第五步,在输入法选项中选择新添加的中文输入法,这样就完成了中文输入法的安装。 在使用中文输入法时,可以通过以下方法进行切换: 方法一,使用快捷键:按下Ctrl+空格键,切换输入法。 方法二,通过任务栏中的输入法图标:点击输入法图标,然后从弹出的菜单中选择所需的输入法。 安装中文输入法后,可以在几乎所有的应用程序中使用中文输入。通过切换输入法,可以方便地在中文和其他语言之间切换,满足自己的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值