视频编码技术---压缩感知编码---匹配跟踪算法

转自https://blog.csdn.net/rainbow0210/article/details/53386695

压缩感知近些年在学术界非常火热,在信号处理领域取得了很多非常不错的成果。

博主最近的项目涉及到K-SVD算法,所以也就顺带着学习其重要的组成部分——匹配跟踪算法。

本文只介绍最基本的匹配跟踪算法和正交匹配跟踪算法,即MP和OMP。

这个算法的优化和变形非常之多,近些年学术界很多人都在研究这个,有兴趣的读者可以自行查阅相关论文,本文不多做阐述。

废话少说,直接上干货。

所谓压缩感知,从名字就可以理解,压缩,即为数据压缩,例如将特征维度从很高降到很低;感知,即为压缩之后依然能够感知其特征的主体含义。

说白了,就是让一个10000维的特征降到10维,但是分类效果不变,当然,这个例子有点夸张。

这里需要一个叫做词典的东西,这个东西和生活中的词典是一样的。既然是词典自然要有索引(压缩感知里称之为‘原子’),在这里即为一个词典矩阵D的每一个列向量,我们希望能将原信号尽可能表示成词典中尽可能少的原子的线性组合。

那么这里就有两个关键点:

原子的数目尽可能少

该线性组合要最大限度地恢复原信号的内容

这里理解不了的朋友可以想象一下三维空间中的向量,是不是都可以分解成x,y,z上的向量的矢量和?对,差不多就是这个意思,当然,其中还是差很多的,有个直观的感觉就好,继续看下文就明白了。

表达成数学形式就是这个样子:

其中,x是原信号,一个列向量,大小为N*1;D是词典,一个矩阵,大小为N*M; γγ 则是待求的稀疏表达,大小为M*1,我们希望 γγ 中的非零项的个数不大于K,同时其与原信号的误差不大于 ??。

通常K是远远小于M的,即 γγ 里的元素基本全为0,这既是‘稀疏表达’的由来,也是能够给特征降维的原因。

这里不讨论字典是怎么得到的,因为这是下篇文章,即K-SVD的内容。不过字典不一定是通过机器学习得到的,小波什么的也可以作为字典来使用。

MP算法

匹配跟踪算法,即MP算法,是一种基于迭代的贪婪算法。其大致思想为:

每次找到字典中与当前信号最为相关的原子,将其作为稀疏表达的一项,计算其误差,将误差视为新的信号重复以上步骤,直至满足终止条件。最终,信号就被表示成了若干个原子的线性组合和一个误差项,在压缩感知中,我们称这个误差项为‘残差’。

那么这里有两个关键点需要注意:

什么是与当前信号最为相关的原子?

如何构建稀疏表达并计算残差?

对于第一个问题,我们定义与当前信号的内积最大的原子(这里的原子需要进行归一化处理,即模长为1)即为最相关的原子。
说的直观点,例如二维空间,就是将当前信号和原子分别视为空间中的向量,其与当前信号夹角最小的原子即为最相关的原子。

对于第二个问题,由于我们通过上一步找到了这样的一个原子,并将原信号通过该原子进行表达,但原信号中还有一部分是这个原子不能够表达的(想一下N维空间中的矢量分解就明白了),那么这部分作为残差依然可以继续分解下去,于是便得到了原信号的系数表达和最终的残差。

MP算法的伪代码表述如下:

输入:字典矩阵ΦΦ,原信号yy
输出:重建目标信号xx
初始化:x=0,r=y,k=0x=0,r=y,k=0
当没有满足终止条件时,则循环执行步骤(1)~(4)
(1) k=k+1k=k+1
(2) λ=argmaxλ{<rk?1,?λ>?λ||?λ||2}λ=argmaxλ{<rk?1,?λ>?λ||?λ||2}
(3)x=x+<rk?1,?λk>?λk||?λk||2x=x+<rk?1,?λk>?λk||?λk||2
(4)r=r?Φxr=r?Φx
其中<x,y><x,y>表示向量x与向量y的内积。
这里有几点需要注意,每次循环产生的残差都与当前所选择的原子是正交的,从(2)不难推出。残差的值是越来越小的,所以算法必然收敛,这个大家知道就好,至于怎么证就无关紧要了。

匹配跟踪算法在重建原始信号的应用中是很实用的,但是它有两个缺点:
(1)这个方法不能保证重建误差足够小
(2)这个算法往往需要大量的循环次数才能逼近原始信号,如果残差在已选择的原子进行垂直投影是非正交性的,则会使得每次循环的结果并不是最优的,而是次优的,收敛需要很多次循环。说通俗点,就是我在地N次循环中选择的是原子a,第N+M次循环中可能选择的也是原子a,但实际上,这两次循环我们更期望合成为一次,即每次循环中都选择不同的原子,从而大大减少循环的次数。

通过改进上述缺点,便有了如下的OMP算法。

OMP算法

正交匹配跟踪算法,即OMP算法。该算法中,残差总是和已选取的原子正交,这样就能够保证相同的原子在OMP中不会被选中两次,进而减少算法的循环次数。

理论上来讲,可以通过施密特正交化来生成一个正交的词典,但其复杂度之高是我们所不能接受的。

OMP算法伪代码:

输入:字典矩阵ΦΦ,原始信号yy,稀疏度KK,标识待重建信号中非零元素位置的索引集ΛΛ
输出:重建信号xx
初始化:x=0,r=yx=0,r=y,循环标识k=0k=0,索引集Λ0Λ0为空集

当没有满足结束条件时,循环执行步骤(1)~(6)
(1)k=k+1k=k+1
(2)找出残余分类r与采样举证中最匹配原子的索引λkλk,即
λk=argmax{|<rk,?k>|}
λk=argmax{|<rk,?k>|}

(3)更新索引集Λk=Λk?1∪{λk}Λk=Λk?1∪{λk},并更新相应擦爱养矩阵中的列集合Φk=[Φk?1,?λk]Φk=[Φk?1,?λk]
(4)重建目标信号,x=Φ+yx=Φ+y,其中,Φ+Φ+表示矩阵ΦΦ的伪逆
(5)更新残差r=y?Φkxr=y?Φkx
(6)判断是够满足k>Kk>K,若满足则停止循环;若不满足,则执行步骤(1)
OMP保证了每次算法迭代的最有型,减少了迭代的次数。但是,它在每次迭代中仅选取一个元素来更新已选元素的集合,迭代的次数与稀疏度K或采样个数M密切相关,并且其中还有一个正交化的过程,随着K和M的增加,运算时间也会大幅增加。

由于存在上述缺点,大量的科研工作者针对此算法做出了各种各样不同的优化,有兴趣的读者可以自行查阅相关论文。

原文地址:https://www.cnblogs.com/qing1991/p/10085911.html

时间: 2024-10-09 20:00:42

视频编码技术---压缩感知编码---匹配跟踪算法的相关文章

3D-HEVC视频编码技术

3D-HEVC编码框架 3D-HEVC编码结构是对HEVC的扩展,每个视点纹理及深度图编码主要采用HEVC编码框架,但在其基础上增加了一些新的编码技术,使其更有利于深度图和多视点的编码. 图1 3D-HEVC编码结构 如上图所示,3D-HEVC编解码结构和MVC类似.图中所有输入的视频图像和深度图像是同一时刻,不同拍摄位置的场景,这些图像组成一个存取层.在同一个存取层中,首先对独立视点(基准视点)编码,接着是该视点的深度图,再编码其他视点视频图像和深度图.原理上来说,每个视点的图像,包括视频图像

数字图像处理,初识压缩感知Compressive Sensing

声明: 本文为转载, 原作者Rachel-Zhang. 原博客地址:http://blog.csdn.net/abcjennifer 原文地址,http://blog.csdn.net/abcjennifer/article/details/7721834/ 压缩感知是近年来极为热门的研究前沿,在若干应用领域中都引起瞩目.最近粗浅地看了这方面一些研究,对于Compressive Sensing有了初步理解,在此分享一些资料与精华.本文针对陶哲轩和Emmanuel Candes上次到北京的讲座中对

压缩感知综合理解篇

进来看稀疏编码的问题,看的内容多了,跟压缩感知的知识有些混淆,好乱,偶然看了几篇博文,在这里澄清下他们之间的关系 实际上:压缩感知只是借用稀疏表示为工具,来实现信号重构, 压缩传感理论主要包括信号的稀疏表示.编码测量和重构算法等三个方面.信号的稀疏表示就是将信号投影到正交变换基时,可以将其看作原始信号的一种简洁表达.这是压缩传感的先验条件.在编码测量中,必须满足约束等距性条件,最后, 运用重构算法重构原始信号.:D 一.稀疏编码和压缩感知的对比 在压缩感知模型中:   y=Ax+n   (1)

视频直播技术-视频-编码-传输-秒开等&lt;转&gt;

转载地址:http://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=2653547042&idx=1&sn=26d8728548a6b5b657079eeab121e283&scene=21#wechat_redirect 现今移动直播技术上的挑战要远远难于传统设备或电脑直播,其完整的处理环节包括但不限于:音视频采集.美颜/滤镜/特效处理.编码.封包.推流.转码.分发.解码/渲染/播放等. 视频.直播等基础知识 什么是视频?

H264编码技术

H.264的目标应用涵盖了眼下大部分的视频服务,如有线电视远程监控.交互媒体.数字电视.视频会议.视频点播.流媒体服务等.H.264为解决不同应用中的网络传输的差异.定义了两层:视频编码层(VCL:Video Coding Layer)负责高效的视频内容表示,网络提取层(NAL:Network Abstraction Layer)负责以网络所要求的恰当的方式对数据进行打包和传送.如图3.19所看到的.    图3.19  标准的总体框架 基本层次(Baseline Profile):该层次使用了

H264编码技术[3]

H.264的目标应用涵盖了目前大部分的视频服务,如有线电视远程监控.交互媒体.数字电视.视频会议.视频点播.流媒体服务等.H.264为解决不同应用中的网络传输的差异.定义了两层:视频编码层(VCL:Video Coding Layer)负责高效的视频内容表示,网络提取层(NAL:Network Abstraction Layer)负责以网络所要求的恰当的方式对数据进行打包和传送.如图3.19所示.    图3.19  标准的整体框架 基本层次(Baseline Profile):该层次使用了H.

【视频编解码&#183;学习笔记】8. 熵编码算法:基本算法列举 &amp; 指数哥伦布编码

一.H.264中的熵编码基本方法: 熵编码具有消除数据之间统计冗余的功能,在编码端作为最后一道工序,将语法元素写入输出码流 熵解码作为解码过程的第一步,将码流解析出语法元素供后续步骤重建图像使用 在H.264的标准协议中,不同的语法元素指定了不同的熵编码方法.在协议文档中共指定了10种语法元素的描述符,这些描述符表达了码流解析为语法元素值的方法,其中包含了H.264标准所支持的所有熵编码方法: 语法元素描述符 编码方法 b(8) 8位二进制比特位串,用于描述rbsp_byte() f(n) n位

基于哈夫曼编码的压缩解压程序

这个程序是研一上学期的课程大作业.当时,跨专业的我只有一点 C 语言和数据结构基础,为此,我查阅了不少资料,再加上自己的思考和分析,实现后不断调试.测试和完善,耗时一周左右,在 2012/11/19 完成.虽然这是一个很小的程序,但却是我完成的第一个程序. 源码托管在 Github:点此打开链接 一.问题描述: 名称:基于哈夫曼编码的文件压缩解压 目的:利用哈夫曼编码压缩存储文件,节省空间 输入:任何格式的文件(压缩)或压缩文件(解压) 输出:压缩文件或解压后的原文件 功能:利用哈夫曼编码压缩解

【0day shellcode编写艺术】—— jmp esp、动态获取api。后续:编码、压缩

此次主要徒手体会了一下编写shellcode 的不容易.当真不容易,看着作者的代码,都感觉自己无处可以下手了. 需要的底层原理知识也还挺多需要补充上去的. 打算后期再逐渐补充.目前阶段将jmp esp弄懂了.后面动态获取api在主机上出错了.问题和搜索jmp esp代码时候貌似一样,产生访问越权的问题.后期再继续解决吧. 目前整理一下整个的思路. 1.shellcode.expoit的概念: 2.为了更好的注入shellcode,里程碑式的方法.使用jmp esp. 3.后续:动态获取api.编