自适应 H.264 压缩域视频水印嵌入与提取方法 技术领域 本发明涉及的是一种信息安全技术领域的方法, 具体是一种基于运动矢量的自适 应 H.264 压缩域视频水印嵌入与提取方法。
背景技术 随着互联网技术的普及, 网络成为继报纸、 电视之后人们的主要信息来源之一。 而 网络视频因其信息量大, 内容实时性高等特点而广受青睐。 然而由于上传视频的数量庞大, 网站对于上传视频内容往往缺乏全面而有效的审核手段, 视频网站上对视频进行非法授权 拷贝并再次发布的情况屡见不鲜, 网络视频内容监管等问题日益凸显。 针对这一需求, 利用 视频水印技术可以达到版权保护, 视频来源鉴定等目的。
FLV(Flash Video 的简称 ) 由于其封装形成的文件极小、 加载速度极快等特点 使得网络观看视频成为可能。目前几乎所有大型网络视频均采用 FLV 格式进行封装。而 H.264/AVC 是最新一代的视频压缩编码标准, 与其前一代 H.263 编码标准相比, 无论在压缩
率还是在视频清晰度等各方面都有大幅度改进, 因此主流视频网站基本选择 H.264/AVC 进 行压缩编码。本方案针对的就是主流视频网站所使用的, 由 H.264/AVC 进行压缩编码, 由 FLV 进行封装的网络视频。目前, 针对这一格式的视频水印算法鲜有报道, 成熟系统尚未见 到。因此, 本专利研究内容具有唯一性和先进性。
经过对现有技术的检索发现, 中国专利文献号 CN101583033, 公开日 2009.11.18, 记载了一种 “利用鲁棒水印保护 H.264 视频数据的方法” , 该技术使用了运动矢量作为载体 进行水印的嵌入, 但其采用重新完全运动估计产生运动矢量的方法, 时间复杂度极高, 不符 合网络视频大数据量的处理要求 ; 论文 “基于 H.264/AVC 的视频流媒体水印技术研究” (李 俊杰 . 基于 H.264/AVC 的视频流媒体水印技术研究 [D]. 湖南大学, 2009) 中提到针对 H.264/AVC 的运动矢量水印嵌入方法, 但其采用固定的阈值进行运动矢量的选取, 鲁棒性不 高, 嵌入容量较少。 上述两类研究均存在一定的不足, 而本专利的研究针对上面的不足提出 改进的方法, 其性能表现 : 实时性好, 计算复杂度低, 鲁棒性好, 容量较大等优点, 满足大规 模网络视频版权跟踪和保护等应用。
考虑到如今网络视频内容种类丰富, 播放时间短等特点 ( 即使是长视频也经常被 分段进行播放 ), 对网络视频嵌入水印需要一定的水印容量, 使得在一定数量的帧之间至少 嵌入水印一次。如若选择固定的阈值, 则对视频的适应性较差。例如, 对于固定背景的新闻 播报视频, 运动矢量幅值普遍较小, 如果预先设定的阈值较大则有可能出现无法达到水印 容量的需求。如果预先设定较小的阈值, 那么遇到运动较为激烈的视频则有可能出现在一 帧内嵌入水印过多而导致图像失真的情况。
对于修改运动矢量残差造成的漂移失真需要进行补偿, 普通的补偿效果较差, 重 新执行运动估计过程虽然可以避免误差扩散但计算复杂度高, 效率极低。
因此, 上述现有技术都能在一定限度上实现水印的嵌入, 但在水印容量、 实现效率 以及计算复杂度等方面都有所欠缺。发明内容 本发明针对现有技术存在的上述不足, 提供一种自适应 H.264 压缩域视频水印嵌 入与提取方法, 可实现视频信息隐藏的实时性操作 ; 运动矢量的阈值选取根据邻近帧的水 印嵌入量统计数据进行自适应地调整, 使得水印容量得以保证, 从而实现少量帧间隔内嵌 入一次水印的需求 ; 修改运动矢量导致的误差扩散通过部分帧间预测的方式进行精确定 位, 可以得到较好效果的漂移失真补偿。
本发明是通过以下技术方案实现的 :
本发明涉及一种基于运动矢量的自适应网络视频水印嵌入方法, 包括以下步骤 :
第一步 : 将待隐藏水印信息进行扩展编码, 增加同步标志, 具体为 :
1.1) 首先将隐藏信息 m 转换为二进制比特序列 B ;
1.2) 对二进制比特序列 B 进行置乱得到置乱比特序列 B’ ;
1.3) 对置乱比特序列 B’ 进行编码, 得到最终待嵌入水印序列 W ;
所述的置乱具体是指 : 将 N 个比特位的一维水印序列 A[0, 1, 2, ......, N-1] 转换 为序列 B, 其中 : B(i) = A((i×P)mod N), i = 0, 1, 2, ......, N-1, P 为与 N 互素的最小正 整数, 序列 B 为置乱序列, 其长度为 N。
所述的编码具体是指 : 对置乱后的水印序列进行检测, 每次检测 “11111” 序列则 将其修改为 “111110” , 最后将处理过的水印序列反复串连, 水印与水印之间使用固定的 8 比特二进制串 “01111110” 进行分隔。
第二步 : 对视频进行部分解码, 获得运动矢量, 根据阈值判断运动矢量并嵌入水 印, 具体为 :
2.1) 解码 FLV 封装格式, 获得 H.264 中 NAL 层数据 ;
2.2) 熵解码获得 P 片中尺寸为 16×16 的 P 宏块运动矢量 ;
2.3) 选取运动矢量幅值大于当前阈值的宏块, 修改其运动矢量残差的奇偶性进行 水印嵌入 ;
所述的阈值是指 : 满足条件的运动矢量幅值下限, 运动矢量幅值大于该下限的宏 块, 且满足当前帧水印嵌入量未达到单帧嵌入量上限, 将被选择进行水印的嵌入。
所述的熵解码是指 : 采 用 CAVLC( 基 于 上 下 文 自 适 应 的 可 变 长 编 码 ) 或 是 CABAC( 基于上下文的自适应二进制算术熵编码 )。
所述的水印的嵌入是指 : 计算运动矢量垂直与水平分量平方和的开方值, 当该值 大于当前阈值且当前帧水印嵌入量未达到单帧嵌入量上限, 则选择该宏块的运动矢量两个 分量中绝对值较大者进行水印嵌入, 当需要嵌入的比特为 0, 则修改该分量方向的运动矢量 残差使其为偶数 ; 当需要嵌入的比特为 1, 则为奇数 ;
2.4) 记录被修改宏块的位置信息与改变值 ;
第三步 : 对未符合阈值条件的宏块进行帧间预测中的运动补偿, 由其空间域预测 所参考的宏块决定是否进行漂移补偿。
所述的帧间预测中的运动补偿包括 : 运动估计和运动补偿, 其中 : 运动估计是搜 索每个宏块在邻近帧中的位置, 并得出两者之间的空间位置相对偏移量, 即运动矢量的过 程; 运动补偿指根据邻近先前已编码的宏块进行空间域 / 时间域预测, 预测得到的运动矢
量预测值与运动估计得到的矢量之差称作运动矢量残差, 作为帧间预测结果进行后续编 码。
所述的空间域预测是指 : P 宏块在运动补偿过程中使用空间域预测来产生运动矢 量预测值。
所述的漂移补偿是指 : 减少因水印嵌入而造成误差扩散 ( 漂移失真 ) 的方法。
第四步 : 当一帧嵌入完毕后, 统计之前已编码的 N 帧中水印总量, 与当前阈值等级 中水印嵌入量的上下限进行比较, 大于上限则选择较小阈值的等级, 小于上限则选择较大 阈值的等级, 否则阈值等级不变, 该等级阈值作为下一帧水印嵌入宏块选取的运动矢量临 界下限。
本发明涉及上述自适应网络视频的水印提取方法, 包括以下步骤 :
步骤一 : 解码 FLV 封装格式, 获得 H.264 中 NAL 层数据。
步骤二 : 熵解码获得 P 片中尺寸为 16×16 的 P 宏块运动矢量。
步骤三 : 选取运动矢量幅值大于当前阈值的宏块, 根据其运动矢量残差的奇偶性 进行水印提取。
其中阈值是指满足条件的运动矢量幅值下限, 运动矢量幅值大于该下限的宏块, 且满足当前帧水印嵌入量未达到单帧嵌入量上限, 将被选择进行水印的提取。 所述的提取水印是指 : 计算运动矢量垂直与水平分量平方和的开方值, 当该值大 于当前阈值且当前帧提取的水印数量未达到单帧嵌入量上限, 则选择该宏块的运动矢量两 个分量中绝对值较大者进行水印提取, 当选取的运动矢量残差为偶数则水印比特为 0 ; 否 则为 1。
步骤四 : 当一帧提取完毕后, 统计之前已编码的 N 帧中水印总量, 与当前阈值等级 中水印嵌入量的上下限进行比较, 大于上限则选择较小阈值的等级, 小于上限则选择较大 阈值的等级, 否则阈值等级不变, 该等级阈值作为下一帧水印提取宏块选取的运动矢量临 界下限。
步骤五 : 对提取出的水印进行解码反置乱, 具体步骤如下 : 将长度为 N 个比特位的 一维置乱水印序列 A[0, 1, 2, ......, N-1] 变换为序列 B, 其中 : B((i×P)mod N) = A(i), i = 0, 1, 2, ......, N-1, P 为与 N 互素的最小正整数, 序列 B 的长度为 N, 然后进行以下译码 : 当识别出 “111110” 序列则将序列修改为 “0” ; 当识别 “111111” 序列则表明一段水印提取 结束, 跳过下一比特继续解码。
本发明根据自适应阈值选取合适的运动矢量进行水印嵌入。 自适应阈值的机制可 以保证水印容量足够大, 从而达到可以从任意视频位置提取完整水印的目的 ; 对未嵌入水 印的宏块进行基于部分帧间预测的漂移补偿可以很大程度上防止误码的扩散, 从而将水印 嵌入所引起的视频失真程度降至最低。 对水印进行预处理并利用特殊标示作为同步位可以 用于防止帧置乱。帧丢失、 帧替换等攻击, 增强水印对于帧间攻击的鲁棒性 ; 使用部分解码 与部分帧间预测可提高使水印嵌入和提取的效率, 以保证对网络视频操作的实时性。
附图说明
图 1 是本发明嵌入步骤流程图。 图 2 是本发明提取步骤流程图。具体实施方式
下面对本发明的实施例作详细说明, 本实施例在以本发明技术方案为前提下进行 实施, 给出了详细的实施方式和具体的操作过程, 但本发明的保护范围不限于下述的实施 例。
实施例 1
第一步 : 将待隐藏水印信息进行扩展编码, 增加同步标志, 具体为 :
a) 首先将隐藏信息 m 转换为二进制比特序列 B ;
b) 对二进制比特序列 B 进行置乱得到置乱比特序列 B’ ;
c) 对置乱比特序列 B’ 进行编码, 避免其中出现与同步标志相同的比特流 ;
置乱方法具体如下所示 :
现有 N 比特一维水印序列 A[0, 1, 2, ......, N-1], 选取与 N 互素的最小正整数 P, 长度为 N 的序列 B 用于临时存放结果。
执行如下变换 :
a)B(i) = A((i×P)mod N), i = 0, 1, 2, ......, N-1 b)A = B
重复多次执行上述变换, 即可实现对一维序列进行置乱。
本方案借鉴了 HDLC 规程中的帧间隔符的方法。将相同的置乱后的水印序列串连, 水印与水印之间使用固定的 8 比特二进制串 “01111110” 进行分隔。但无法避免水印序列 本身出现与分隔符 “01111110” 相同码流的情况, 如果不进行处理则会在提取水印过程无法 寻找到正确的分隔符。为了防止水印序列中出现与分隔符相同的码字, 对置乱后的水印序 列进行进一步编码, 一旦遇到连续的 5 个” 1” , 则自动在其后附上 1 个” 0” , 然后继续检测后 续的比特流。
第二步 : 对视频进行部分解码, 获得运动矢量, 根据水印比特序列与当前阈值等级 信息选取合适的运动矢量, 改变运动矢量奇偶性嵌入水印, 具体为 :
a) 解码 FLV 封装格式, 获得 H.264 中 NAL 层数据 ;
熵解码获得 P 片中尺寸为 16×16 的 P 宏块运动矢量 ;
FLV 封装的网络视频中由于其自身画面尺寸较小, 并没有充分使用到 H.264/AVC 中帧间预测中的树状结构运动补偿, 经实际测试统计知 P 片的绝大部分是由 16×16P 宏块 构成。 若是选择分割尺寸更小的宏块, 如 8×8 甚至 4×8 或 8×4, 会降低水印对视频质量的 影响, 但由于其数量上的缺乏将导致水印嵌入的容量无法得到保证。而对视频质量的影响 可以通过后续的误差补偿进行修正, 因此这里选取 P 片中尺寸为 16×16 的 P 宏块进行水印 的嵌入。
选取运动矢量幅值大于当前阈值的宏块, 修改其运动矢量残差的奇偶性进行水印 嵌入, 具体为 :
i. 计算运动矢量的水平分量 MVX 与垂直分量 MVY 的平方和的开方ii. 如果计算得出的运动矢量幅值大于阈值, 且当前帧水印嵌入量未达到单帧嵌 入量上限, 则选择该宏块进行水印嵌入 ;iii. 修改运动矢量中绝对值较大的分量 ;
iv. 水印的嵌入利用运动矢量残差的奇偶性, 如果需要嵌入的比特 bit 为 0, 则修 改选取的运动矢量残差 MVD 使其为偶数 ; 如果需要嵌入的比特 bit 为 1, 则修改运动矢量残 差 MVD 使其为奇数 ;
v. 记录被修改宏块的位置信息与改变值 ;
具体嵌入方法总结为如下公式 :
从运动矢量的生成过程可知, 运动矢量表示了该宏块所属运动物体相对于邻近帧 的运动幅度大小。运动矢量绝对值较大的宏块一般可以认为该宏块运动的幅度较大, 即该 宏块属于视频中处于激烈运动的物体的一部分。考虑到人眼视觉系统的特性, 一般对静止 物体的改变较为敏感。设想即使运动幅度很大的物体增加或较少微小偏移量也较难被察 觉。因此, 本方案设定阈值, 选择运动矢量幅值较大宏块中较大幅值的分量进行水印嵌入。
第三步 : 对未嵌入运动矢量宏块进行部分帧间预测, 如果该宏块在运动矢量空间 域预测中所参考的是被由于嵌入水印而被修改的宏块, 则对其进行漂移补偿。
漂移补偿是针对水印嵌入后减小对视频影响的方法。一方面, 水印的嵌入会造成 视频质量的下降以及视觉上的失真。通过漂移补偿可以一定程度上降低上述不良影响。另 一方面, 解码端最终获得的运动矢量是由运动矢量预测值与运动矢量残差值相加得到的, 其中运动矢量残差是直接进行传输的数据, 在不考虑攻击的情况下可以认为该数据与编码 端嵌入水印时的数据相同。但是运动矢量预测值是根据已经解码的数据产生的。P 片的预 测值的生成方式为空间预测 :
例如, E 为当前 16×16 宏块。A、 B、 C 分别为 E 左、 上、 右上方的三个相对应块。宏 块 E 的 MVP 预测取值为 A、 B、 C 的 MV 的中值。例如 MVA = 3, MVB = 4, MVC = 5, 则宏块 E 的 MVP 为 4。
由此可知, 已编码宏块运动矢量分量 MV 会影响后续宏块运动矢量预测值 MVP, 而 后续宏块的 MV = MVP+MVD, 其中 MVD 为运动矢量残差。 这种影响会不断扩大, 称之为失真漂 移。
漂移补偿的具体步骤如下 : a) 对当前宏块进行空间运动矢量预测, 找出当前宏块运动矢量预测值所参考的宏块; b) 读取由于水印嵌入而被修改的宏块统计信息, 如当前宏块的预测值由被修改过 的宏块预测产生, 则根据参考宏块的修改量对当前宏块的运动矢量残差进行反向修改 ;
c) 如果宏块的预测值由未修改过的宏块预测产生, 则不进行修改 ;
第四步 : 当一帧嵌入完毕后, 统计之前已编码的 N 帧中水印总量, 与当前阈值等级 中水印嵌入量的上下限进行比较, 大于上限则选择较小阈值的等级, 小于上限则选择较大 阈值的等级, 否则阈值等级不变, 该等级阈值作为下一帧水印嵌入宏块选取的运动矢量临 界下限。
由于邻近帧之间的相关性, 由前 N 帧的运动矢量统计数据可以为后续帧可能的运 动矢量提供参考。方案中设置了多个等级的阈值, 各个等级阈值都有如下 5 个数据。
■阈值
■参考帧数
■嵌入临界上限
■嵌入临界下限
■单帧最大嵌入量
其中阈值 T 是满足运动矢量嵌入条件的运动矢量两个分量平方和开方的下限 ; 参 考帧数 N 根据经验数值设置 ; 嵌入临界上限 MAX/ 下限 MIN 表明从当前帧开始的前 N 帧嵌入 水印强度至多为 MAX/ 至少为 MIN, 超过临界或未达到临界则表明当前阈值已经不适合下一 帧继续使用, 需要调整阈值等级。
例如, 对于阈值为 X 的等级, 参考帧数为 N, 上下限分别为 max 和 min, 单帧最大嵌 入量为 I。
■如果之前连续 N 帧 P 片内满足绝对值大于 X 的运动矢量总数小于 min, 则说明当 前阈值较大而图像运动幅度小, 无法获得足够的运动矢量进行嵌入, 所以阈值需要选择上 一数值较小的等级作为后续一帧的阈值。
■如果连续 N 帧 P 片内满足绝对值大于 X 的运动矢量总数大于 max, 则说明当前阈 值选择得较小而图像运动幅度较大, 被修改的运动矢量过多, 所以阈值需要选择下一数值 较大的等级作为后续一帧的阈值。
■如果连续 N 帧 P 片内满足绝对值大于 X 的运动矢量总数在 min 与 max 之间, 则 说明当前阈值的选择合适, 后续一帧继续使用当前阈值。
第五步 : 重新熵编码, FLV 封装视频。
本发明涉及一种基于运动矢量的自适应网络视频水印提取方法, 具体包括以下步 骤:
步骤一 : 解码 FLV 封装格式, 获得 H.264 中 NAL 层数据 ;
步骤二 : 熵解码获得 P 片中尺寸为 16×16 的 P 宏块运动矢量 ;
步骤三 : 选取运动矢量幅值大于当前阈值的宏块, 根据其运动矢量残差的奇偶性 进行水印提取, 具体为 :
a) 计算运动矢量的水平分量 MVX 与垂直分量 MVY 的平方和的开方b) 如果计算得出的运动矢量幅值大于阈值, 且当前帧提取的水印数量未达到单帧 嵌入量上限, 则选择该宏块进行水印提取 ;
c) 寻找该宏块运动矢量残差中绝对值较大的分量 ;
d) 根据运动矢量残差数值的奇偶性提取水印, 如果选取的运动矢量残差 MVD 为偶 数, 则水印比特为 0 ; 否则为 1。
第四步 : 当一帧提取完毕后, 统计之前已编码的 N 帧中水印总量, 与当前阈值等级 中水印嵌入量的上下限进行比较, 大于上限则选择较小阈值的等级, 小于上限则选择较大 阈值的等级, 否则阈值等级不变, 该等级阈值作为下一帧水印提取宏块选取的运动矢量临 界下限。步骤五 : 水印提取完毕, 根据同步位对水印序列进行反扩展解码, 并反置乱获得隐 藏信息, 具体为 :
解码步骤如下 :
a) 若识别出连续 5 个” 1” 和 1 个” 0” , 则自动丢弃该” 1” , 以恢复原来的比特流 ;
b) 若识别出连续 6 个” 1” , 则表示本段水印结束, 跳过下一位, 继续解码 ;
对每段水印进行反置乱方法步骤如下 :
现有 N 比特一维置乱水印序列 A[0, 1, 2, ......, N-1], 选取与 N 互素的最小正整 数 P, 长度为 N 的序列 B 用于临时存放结果。
执行如下反变换 :
a)B((i×P)mod N) = A(i), i = 0, 1, 2, ......, N-1
b)A = B
重复执行与置乱时使用的相同次数的反变换, 即可实现对一维置乱序列进行反置 乱, 获得隐藏信息。
该实施例中采用的自适应 H.264 压缩域视频水印嵌入与提取方法主要是针对 FLV 格式封装, H.264 标准编码的网络视频。选择该特定格式的网络视频主要由于该类型视频 被现今主流视频网站所使用, 对该类型视频的水印嵌入提取方案具有很大的实用性。在采 用上述方法进行隐藏信息的嵌入和提取时, 是可以实现下载视频的同时进行隐藏信息的嵌 入工作 ; 同时实现在播放视频和检测隐藏信息的同步工作, 实时性非常高。 在本实施例所采用的方法中, 自适应阈值的机制提供了一种能够根据视频载体自 身的特性动态地调整选取运动矢量临界值的方法, 保证水印容量满足需求, 实现少量帧间 隔内嵌入一次水印的需求, 达到可从任意视频位置提取完整水印的目的。
经实际测试, 有如下数据 :
从表中可以看出, 对于运动矢量幅值普遍较小的视频, 如新闻播报类视频, 以往固 定阈值的水印嵌入方案往往会出现水印嵌入容量不足的情况。 而自适应阈值机制完全能够 保证水印嵌入的容量满足要求 ; 对于运动较为激烈、 运动矢量幅值较大的视频, 固定阈值将 会选取过多的宏块进行嵌入, 在没有进行漂移补偿的情况下将造成视频的严重失真, 即使 经过漂移补偿也会存在明显失真。 而自适应阈值机制可以保证即使在运动矢量幅值较大情 况下依然选取合适数量的宏块, 配合漂移补偿能够保证视频无明显失真。由于嵌入水印所造成的漂移失真, 使用一般的漂移补偿方法虽然计算复杂度低但 补偿机制自身不够完善, 无法保证嵌入水印后视频无明显失真 ; 使用重新完全帧间预测的 方法虽然可以保证无失真但计算复杂度高, 效率极低, 因而不适用于大量视频数据处理的 实际应用。本方案采用的部分帧间预测方法, 仅仅执行帧间预测中的运动补偿来选择真正 需要进行漂移补偿的部分宏块, 算法复杂度低, 实时性极高, 能够满足网络视频大数据量处 理的需求。
对水印进行预处理并利用特殊标示作为同步位可以用于防止帧置乱。帧丢失、 帧 替换等攻击, 增强水印对于帧间攻击的鲁棒性。
本实例中水印嵌入的关键点在于利用帧间预测编码产生的运动矢量残差数据, 因 此该方法可以推广到类似使用帧间预测编码的其他格式视频中, 如 H.263, mpeg-4 等, 并且 该技术点独立于外部封装格式, 所以该实施例的方法具有一定的扩展性。