修改比特流

阅读:84发布:2020-05-12

专利汇可以提供修改比特流专利检索,专利查询,专利分析的服务。并且比特流包括代表信息 信号 的数字码。选择至少一个数字码。该码占用了将要包含至少一个 水 印码的一部分比特流,其中水印码代表的是一个可以在信息信号中察觉到的水印。从比特流的所述部分清除 选定 的一个或多个码。将水印码放入比特流的所述部分,以便取代一个或多个选定码。从比特流的所述部分清除的选定码的比特数目要大于或等于放入所述部分的所述水印(码)的比特数目。所清除的一个或多个选定码被附加于比特流的一个末端和/或放入在比特流中创建的水印用户数据域。,下面是修改比特流专利的具体信息内容。

1.一种修改包含信息信号部分的比特流的方法,所述比特流包 括代表信息的数字码,所述方法包括:选择至少一个数字码,所述数 字码占用将会包含至少一个修改码的比特流的一部分,其中所述修改 码代表信息的修改,从比特流的所述部分清除一个或多个选定的数字 码,把经过修改的一个或多个码放入比特流的所述部分来取代一个或 多个选定码,其中从比特流中清除的一个或多个选定码的比特数目要 大于或等于放入比特流的所述一个或多个修改码的比特数目;所述方 法还包括下列步骤中的一个或两个:(1)保存与比特流相关联的清 除的一个或多个选定码,以及(2)把清除的选定码放在比特流中一 个或多个清除的码的数据域。
2.根据权利要求1的方法,其中步骤(2)优先于步骤(1)而 被执行,以便如果在一个或多个清除的码的数据域内部有容量,则将 一个清除的选定码放置在所述一个或多个清除的码的数据域中。
3.根据权利要求1或2的方法,包括保存与比特流相关联的清 除的选定码中的一些码的步骤以及将清除的选定码中的其他码放入 所述一个或多个清除的码的数据域的步骤。
4.根据权利要求1或2的方法,其中保存与比特流相关联的清 除的一个或多个选定码的步骤(1)包括将一个或多个清除的选定码 附加于比特流的一个末端。
5.根据权利要求1或2的方法,其中保存与比特流相关联的清 除的一个或多个选定码的步骤(1)包括将清除的选定码存入一个文 件。
6.根据权利要求5的方法,其中文件附加于比特流的一个末端。
7.根据权利要求6的方法,其中文件附加于比特流的开始端。
8.根据权利要求5的方法,其中文件与比特流分离并且与比特 流相关联。
9.根据权利要求1的方法,包括将所有清除的一个或多个选定 码附加于比特流的一个末端的步骤。
10.根据权利要求1的方法,包括将所有清除的一个或多个选定 码放入所述一个或多个清除的码的数据域的步骤。
11.根据权利要求10的方法,包括步骤:压缩一个信息信号, 以便产生所述比特流,其中压缩量以经过修改的比特流中的数据量的 预测为基础,以便允许将所有清除的选定码都放入比特流内部的清除 的码的数据域。
12.根据权利要求1或2的方法,包括步骤:向经过修改的比特 流中添加填充比特,以使经过修改的比特流的比特率相对于原始比特 流保持不变。
13.根据权利要求1或2的方法,包括步骤:使用一个模板来定 义比特流的一个或多个部分,其中所述部分将会包含一个或多个修改 码。
14.根据权利要求1或2的方法,其中代表信息的所述数字码是 代表信息变换系数的码。
15.根据权利要求14的方法,其中所述系数是DCT系数。
16.根据权利要求15的方法,其中DCT系数包括DC和AC系数, 从比特流的所述部分清除代表DC和AC系数的所有码,放入比特流的 所述部分的修改码是代表DC系数的码。
17.根据权利要求16的方法,其中从比特流中相同部分中清除 的码被分组到由一个组码标识的组中。
18.根据权利要求17的方法,其中比特流的所述部分是至少一 个DCT
19.根据权利要求16、17或18的方法,其中可以使用以下技术 中的至少一个来修改比特流:(a)清除代表AC系数的AC码的技术, 以及(b)清除代表DC系数的DC码的技术:使用经过修改的DC码来 取代所述DC码并且根据步骤(1)或者步骤(2)保存清除的选定码;
所述方法还包括下列步骤:
评定所述技术(a)和(b)在比特流中比特数目上的作用;以及
根据所述评定来选择所述技术(a)和(b)中的一种或多种技术 用于执行比特流修改。
20.根据权利要求15的方法,其中所述比特流是一个视频比特 流,它包括至少一个内编码画面,并且所述方法是在帧内编码画面 上执行的。
21.根据权利要求20的方法,其中比特流包括帧间编码画面, 并且所述方法是在帧间编码画面上执行的。
22.根据权利要求21的方法,其中帧间编码画面包括代表DC系 数的DC码,所述方法包括如下步骤:
清除所述DC码中的选定DC码;
根据步骤(1)或者步骤(2)保存清除的选定码;以及
使用具有预定值的修改码来取代清除的码。
23.根据权利要求22的方法,其中代表帧间编码画面中的DC系 数的所述DC码代表经过量化的变化值,并且所述预定值代表大于零 的最小变化量。
24.根据权利要求23的方法,其中所述预定值是正或负的一。
25.根据权利要求21到24中任一权利要求的方法,其中帧间编 码画面包括代表运动矢量的编码,并且还包括如下步骤:清除与将要 包含修改码的比特流的部分相关联的运动矢量码,使用代表零运动矢 量的运动矢量修改码来替换原始的运动矢量码,以及将清除的运动矢 量码附加于比特流末端和/或将清除的码放入比特流中的清除的码的 数据域。
26.根据权利要求25的方法,还包括以下步骤:清除与帧间编 码画面的部分相关联的运动矢量码,在画面中,所述帧间编码画面的 部分与将要包含修改码的比特流的所述部分相邻,使用代表零运动矢 量的运动矢量修改码来替换所述相关部分的原始运动矢量码,以及将 清除的运动矢量码附加于比特流末端和/或将清除的码放入比特流中 的清除的码的数据域。
27.根据权利要求25的方法,包括:提供一个第一模板和一个 第二模板,其中第一模板定义所要修改的帧内编码画面的块,第二模 板定义与帧间编码画面的第一模板的块相对应的块,对于所述与帧间 编码画面的第一模板的块相对应的块的相关联运动矢量将被设定为 零。
28.根据权利要求27的方法,其中第二模板定义第一组宏块, 该第一组宏块包含所述对于其的相关联运动矢量将被设定为零的 块。
29.根据权利要求28的方法,其中第二模板定义与所述第一组 宏块毗连的第二组宏块,对于该第二组宏块的相关联运动矢量将被设 定为零。
30.根据权利要求20的方法,其中比特流包括DCT块,根据指 示编码类型的类型码将所述DCT块编码成场类型或帧类型,并且包括 以下步骤:清除所述指示场类型的类型码中的选定码并且使用那些指 示帧类型的修改类型码来替换所清除的类型码,以及保存与比特流相 关联的清除的类型码和/或将其放入比特流中一个或多个清除的码的 数据域。
31.根据权利要求15的方法,其中所述比特流是MPEG2比特流。
32.根据权利要求1或2的方法,还包括提供对包含修改码的比 特流部分进行指示的数据。
33.根据权利要求31的方法,其中比特流包括一个补充数据域, 并且包括步骤:在比特流中提供数据,所述数据对一个或多个清除的 码的数据域以及所述补充数据域加以区分。
34.根据权利要求1或2的方法,包括步骤:保存与比特流相关 联的所清除的选定码和/或将其放入所述一个或多个清除的码的数据 域之前,对清除的选定码进行加密。
35.根据权利要求1或2的方法,其中所述修改在信息信号部分 表示的信息中产生了可以察觉的作用。
36.根据权利要求1的方法,其中信息信号部分包括一种或多种 以下数据:视频数据、音频数据、听觉/视觉数据以及其他数据。
37.一种恢复包含信息信号部分的原始比特流的方法,所述方法 包括:接收一个经过修改的比特流,所述比特流在比特流的选定部分 具有修改码,其中原始码已经从所述部分清除并被保存,所述方法还 包括以下步骤:
分析比特流;
存储器中提取原始码;以及
使用原始码来替换修改码。
38.根据权利要求37的方法,其中信息信号部分包括一种或多 种以下数据:视频数据、音频数据、听觉/视觉数据以及其他数据。
39.一种恢复包含信息信号部分的原始比特流的方法,所述方法 包括:接收一个经过修改的比特流,所述比特流在比特流的选定部分 具有修改码,其中原始码已经从所述部分清除并且放置在比特流的修 改用户数据部分,所述方法还包括以下步骤:
分析比特流;
保存原始码;以及
使用所保存的原始码来替换修改码。
40.根据权利要求39的方法,其中信息信号部分包括一种或多 种以下数据:视频数据、音频数据、听觉/视觉数据以及其他数据。
41.一种恢复包含信息信号部分的原始比特流的方法,所述方法 包括:接收一个经过修改的比特流,所述比特流在比特流的选定部分 具有修改码,其中原始码已经从所述部分清除并且放置在比特流的修 改用户数据部分以及附加于比特流的一个末端,所述方法还包括以下 步骤:
分析比特流;
保存原始码;以及
使用保存的原始码来替换修改码。
42.根据权利要求41的方法,其中信息信号部分包括一种或多 种以下数据:视频数据、音频数据、听觉/视觉数据以及其他数据。
43.根据权利要求39或41的方法,其中对原始码进行加密,并 且还包括以下步骤:在使用解密的原始码来替换修改码之前对它们进 行解密。
44.根据权利要求37、39或41的方法,包括步骤:使用一个定 义包含一个或多个修改码的比特流的一个或多个部分的模板来选择 那些用于替换的码。
45.一种用于修改包含信息信号部分的比特流的设备,所述比特 流包含代表信息的数字码,所述设备包括一个可操作来对至少一个占 用一部分比特流的数字码进行选择的选择级,其中所述一部分比特流 将会包含至少一个代表信息中可察觉的修改的修改码,所述设备还包 括一个可操作来从比特流的所述部分清除选定的一个或多个数字码 的清除级,一个可操作来把一个或多个修改码放入比特流的所述部分 以便取代一个或多个选定码的修改码放置级,其中从比特流中清除的 一个或多个选定码的比特数目大于或等于放入比特流的所述一个或 多个修改码的比特数目,以及一个清除的码的放置级,它可操作来: (1)保存与比特流相关联的清除的一个或多个选定码和/或(2)将 清除的选定码放入比特流中一个或多个清除的码的数据域。
46.根据权利要求45的设备,其中清除的码的放置级可操作来 优先于上述操作(1)而执行上述操作(2),以便如果在一个或多个 清除的码的数据域内部有容量,则将一个清除的选定码放置在所述一 个或多个清除的码的数据域中。
47.根据权利要求45或46的设备,其中清除的码的放置级可操 作来保存与比特流相关联的一些清除的选定码并且将其他清除的选 定码放入所述一个或多个清除的码的数据域。
48.根据权利要求45或46的设备,其中清除的码的放置级可操 作来(1)通过将所述清除的一个或多个选定码附加到比特流末端来 保存与比特流相关联的所述清除的一个或多个选定码。
49.根据权利要求45或46的设备,其中清除的码的放置级可操 作来(1)通过将所述清除的一个或多个选定码存储在一个文件中来 保存与比特流相关联的所述清除的一个或多个选定码。
50.根据权利要求49的设备,其中清除的码的放置级可操作来 将文件附加于比特流的一个末端。
51.根据权利要求49的设备,其中清除的码的放置级可操作来 存储与比特流相互分离但相关联的文件。
52.根据权利要求45的方法,其中清除的码的放置级可操作来 将所有清除的一个或多个选定码附加于比特流的一个末端。
53.根据权利要求45的设备,其中清除的码的放置级可操作来 将所有清除的一个或多个选定码放入所述一个或多个清除的码的数 据域。
54.根据权利要求45到46中任一权利要求的设备,其中所述数 字码代表所述信息的DCT系数。
55.根据权利要求54的设备,其中DCT系数包括DC和AC系数, 清除级可操作来从比特流的所述部分中清除代表DC和AC系数的所有 码,并且修改码放置级可操作来将代表DC系数的修改码放入比特流 的所述部分。
56.根据权利要求54的设备,其中清除级可操作来执行以下技 术中的至少一个:(a)清除代表AC系数的码的技术以及(b)清除 代表DC系数的DC码的技术:修改码放置级可操作来使用经过修改的 DC码来替换清除的DC码,清除的码的放置级可操作来根据步骤(1) 或者步骤(2)保存清除的选定码,所述设备还包括一个级,该级可 操作来评定所述技术(a)和(b)在比特流中比特数目上的作用并且 根据所述评定来选择所述技术(a)和(b)中的一种或多种技术用于 执行比特流修改。
57.根据权利要求56的设备,其中清除的码的放置级可操作来 将所清除的一个或多个选定码附加于比特流的一个末端和/或将其放 入比特流的一个或多个清除的码的数据域。
58.根据权利要求55的设备,其中比特流包括至少一个帧内编 码画面,所述设备被安排来修改帧内编码画面。
59.根据权利要求58的设备,其中比特流包括帧间编码画面, 所述设备被安排来附加地修改帧间编码画面。
60.根据权利要求59的设备,其中帧间编码画面包括代表DC系 数的码,所述设备包括一个级,该级可操作来清除所述DC码中的选 定码,以及一个放置级,该级可操作来保存与比特流相关联的这些码 和/或将其放入比特流中一个或多个清除的码的数据域,以及一个取 代级,该级可操作来使用具有预定值的修改码来取代清除的码。
61.根据权利要求60的设备,其中代表帧间编码画面中的DC系 数的所述码代表经过量化的变化值,并且所述预定值代表大于零的最 小变化量。
62.根据权利要求61的设备,其中所述预定值是正或负的一个。
63.根据权利要求59到62中任一权利要求的设备,其中帧间编 码画面包括代表运动矢量的码,并且还包括一个运动矢量码清除级, 该运动矢量清除级可操作来清除与将要包含修改码的比特流的所述 部分相关联的运动矢量码,使用代表零运动矢量的运动矢量修改码来 替换原始的运动矢量码,以及存储与比特流相关联的清除的运动矢量 码和/或将清除的码放入比特流中的清除的码的数据域。
64.根据权利要求63的设备,其中运动矢量码清除级还可操作 来清除与部分帧间编码画面相关联的运动矢量码,在画面中,所述部 分帧间编码画面与将要包含修改码的比特流的所述部分相邻,使用那 些代表零运动矢量的运动矢量修改码来替换所述相关部分的原始运 动矢量码,以及保存与比特流相关联的清除的运动矢量码和/或将清 除的码放入比特流中清除的码的数据域。
65.根据权利要求54的设备,其中比特流包括DCT块,所述DCT 块可以被利用指示编码类型的类型码而编码为场类型或帧类型,并且 包括一个清除级,该清除级可操作来清除所述指示场类型的类型编码 中的选定码并且使用指示帧类型的修改类型码来替换清除的类型 码,以及一个清除的码的放置级,该清除的码的放置级可操作来保存 与比特流相关联的清除的类型码和/或将其放入比特流中一个或多个 清除的码的数据域。
66.根据权利要求45的设备,其中信息信号部分包括一种或多 种以下数据:视频数据、音频数据、听觉/视觉数据以及其他数据。
67.一种用于恢复包含信息信号部分的原始比特流的设备,该设 备包括:
一个接收级,该接收级可操作来接收一个经过修改的比特流,所 述比特流在比特流的选定部分具有修改码,其中原始码已经从所述部 分清除并被保存,
一个可操作来对比特流进行分析的分析级;
一个可操作来保存原始码的存储器;以及
一个可操作来使用原始码来替换修改码的替换级。
68.根据权利要求67的设备,其中信息信号部分包括一种或多 种以下数据:视频数据、音频数据、听觉/视觉数据以及其他数据。
69.一种用于恢复包含信息信号部分的原始比特流的设备,该设 备包括:
一个接收级,该接收级可操作来接收一个经过修改的比特流,所 述比特流在比特流的选定部分具有修改码,其中原始码已经从所述部 分清除并且放置在比特流的修改用户数据部分;
一个可操作来对比特流进行分析的分析级;
一个用于保存原始码的存储器;以及
一个可操作来使用所保存的原始码来替换修改码的替换级。
70.根据权利要求69的设备,其中信息信号部分包括一种或多 种以下数据:视频数据、音频数据、听觉/视觉数据以及其他数据。
71.一种用于恢复包含信息信号部分的原始比特流的设备,该设 备包括:
一个接收级,该接收级可操作来接收一个经过修改的比特流,所 述比特流在比特流的选定部分具有修改码,其中原始码已经从所述部 分清除并且放置在比特流的修改用户数据部分以及附加于比特流的 一个末端;
一个可操作来对比特流进行分析的分析级;
一个用于保存原始码的存储器;以及
一个可操作来使用所保存的原始码来替换修改码的替换级。
72.根据权利要求69或71的设备,该设备用于一个比特流,其中原 始码被加密,并且包括一个解密级,该解密级可操作来在使用解密的 原始码替换修改码之前对原始码进行解密。
73.根据权利要求71的设备,其中信息信号部分包括一种或多 种以下数据:视频数据、音频数据、听觉/视觉数据以及其他数据。
74.一种用于恢复包含信息信号部分的原始比特流的设备,包 括:
一个接收级,该接收级可操作来接收一个利用一种修改比特流的 方法可见地嵌入印的已修改比特流,所述比特流包括代表信息的数 字码,所述方法包括:选择至少一个数字码,所述数字码占用将会包 含至少一个修改码的比特流的一部分,其中所述修改码代表信息的修 改,从比特流的所述部分清除一个或多个选定的数字码,把经过修改 的一个或多个码放入比特流的所述部分来取代一个或多个选定码,其 中从比特流中清除的一个或多个选定码的比特数目要大于或等于放 入比特流的所述一个或多个修改码的比特数目;所述方法还包括下列 步骤中的一个或两个:(1)保存与比特流相关联的清除的一个或多 个选定码,以及(2)把清除的选定码放在比特流中一个或多个清除 的码的数据域,其中保存与比特流相关联的清除的一个或多个选定码 的步骤(1)包括将一个或多个清除的选定码附加于比特流的一个末 端,经过修改的比特流在比特流的选定部分中具有经过修改的码,这 些码代表的是经过修改的块以及设定为零的运动矢量,其中从所述部 分清除了原始码并且将其放入比特流的修改用户数据部分和/或将其 附加于比特流末端,所述设备包括:
一个可操作来对比特流进行分析的分析级;
一个可操作来保存原始码的存储器;以及
一个可操作来使用所保存的原始码来替换已修改码的替换级。
75.根据权利要求74的设备,其中信息信号部分包括一种或多 种以下数据:视频数据、音频数据、听觉/视觉数据以及其他数据。
76.一种用于恢复原始比特流的设备,包括:
一个接收级,该接收级可操作来接收一个利用一种修改比特流的 方法可见地嵌入水印的已修改比特流,所述比特流包括代表信息的数 字码,所述方法包括:选择至少一个数字码,所述数字码占用将会包 含至少一个修改码的比特流的一部分,其中所述修改码代表信息的修 改,从比特流的所述部分清除一个或多个选定的数字码,把经过修改 的一个或多个码放入比特流的所述部分来取代一个或多个选定码,其 中从比特流中清除的一个或多个选定码的比特数目要大于或等于放 入比特流的所述一个或多个修改码的比特数目;所述方法还包括下列 步骤中的一个或两个:(1)保存与比特流相关联的清除的一个或多 个选定码,以及(2)把清除的选定码放在比特流中一个或多个清除 的码的数据域,其中保存与比特流相关联的清除的一个或多个选定码 的步骤(1)包括将清除的选定码存入一个文件,经过修改的比特流 在比特流的选定部分中具有经过修改的码,这些码代表的是经过修改 的块以及设定为零的运动矢量,其中从所述部分清除了原始码并且将 其放入比特流的修改用户数据部分和/或将其附加于比特流末端,所 述设备包括:
一个可操作来对比特流进行分析的分析级;
一个可操作来保存原始码的存储器;以及
一个可操作来使用所保存的原始码来替换已修改码的替换级。
77.根据权利要求76的设备,其中信息信号部分包括一种或多 种以下数据:视频数据、音频数据、听觉/视觉数据以及其他数据。
78.根据权利要求74或76的设备,其中原始码被加密,并且还 包括一个级,用于在使用经过解密的原始码来替换修改的码之前对它 们进行解密。

说明书全文

技术领域

发明涉及一种修改比特流的方法,修改比特流的设备,修改比 特流的计算机程序,保存这种程序的存储介质,从比特流中清除修改 的方法,从比特流中清除修改的设备,从比特流中清除修改的计算机 程序,保存这种程序的存储介质,经过修改的比特流和携带修改清除 数据的数据载体。

背景技术

在视频、音频、听觉/视觉和/或其它信息信号中提供一个印是 已知的。提供水印是为了检查信息信号的出处和/或识别那些与信息 信号相关联的所有者或其他人。水印可以是可察觉的,也可以被隐 藏。本发明的优选实施例使用了可以察觉的水印。
把图像从空间域变换到例如小波域这样的变换域,从而将水印嵌 入图像,以及通过改变小波系数来嵌入一个水印,这些处理同样是已 知的。然后,嵌入水印的变换域图像逆变换到空间域。以上内容可以 参见例如Hisashi Inoue等人在IEEE 0-7803-5467-2/99上发表的 “基于小波变换的图像水印方法(An image watermarking method based on the wavelet transform)”。
美国专利5809139(Girod等人)公开的是将看不见的水印嵌入 经过压缩的视频材料。对使用MPEG2压缩的视频进行熵解码和解量 化,由此得到DCT系数。扩频空间域的水印变换到DCT域,经过变换 的水印添加到所变换视频的DCT系数中。为了能在添加水印的情况下 仍然维持压缩视频的比特率,因此在这里采取各种措施。只有那些非 零系数才被修改。对已被编码并且嵌入了水印的系数的比特数目以及 所述系数在嵌入水印之前的比特数目进行比较(加上先前编码操作中 保存的额外备用比特的数目)。一个控制器对嵌入水印的比特流与原 始未嵌入水印的比特流之间的输出选择加以控制。如果经过熵编码并 且没有嵌入水印的系数使用n0个比特,而嵌入水印并且经过熵编码的 系数使用n1个比特,那么,如果n1<=n0+n3,则输出的将是嵌入水印 的系数,其中n3是可用的备用比特数。可以在一个视频解码器中对所 述水印进行检测,但是不可能通过颠倒水印算法而把嵌入水印的视频 恢复成原始视频。
WO99/10837(Digimarc)公开了一种将水印嵌入视频图像的方 法,其中使用例如MPEG2来压缩图像并且修改DCT系数来嵌入水印。 比特率是通过维持一个计数而得到保持的,所述计数表示的是:通过 修改系数而使比特率增加的数量减去通过所述修改而使比特率减少 的数量。如果累积的变化超出一个正的或负的极限,那么不会进行更 进一步的变化。此外,可以在一个视频解码器中对所述水印进行检 测,但是不能通过颠倒嵌入水印算法而把嵌入水印的视频恢复成原始 视频。
US-A-5809139和WO99/10837都需要监视比特率并在达到规定极 限时停止嵌入水印的装置。对US-A-5809139和WO99/10837来说,这 将导致水印随机分布在一个图像中。这些建议针对的是不可逆转并且 无法察觉的水印,所述水印在图像中嵌入了描述一个消息的数据。
对信息信号尤其是图像信号进行压缩编码,这种操作是已知的。 如果对信息信号实行为该信息信号添加数据的修改,那么所述压缩通 常会更为低效。而较为理想的是对经过压缩的信息信号进行处理,以 便修改信息信号,所述修改在解压缩的信息信号中是可以察觉的,它 最小限度地改变了那些代表已压缩信息信号的比特的数目,举例来 说,所述修改可以是在图像中实施的可见修改。
共同未决的在先申请EP01310113.4(USSN10/006050)是一个对 经过压缩的视频比特流进行修改并且从中清除水印的方法和设备的 实例。在比特流上执行的压缩处理使用了DCT系数。所述修改处理将 被实行,以确保嵌入水印的比特流不比嵌入水印之前的比特流具有更 多比特,由此与之具有相同比特率。这种操作是通过对代表DCT系数 的编码定长部分进行加密来完成的,但却没有增加定长编码中的比特 数目。最优选的实施例是一个具有I的压缩比特流,所述技术对于 这种比特流起较好的作用,由此产生一个可见水印。所述技术还可用 于其他压缩比特流,但是,受到不增加比特数目这个限制因素的制 约,所显示图像中的水印的可视性未必是随心所欲的。
MPEG2是众所周知的,在ISO/IEC/13818中对其做出了定义。
本发明试图提供这样一种技术,该技术适于那些包含视频、音 频、听觉/视觉和/或其它信息信号的比特流,并且所述技术在没有提 高信息信号比特率并且最好是不改变该比特率的情况下产生一种修 改,较为优选的是,所述修改是一种可以清除和可以察觉的修改。本 发明的一个实施例试图提供一种修改技术,所述技术可以应用于一个 经过压缩的比特流(例如MPEG2)并且可以产生一种希望的可感知性 的修改,同时所述技术不会改变压缩比特流中的比特率并且还可从比 特流中清除所述修改。

发明内容

本发明的一个方面提供了一种用于修改比特流的方法,所述比特 流包含那些代表信息的数字码,所述方法包括:选择至少一个数字 码,所述数字码占用了将会包含至少一个修改码的比特流的一部分, 其中所述修改码表示信息的修改,从比特流的所述部分清除一个或多 个选定码,把经过修改的一个或多个码放入比特流的所述部分,以便 取代一个或多个选定码,其中从比特流中清除的一个或多个选定码的 比特数目要大于或等于放入比特流的所述一个或多个修改码的比特 数目;该方法还包括以下一个步骤或两个步骤:(1)保存与比特流 相关联的所清除的一个或多个选定码,以及(2)把清除的选定码放 在比特流中一个或多个清除的码的数据域。
优选地,所述修改使得在比特流表示的信息中能够被察觉。
根据本发明的第二个方面,提供了一种用于修改一个比特流的方 法,其中所述比特流包含了代表信息的数字码,所述方法包括:选择 至少一个数字码,所述数字码占用了将会包含至少一个修改码的比特 流的一部分,所述修改码表示可以在信息中察觉的修改,从比特流的 所述部分清除选定的一个或多个数字码,把一个或多个所述修改码放 入比特流的所述部分,以便取代一个或多个选定码,其中,从比特流 中清除的一个或多个选定码的比特数目要大于或等于放入所述部分 的所述一个或多个修改码的比特数目,以及把清除的一个或多个选定 码附加于比特流末端而不是其内部。
根据本发明的第三个方面,提供了一种用于修改一个具有信息信 号部分的比特流的方法,所述信息信号部分包括代表信息的数字码, 所述方法包括:选择占用了一部分所述信息信号部分的数字码,其中 所述一部分所述信息信号部分将会包含至少一个代表信息中的可察 觉修改的修改码,从比特流的所述部分清除选定的一个或多个数字 码,将一个或多个修改码放入比特流的所述部分,以便取代一个或多 个选定码,创建一个与所述部分附加在一起的比特流的修改用户数据 部分,以及在所述修改用户数据部分中保存所清除的一个或多个选定 码中的至少一个,其中包含修改码的所述信息信号部分中的比特数目 与所述修改用户数据部分中的比特数目相加,其总和小于或等于清除 选定码之前所述信息信号部分中的比特数目。
在本发明的实施例中,所述修改提供了一种对比特流所代表信息 的可察觉修改,而不是将数据隐藏在比特流内部。
这样一来,对经过修改的比特流而言,其比特率与原始比特流的 比特率保持相等。添加修改码将会产生附加数据。通过清除原始码并 将其附加于比特流末端,比特流中的数据量并未增加。通过清除原始 码而在比特流中创建的备用空间可用作至少一些原始码的修改用户 数据域,无法包含在这些域之中的任何码则附加于比特流末端。所述 码可以附加在比特流的开始端或结束端。
所述码可以处于一个单独的文件,也可以位于一个附加在比特流 开始端或结束端的文件中。
本发明优选实例中的比特流是一个经过压缩的比特流,较为优选 的是,所述比特流是根据MPEG2标准来进行压缩的。在MPEG2中,比 特流的比特率要符合所述标准,这一点非常重要。因此,本发明使那 些具有修改码的MPEG2比特流也可以符合所述标准,由修改处理产生 的任何过剩数据并不处于符合MPEG2的比特流中,而是附加于其中。 过剩数据是那些无法放入比特流的修改用户数据域的数据。
本发明的优选实施例允许保存所有原始数据,由此允许清除修改 数据并且恢复原始比特流。(当然,这个操作假设并没有因为对经过 修改的比特流进行例如经过一条有噪声的信道的其他处理或者进一 步处理而丢失数据。)
本发明的第四个方面提供了一种用于修改比特流的设备,所述比 特流包含那些代表信息的数字码,所述设备包括一个可操作来选择至 少一个占用了一部分比特流的数字码的选择级(stage),其中所述 一部分比特流将会包含至少一个代表信息中可察觉修改的修改码,所 述设备还包括一个可操作来从比特流的所述部分清除选定的一个或 多个数字码的清除级,一个可操作来把一个或多个修改码放入比特流 的所述部分,从而取代一个或多个选定码的修改码放置级,其中从比 特流中清除的一个或多个选定码的比特数目大于或等于放入比特流 的一个或多个所述修改码的比特数目,此外所述设备还包括一个清除 的码的放置级,它可操作来:(1)保存与比特流相关联的清除的一 个或多个选定码和/或(2)将清除的选定码放入比特流中一个或多个 清除的码的数据域。
在本发明的一个实施例中,比特流包含那些代表信息信号变换系 数的数字码,所述系数是例如包括DC和AC系数的DCT系数。本发明 的一个实例使用不同技术来修改这种比特流。这些技术包括1)清除 AC系数和2)清除DC系数。清除的系数由修改码取代。评定不同技 术对已修改比特流中的比特数目所产生的作用,并且根据所述评定来 选择一种或多种技术用于对比特流进行实际修改。这就允许选择所述 技术而使经过修改的比特流的比特率与原始比特流的比特率保持相 等。
原始比特流可以包括帧间编码画面,其中包括代表运动矢量的编 码。如果所述修改代表画面中的一个可察觉水印,那么运动矢量将会 导致水印失真。本发明的一个实例包括以下步骤:清除那些与将会包 含至少一个修改码的比特流的所述部分相关联的运动矢量码,使用那 些代表零运动矢量的运动矢量修改码来替换原始运动矢量码,以及将 清除的运动矢量码放入比特流末端和/或比特流中的清除的码的数据 域。这样将会减少水印失真。
MPEG2的比特流可以包括编码为场(field)类型或帧类型的DCT ,其中类型码表示编码类型。已经发现的是,如果修改了场类型的 DCT块而没有修改相邻的场类型块,那么条纹将使所述水印产生失 真。因此本发明的一个实例包括以下步骤:清除所述指示场类型的类 型码中的选定类型码,使用指示帧类型的修改类型码来替换那些清除 的类型码,将清除的类型码放在以下一个或两个位置:(1)比特流 末端以及(2)比特流中一个或多个清除的码的数据域。
本发明的其它方面是在需要关注的权利要求中规定的。
附图说明
为了更好地理解本发明以及显示如何实现本发明,现在将举例来 对附图加以参考,其中:
图1是图像帧的示意图;
图2是图像帧中具有8×8个像素的块的示意图;
图3是DCT块的示意图;
图4是宏块的示意图;
图5是宏块和切片(slice)的示意图;
图6是图组(GOP)的示意图;
图7是画面数据的一个帧的示意图;
图8是一个宏块的比特流的示意图;
图9是一个定义了水印的模板的示意图;
图10是对根据本发明而被应用于内部帧(intra-frame)的说明 性嵌入水印方法的概述加以说明的流程图
图11到13是在本发明的实例中使用的说明性数据格式的示意图;
图14是显示那些分布在经过压缩的画面帧之中的用户数据的示 意图;
图15是水印加密/解密处理的流程图;
图16是对根据本发明的说明性水印清除方法的概述加以说明的 流程图;
图17是一个根据本发明的说明性嵌入水印系统的概述;
图18是水印清除设备的示意框图
图19是嵌入水印处理和水印清除处理中使用的三个缓存器的示 意图;
图20是一个对根据本发明而被应用于非内部帧的说明性嵌入水 印方法的概述加以说明的流程图;
图21A描述的是嵌入水印的宏块,图21B是一个描述DCT类型变 化处理的流程图;
图22是技术选择处理的流程图;
图23描述的是与运动矢量关联在一起使用的模板;
图24是对本发明的一个实施例中的应用于运动矢量码的说明性 方法的概述加以说明的流程图;
图25描述的是运动矢量的编码;
图26描述了将水印嵌入帧画面的视频序列;
图27描述了a)向场画面的视频序列嵌入水印,以及b)向场画 面和帧画面的视频序列嵌入水印;以及
图28描述了用于隔行场和一个帧的嵌入水印的宏块;
图29到31描述的是对本发明所进行的修改。

具体实施方式

以下说明性描述中修改了MPEG2压缩的比特流。所述修改称为一 个水印。将水印应用于比特流则称为嵌入。而恢复原始比特流则称为 清洗(washing)。
第一实例
现在对本发明的第一实例进行描述。为了便于说明,所述实例描 述的是将水印数据放入MPEG2视频比特流的I帧,所述MPEG2视频比 特流是一个不具有音频的单流;也就是说,它是一个MPEG2的视频序 列文件。作为选择,所述比特流也可以是一个分组化的比特流。然而 本发明并不局限于I帧,同时也不局限于视频或MPEG2。为了易于说 明,以下论述仅涉及亮度信息。然而,本发明并不局限于亮度信息。
首先回顾一下MPEG2。参考图1,其中显示了一个图像帧2。所述 图像由数字像素表示。如图2所示,选择了一个具有8×8个像素的 块4,并且如图3所示,对这些块进行了离散余弦变换(DCT),由此 形成了包含8×8个DCT系数的DCT块。所述系数包括DC系数6和AC 系数7。为了形成一个连续比特流,如图3所示,使用了一种锯齿形 扫描模式8来扫描这些系数(其他模式也是已知的)。如图4所示, 四个相邻DCT块组被分组成为宏块10。如图5所示,图像帧组织为宏 块的行R1、R2、R3等等。宏块组织成切片。切片是宏块的水平集合。 新的切片始于宏块各行起点。一个切片可以包含任意数量的宏块。一 行宏块也可包含任何数量的切片。
参考图6,MPEG2具有以下类型的帧。I帧是一个帧内编码的帧, 也就是说,它是这样一个帧,其中所有图像数据都包含在所述帧的内 部而不涉及其他任何帧。P帧是一个使用运动补偿预测来进行编码的 帧,所述预测来源于一个先前的I帧或P帧。B帧是一个使用运动补 偿预测来进行编码的帧,所述预测来源于先前和/或未来的I帧或P 帧。为了便于说明,以下关于第一实例的描述仅涉及I帧。
这些帧组织成了名为GOP的图组。图6显示了一个典型GOP的一 部分,其中I、B、B和P帧的重复序列构成了GOP。但是其它序列也 是可能的。在一个典型的GOP中,帧的数目是12或15,但其他帧数 也是可能的。
图7和图11描述了在这里称为画面数据的数据格式。在这里,画 面数据包括图像起始码之间的所有数据,并且包括报头(HDR)、用户 数据(LTD)以及代表一帧图像的图像数据16。MPEG2允许将用户数据 (UD)放置在图像数据16之前的画面数据中。可能不存在用户数据域 UD,也可能存在一个或多个用户数据域。
在图像数据16中,DCT块和宏块是如图8所示被格式化的。每个 块都包含了一个DC系数,其后跟随的是AC系数。这些块由块结束码 EOB来分隔。
在I帧中对DC系数进行差分编码。在这里,所述差分值称为DC 差分(DC differential)。对于AC系数进行行程编码,AC系数由可 变长度编码(VLC)所表示并且在这里被称为AC VLC。
MPEG2的编码处理必须产生一个可以由所有符合MPEG2标准的解 码器来进行解码的比特流。这些解码器包括一个缓存器,在对比特流 进行解码的时候,该比特流被临时保存在缓存器中。MPEG2标准定义了 缓存器大小。通常,缓存器应该既不下溢也不上溢,否则数据将会丢 失。(在某些情况下可以允许下溢)。编码处理将被执行,以便约束 比特率,从而防止下溢和上溢。
在本发明的这个实例中,为了把一个可见水印应用于一个经过编 码的比特流而对这个经过编码的比特流进行了修改,所述修改将会冒 着改变比特率的险,由此将会冒着下溢或上溢的风险。在不改变画 面数据比特率的情况下,以下描述的本发明实例设法将一个可见水印 应用于所述比特流,由此不会导致缓存器下溢或上溢,并且所述实例 设法允许清除水印并恢复原始图像。
参考图9,模板18定义了水印。在图9实例中,水印采用Sony 中S的形式,但是所述水印也可具有其他任何形式。模板将水印定义 到DCT块的分辨率。所述模板将在以下标题为“模板”的部分得到更 进一步的论述。
参考图10,在概述中,本发明的第一实例可以如下运行。在这个 实例中,这些操作仅仅是在I帧上执行的,但是本发明并不局限于只 在I帧上执行这些操作。
在步骤S2,落入水印S内部的宏块将被选择,这些宏块的所有DC 差分和AC VLC都被清除并且在步骤S4中得到保存。
在步骤S6,将代表所述水印的新DC差分放入模板宏块的块中,以 便取代那些已经清除的块。(在这些块中并未替换掉AC VLC)。对I 帧的DC系数进行差分编码,因此需要根据那些空间上处于模板边缘宏 块前后的宏块的DC差分来计算新的DC差分,以下将会对此进行更为 详细的描述。
在步骤S8,对通过清除原始DC差分以及AC VLC而从I帧中清除 的比特数目Nr加以确定,并且确定通过新DC差分而添加到I帧的比 特数目Na。差值Nr-Na表示画面数据中的备用数据空间数量。如果所 述空间超出一个临界值(对于MPEG2而言是5个字节),那么参考图 11B,在画面数据中将会创建一个可见水印用户数据空间20。并且至少 有一些已被保存的DC差分和AC VLC被放置到数据空间20。为了确保 画面数据比特率保持不变,可以将零填充(zero padding)22添加到 画面数据中。如果可用于创建数据空间20的备用空间不足,那么将会 添加零填充22。放入数据空间20的系数是在放入空间20之前加密的, 由此确保只有得到许可的人才可以重新产生原始图像。
对视频序列中的每个I帧而言,重复所述处理(S10)。参考图14, 其中显示了一部分视频序列。为了易于说明,图14只显示了I帧。并 且为了易于说明,画面数据帧是以简化形式显示的。如果所述序列包 含P帧和/或B帧,那么I帧将由这种帧分隔。所述序列的第一个I帧 P1包括水印用户数据空间20,其中包括帧P1的一些已经清除的系数。 帧P2具有一个数据空间20,从帧P1中清除的其他系数处于所述数据 空间。在图14的实例中,帧P2的用户数据空间20具有包含帧P2的 一些清除的系数的容量。帧P2的其他已经清除的系数处于帧P3的用 户数据空间20。帧P4显示为不具有用于用户数据空间20的备用容量, 从帧P3中清除的一些系数处于帧P5的用户数据空间20。因此如图14 所示,从存储器中提取那些在视频序列帧的图像数据空间中被按顺序 清除的系数,对这些系数进行加密,并以相同顺序将这些系数放入画 面数据帧中创建的水印用户数据空间20,但却没有增加画面数据比特 率。视频序列末端由序列结束码26表示。
在视频序列中创建的用户数据空间未必提供足够的备用容量来包 含清除的全部系数。因此,如图10的步骤S12所示,从存储器中提取 剩余系数,并且如在图14的28所示,对这些系数进行加密并且附加 于序列结束码26之后的视频序列末端。附加于MPEG2比特流末端的数 据是MPEG2比特流的一部分,但由于它并未以一个起始码作为起点, 因此MPEG2解码器将会忽略附加的数据。
尽管到目前为止仅仅参考I帧而对处理进行了描述,但是视频序 列通常还包括P帧和B帧。一些P帧和B帧可以包含零填充。如果这 样,则可将零填充清除并将其用于一个水印用户数据块,并且可以将 清除的原始系数放入用户数据块。在恢复原始比特流的过程中,零填 充将被恢复。
这个概述省略了以下论述中将会论及的某些操作细节。
块结束码和其他码
如在图13中最佳显示的那样,从图像数据16中清除的原始数据 30(DC差分和AC VLC)包括原始(或其副本)块结束码EOB。添加到 图像数据16中的数据32(也就是新的DC差分)包括新的(或原始) 块结束码EOB。此外,新创建的水印用户数据空间20包含用户数据起 始码34,它增加了画面数据帧中的比特数目。在确定了画面数据帧中 的可用备用容量时,一旦清除原始AC和DC差分,由于仍然保留EOB 码,因此所包含的仅仅是DC差分和AC可变长度编码。
标记水印用户数据块
参考图12,有必要对嵌入水印处理所插入的水印用户数据块20 以及初始给出的任何用户数据块加以区分。为此目的,将会使用以下 技术。
无论画面帧是否包含原始用户数据块36,如果在图像帧内部存在 空间来包含水印用户数据块20,那么水印用户数据块20将是图像帧的 最后一个用户数据块。参见图12B。水印用户数据的最末字节的最末比 特被设定为‘1’(也就是说,发送多达用户数据中最末字节的整数个 字节,然后仅仅发送跟随着一个单独‘1’比特的7比特水印数据)。
如图12C所示,如果画面中包含了一个或多个原始用户数据块 36,并且图像内部不存在空间来包含一个水印用户数据块,那么最后 一个用户数据块的最末字节的最末比特将会保存在水印数据中,并且 由一个‘0’所取代。
如果画面不包含原始用户数据块并且画面内部没有空间来包含水 印用户数据块,那么不需要进行任何操作。
上文描述的改变最末比特仅仅是一个实例。作为替换,也可以改 变第一个比特。
水印数据的加密,图15
当嵌入水印的MPEG-2文件中出现了水印数据时,所述水印数据必 须不包含MPEG起始码,这是因为所述起始码将会过早终止用户数据区 域或者造成其他不合需要的解码器行为。对那些用于代表DC差分和AC VLC的编码而言,其特性将会导致不能在显示的图像数据内部意外地产 生起始码。因此,只要在产生标记信息的时候加以关注,也不会在水 印数据中产生起始码。然而,水印数据加密有可能产生起始码。因此 有必要检查那些用于起始码的加密数据,并且检查将这些加密数据变 换为未加密水印数据的地方(这种检查不会影响安全性,因为在使用 正确密钥进行解密的时候,只可能确定哪些字节没有加密)。在有必 要恢复到未加密水印数据的地方,还必须执行一个检查,以确保这个 操作不会产生另一个跨越加密/未加密数据边界的起始码。
在这里可以使用任何适当的加密算法。当前优选的是AES算法。
图15显示了使用异或(XOR)操作的说明性加密处理。由于使用 XOR操作,因此解密处理与加密处理是相同的。
在图15中:
“idx”是一个索引要被加密(或解密)的水印数据字节的索引计 数;
“zero_count”是比特流中连续零值数目的一个计数;
“ubyte”是未加密水印数据的一个字节;
“ebyte”是加密水印数据的一个字节;
“r”是加密算法产生的随机数,对于每个字节来说,“r”是不 同的;
“zero_count++”是指zero_count递增;以及
“idx++”是指idx递增。
在概述中对加密处理进行监视,以便确保不会意外地产生一个 MPEG起始码。举例来说,MPEG起始码是3个十六进制字节00 00 01。 这种编码不会在未加密的水印数据中产生,但有可能在加密数据中意 外地出现。如果在加密数据中出现了这种编码,那么作为替换,将会 使用未加密数据。
图15的处理对一个零序列(步骤S57)或是跟随着一个‘1’的零 序列(步骤S58)进行检查,在这种情况下,所述处理输出(S60)未 加密数据ubyte,否则它会输出(S59)加密数据ebyte。
参考图15,加密(或解密)处理始于步骤S50并且进行到步骤S51, 其中idx和zero_count均设定为零。在步骤S52,idx与将要加密(解 密)的水印数据的字节数目num_bytes进行比较。如果已经处理了所 有字节,那么所述处理将在步骤S53结束,否则它会进行到步骤S54 和步骤S55,其中步骤S54获取(下一个)将要处理的水印数据字节 ubyte,步骤S55获取一个用于加密数据字节的随机数r。在步骤S56, 通过执行ebyte=ubyte异或r来对数据字节进行加密。步骤S57和 S58检查最终得到的数据流中是否可能存在一个MPEG起始码。步骤S57 检查是否ubyte或者ebyte是零序列,在这种情况下,步骤S59输出 ubyte。步骤S58检查是否有一个其后跟随着一个‘1’(ebyte==1) 的零序列(zero-count>1)。如果是,那么将会在S60输出ubyte, 否则在S59输出ebyte。在步骤S61,如果ubyte为零,那么zero_count 递增,否则在步骤S62将把zero_count设定为零,最终,在步骤S64, idx递增,而所述处理返回到步骤S52。
差分DC的重新编码
在整个切片中都对内部块的DC系数进行差分编码。初始差分值将 被保存并且还会计算一个新差分值,此外还使用这个新差分值来取代 上述差分值。由此允许进行变化,以便提供一个预期亮度级别并且给 出良好的模板设计定义,其中所述预期亮度级别可以是固定亮度级 别。
参考图4,假设正在修改一个I帧并且中心宏块10是模板中包含 水印数据的宏块,而左边和右边的宏块都在模板以外。对左边的块而 言,其DC差分60处于模板之外并且不受水印影响。而DC差分61到 64则处于模板以内。将DC差分61到64从宏块中清除并且加以保存。 DC差分61到64由代表水印的新差分值取代。为了易于说明,假设水 印是一个白色级别(white level)的区域。DC差分61由代表预期白 色级别的新差分值取代,代表与DC差分61一样的白色级别的DC差分 62到64因此都被设定为零。DC差分65被重新计算。退出模板则包括 使用一个新差分值来取代原始差分值(也就是块65的差分值)。由于 可以根据a)从变换成非差分值的嵌入水印的差分值中计算得到的块 65的值以及b)块64的原始(已清洗)非差分值这二者之间的差值来 计算原始差分值,因此可以在清洗器中颠倒所述处理,由此不必保存 (块65的)初始差分值。
图4假设一个模板与一个宏块重合。这种情况非常有利,因为它 使入口点和出口点的数目减至最少,并使零DC差分的数目增至最大。 然而,模板有可能不与宏块重合。
P帧和B帧
P帧和B帧的内部宏块可以如上所述进行修改。如上所述,非帧内 编码的宏块可以令AC VLC被清除,但是采用非帧内编码的宏块是经过 预测编码的,因此这些变化很少能被察觉。而运动矢量的水印嵌入则 只能在P帧和B帧上执行。
色度
以上描述假设只在亮度中提供了水印数据。然而这些宏块也可以 包含色度信息的DCT块。可以采用等同于为亮度描述的方法而把水印 数据包含在色度DCT块中。并且水印数据还可以只包含在色度DCT块 而不是亮度块中,但是这种情况目前并非优选。
恢复原始图像数据的概述(图16)
参考图13C,其中(在临时画面缓存器74中)显示了嵌入水印的 比特流的一个实例,但是所述比特流将会转移到一个主缓存器70,以 便取代原始比特流而发送到一个解码器。当在解码器上接收到嵌入水 印的图像时,除非恢复原始图像,否则将会显示嵌入水印的图像。图 16描述了根据本发明来恢复(清洗)原始图像的处理的概述的一个实 例。
在步骤S20,保存和分析嵌入水印的比特流。在步骤S22,从比特 流中提取加密的水印用户数据并且将其保存。此外还保存任何附加于 比特流末端的数据。在步骤S24,对保存的加密水印用户数据进行解 密,以便恢复原始DC差分和AC VLC。在步骤S26,恢复的原始DC和 AC VLC取代那些代表水印的DC差分。结果的比特流是一个MPEG2压 缩的比特流,但是其中省略了嵌入水印数据。在步骤S28,所恢复的比 特流是以常规的MPEG2方式解压缩的。
由于所有原始系数都作为用户数据而保留和/或附加于比特流末 端,因此可以准确恢复原始比特流。最终得到的已清洗文件是一个用 于比特匹配于原始未嵌入水印的文件的比特。
在“水印清洗码”部分更详细地描述了用于恢复原始图像数据的 处理的一个实例。
说明性实施(图17、18和19)
参考图17,其中显示了一个说明性嵌入水印系统。来自信源50 的未压缩数字视频序列应用于一个常规的MPEG2编码器52。这种编码 器是公知的。在这个实例中,编码器52是一台运行压缩软件的计算机, 但是所述编码器也可以是一个专用处理器。压缩视频序列作为文件存 入存储器54,而所述存储器可以是例如计算机52的硬盘
水印嵌入器56从存储器54接收压缩视频序列。在这个实例中, 嵌入器是一台运行下文所要描述的嵌入软件的计算机,但是嵌入器也 可以是一个专用处理器。嵌入处理包括一个如图9所示的模板和一种 使用了至少一个加密密钥的加密算法,二者都是在解码器上恢复原始 图像所必需的。在这个实例中,计算机具有一个智能卡接口57,经由 该接口,模板和一个或多个密钥安全地保存在一个智能卡64或是其他 安全数据载体中。作为选择,可以经由网络而以一种安全方式或以其 他任何安全方式来发送模板和一个或多个密钥。
嵌入器将水印嵌入压缩比特流,嵌入水印的比特流经由传输链路 58转移到(例如工作室62中的)另一个文件存储器60,在其他实例 中,所述传输链路可以是无线链路、网络、诸如磁盘或磁带这样的数 据存储设备。
参考图18,其中显示了一个解码器。从存储器60提取嵌入水印的 比特流并且将其应用于一个恢复原始比特流的解嵌入器,其中所述解 嵌入器也称为“清洗器”66。在这个实例中,清洗器是一台运行下文 所述的解嵌入软件的计算机,但是清洗器也可以是一个专用处理器。 清洗处理涉及图9所示模板以及使用了至少一个加密密钥的加密算 法,二者都是在清洗器上恢复原始图像所必需的。在这个实例中,计 算机具有一个智能卡接口63,经由该接口,从智能卡64接收模板和一 个或多个密钥。清洗器的输出是一个经过压缩的比特流,所述比特流 馈送到一个常规的MPEG2解码器65来进行解码,并且在显示器67上 进行显示。
缓存器
参考图19(和13),为了把水印数据嵌入压缩比特流,使用了一 个文件(图12中的54)和三个缓存器。它们是:主缓存器70,它保 存那些来源于压缩器的原始的根据MPEG2压缩的比特流,并且输出嵌 入水印的比特流;水印数据缓存器72,它保存原始DC差分和AC VLC; 以及临时画面缓存器74,在所述缓存器中构造了嵌入水印的比特流, 以便将其转移到主缓存器。这些缓存器可以是物理缓存器,在本实例 中,这些缓存器可以是由软件定义的虚拟缓存器。
相应地,清洗处理使用了三个缓存器,它们是:主缓存器70、水 印数据缓存器72以及临时缓存器74。
水印嵌入
下文借助实例来对上述不同处理的伪代码实施进行说明。
Watermark Embed-Pseudo code implementation example
Create a main buffer and a watemark data buffer
WHILE pictures still to do
     Read data for one picture from file into the main buffer
     Create a temporary picture buffer
     WHILE NOT at start of displayed image data
          Parse the main buffer
     Enable all selected watermarking techniques(flag in the watermark data buffer)
     WHILE NOT end of picture
          CALL Process Slice
     Check that space constraints can be met
     IF space constraints not met
          Disable some of the watermarking techniques for this picture(flag in the watermark data buffer)
          WHILE NOT end of picture
               CALL Process Slice
     Determine space available in picture with new watermarked displayed image data
     IF less than 5 bytes
          IF original user data present
               Flag the last block ofuserdata to indicate it is not watermark
          data
          Output the displayed picture data to the main buffer
          Pad the picture to size using zero bytes
     ELSE
          Output a user data start code
          WHILE there is watermark data AND there is space in the picture to fill
               Encrypt watermark data
               Output encrypted watermark data to user data space in the temporary picture buffer
    Flag the block of user data to indicate it is watermark data
    Output the displayed picture data to the main buffer
    IF there is space in the picture to fill
            Pad the picture to size using zero bytes
Write the modified picture from the main buffer to file Write any data remaining in the watermark data buffer to file
(水印嵌入-伪代码实施实例
创建一个主缓存器和一个水印数据缓存器
当有画面时,需要
从文件中把关于一个画面的数据读入主缓存器
创建一个临时画面缓存器
如果不处于所显示图像数据起点
分析主缓存器
启用所有选定的水印嵌入技术(水印数据缓存器中的标记)
如果不处于画面末端
调用处理切片
检查可以满足空间约束条件
如果没有满足空间约束条件
禁止将一些水印嵌入技术用于这个画面(水印数据缓存器中 的标记)
如果不处于画面末端
调用处理切片
使用新的嵌入水印的被显示图像数据来确定画面中的可用空间
如果小于5个字节
如果原始用户数据存在
标记用户数据的最末块来指示它不是水印数据
将所显示的画面数据输出到主缓存器
使用零字节来填充画面到大小
否则
输出一个用户数据起始码
当存在水印数据并且画面中存在要填充的空间时
加密水印数据
将加密的水印数据输出到临时画面缓存器的用户数据空间
标记用户数据块来指示它是一个水印数据
将所显示的画面数据输出到主缓存器
如果画面中存在要填充的空间
使用零字节填充画面到大小
从主缓存器中把经过修改的画面写入文件
将水印数据缓存器中保留的任何数据都写入文件)
处理切片函数
WHILE in slice
     IF data is not related to the watemark techniques
             POP the data from the main buffer
             PUSH the data to the picture buffer
     ELSE
             POP the data from the main buffer
             PUSH the data to the watermark data buffer
             Calculate replacement value
             Encode replacement value
             PUSH replacement value to the picture buffer
(如果处于切片中
如果数据并不涉及水印技术
从主缓存器中弹出(POP)数据
将数据推入(PUSH)画面缓存器
否则
从主缓存器中弹出数据
将数据推入水印数据缓存器
计算替换值
编码替换值
将替换值推入画面缓存器)
水印嵌入码
作为水印嵌入码的说明,符合MPEG2的比特流保存在一个文件中, 例如图12的54,缓存器70、72和74将被创建,并且把一个画面的 数据从所述文件写入主缓存器70,而在所述缓存器中对这些数据进行 分析。接下来对嵌入水印技术进行选择。参考图22而在下文对嵌入水 印技术的选择进行更为详细的描述。最初,所有水印技术都被启用。 然后运行的是“处理切片函数(process slice function)”,所述 函数将会单独进行更详细的说明。在概述中,所述函数将原始DC差分 和AC VLC放入水印数据缓存器72;计算新水印的DC差分(也就是替 换值)以及将替换值放入画面缓存器74。
然后进行检查,以确保可以满足一个空间约束条件。最初,假设 将某个集合中的所有水印技术都应用于比特流。如果这没有满足空间 约束条件,那么将会禁用所述技术中的一种或多种。在这个实例中, 如果从图像中清除AC VLC所释放的比特数目大于改变DC差分所需要 的比特数目,那么将会通过一个空间约束条件。这表示嵌入水印的显 示图像不大于原始显示图像。如果没有满足这个条件,则表示清除AC VLC并没有为嵌入水印DC差分释放出足够空间。
使用选定技术再次运行所述处理切片函数。在这个实例中,“确 定可用空间”的步骤使用画面中的新水印的DC差分来检查画面中的可 用空间。
如果备用空间小于5个字节,那么将会无法包含水印用户数据域 20。如果比特流包含一个或多个用户数据域36,那么如在图11C的40 所示,最后一个这种域36的最末比特将会设定为零。参见图11或12 的22,显示的画面数据包含那些代表水印的新DC差分,所述画面数据 从画面缓存器74输出到主缓存器70,并且画面大小由零比特填充到其 原始大小。
举例来说,如果在包含了代表水印的新DC差分的画面数据中具有 足够空间,那么将会输出一个用户数据起始码,从而在画面缓存器74 中创建一个水印用户数据域20。对水印数据缓存器72中保存的原始 AC VLC和DC差分进行加密并且将其放入临时画面缓存器74的水印用 户数据域。如图11B的38所示,水印用户数据域的最末比特设定为1, 以便指示它包含了原始AC VLC和DC差分。临时画面缓存器74的内容 输出到主缓存器70。如果存在空间来填补嵌入水印的显示图像数据空 间23,那么如图11C的22所示,将会使用零比特来填充空间23。然 后将主缓存器70的数据写入一个文件。对水印数据缓存器72中保持 的任何数据进行加密并将其也附加于形成文件的比特流的末端,所述 任何数据即不在水印用户数据中的原始AC VLC和DC差分。
处理切片函数
作为这些功能的说明,在这个实例中,数据是在以上参考图5描 述的切片中进行处理的。然而这一点并非必要。它仅仅是一种软件操 作的便利方法。
代码POP表示从缓存器中清除数据。而代码PUSH则表示将数据移 入一个缓存器。
由此,如上所述对主缓存器70的数据进行分析。在主缓存器中, 达到所显示图像数据开端的所有数据都被略过并且保留在其中。推入 到画面缓存器中的唯一数据即为所显示的图像数据。这样更易于修改 原始用户数据块。而在添加水印用户数据的情况下,有必要将其插入 嵌入水印的显示图像数据之前。从主缓存器70中清除诸如AC VLC和 DC差分这种涉及水印数据的数据并且将其放入水印数据缓存器72。对 DC差分的新替换值进行计算和编码,并且将其放入画面缓存器74。
Watermark Wash-Pseudo code implementation example
Create a main buffer and a watermark data buffer
CALL Initialise Watermark Data
WHILE pictures still to do
     Read data for one picture from file into the main buffer
     Create a temporary picture buffer
     CALL Get Watermark Data
     WHILE NOT at start of displayed image data
         Parse the main buffer
     Enable watermarking techniques as indicated by the setting of flags in the
watermark data
      WHILE NOT end of picture
           CALL Process Slice
      Output the contents of the picture buffer to the main buffer
      IF there is space in the picture to fill
             Pad with zeros
      Write the modified picture from the main buffer to file
Initialise Watermark Data function
Isolate watermark user data blocks from the file
Decrypt the data
Store in a temporary file
Get Watermark Data function
IF watermark data buffer is not full AND watermark data still present in tempora:
file
       Read watermark data from temporary file into watermark data buffer
Process Slice function(NOT the same as the function used to embed the
watermark)
WHILE in slice
     IF data is not related to the watermark techniques
              POP the data from the main buffer
              PUSH the data to the picture buffer
     ELSE
              POP the data from the main buffer
              POP original data from the watermark data buffer
              PUSH original value to the picture buffer
(水印清洗-伪代码实施实例
创建一个主缓存器和一个水印数据缓存器
调用初始化水印数据
当有画面时,需要
从文件中将关于一个画面的数据读入主缓存器
创建一个临时画面缓存器
调用获取水印数据
如果不处于所显示图像数据起点
分析主缓存器
启用水印数据中的标记设定所指示的水印嵌入技术
如果不处于画面末端
调用处理切片
将画面缓存器的内容输出到主缓存器
如果图像中存在空间来进行填充
使用零进行填充
从主缓存器中把修改过的画面写入文件
初始化水印数据函数
将水印用户数据与文件隔离
解密数据
存入一个临时文件
获取水印数据函数
如果水印数据缓存器并未填满并且水印数据仍然存在于临时 文件中
从临时文件中把水印数据读入水印数据缓存器
处理切片函数(不与嵌入水印所使用的函数相同)
如果处于切片中
如果数据并不涉及水印技术
从主缓存器中弹出(POP)数据
将数据推入(PUSH)画面缓存器
否则
从主缓存器中弹出数据
从水印数据缓存器中弹出原始数据
将原始数据推入画面缓存器)
水印清洗码
水印清洗码恢复原始图像数据。作为说明,主缓存器70、水印数 据缓存器72和临时缓存器74是在解码器66上创建的。临时文件由“初 始化水印数据函数(Initialise Watermark Data function)”这个 函数所创建。
初始化水印数据函数把水印用户数据块与文件隔离,所述数据块 即为加密的原始AC和DC差分,并且该函数(使用来源于智能卡64的 密钥)对加密的原始AC和DC差分进行解密以及把经过解密的AC VLC 和DC差分存入临时文件。
如果存在未经清洗的画面数据,那么将会把这些画面数据从临时 文件读入主缓存器。临时缓存器74就是在这个阶段创建的。
“获取水印数据(Get Watermark Data)”这个函数确定水印数 据缓存器72是否并未填满“以及”水印数据是否仍处于临时文件中。 如果是,那么将会把水印数据从临时文件读入水印数据缓存器。这样 就确保了水印数据缓存器中始终存在着至少足以清洗当前画面的数 据。
“启用水印技术......(Enable watermarking techniques...)” 从水印数据中读取大小为1个比特的标记,以便确定是否使用所有选 定技术而在画面中成功嵌入了水印。如果不是,则读取附加标记比特 来确定使用了哪些技术。
调用处理切片(CALL process slice)是如下运行的:
POP和PUSH指示与以上给出的相同的操作。对主缓存器中的数据 进行分析。清除主缓存器中不涉及水印嵌入的数据并且将其放入画面 缓存器74。从主缓存器70中清除水印数据(也就是代表水印的DC差 分)。从水印数据缓存器72中清除那些经过解密的原始AC VLC和DC 差分,并且将其放入画面缓存器74。
更进一步的步骤将数据从画面缓存器转移到主缓存器。
最终,将恢复的画面从主缓存器写入一个文件。
可以理解的是,上述处理需要数据载体64中保存的模板来确定哪 些块包含水印数据以及哪些块不包含水印数据。并且,解密所需要的 一个或多个密钥来源于数据载体64。
如以下“第四实例-运动矢量”部分所述进行修改的运动矢量也 被以同样的方式还原成它们的原始值。
第二实例
非内部DC的变化
在第一实例中,使用代表水印的新值来替换那些处于内部帧的模 板块中的DC系数的原始DC差分值,由此施加水印。其中并未替换其 他系数。原始值保存在水印用户数据空间和/或比特流末端。
在本发明的第二实例中,除了替换内部帧的DC系数之外,在非内 部帧(也就是P帧和B帧)的模板块中,DC系数由新的数值以及水印 用户数据空间和/或比特流末端保存的原始值所取代。
在非内部帧中,由于变化幅度通常很小,因此,在对当前DC系数 与希望的系数之间的差值进行编码时,将会对DC系数进行编码。然而 存在一些情况,其中所述幅度可能大得多并使嵌入水印的块的DC值在 范围界限处被裁剪。为了避免这种情况,可以将DC系数的幅度变成最 小值1(将所述值变为零将会完全清除VLC并且改变后续编码的行 程)。
原始VLC保存在水印数据缓存器72中,新的编码则处于它的位 置。在编码表中,代表行程为零以及级别变化为±1的VLC是最短的 VLC,因此这个处理保证不会增加对画面进行编码所需要的比特数目。 因此,无论何时,只要执行内部DC变化,那么总是可以执行以上操作。
当DC变化趋于黑色时,将等级变化的正负号设定为正,在其趋于 白色时,将等级变化的正负号设定为负。由此可以避免出现裁剪DC的 情况。
参考图20,如下所述来处理非内部帧。步骤S30确定帧类型。如 果所述帧是非内部帧,那么处理将会进行到步骤S32,否则,如果所述 帧是内部帧,那么处理将会如图10所述继续进行。在步骤S34,清除 代表模板块中DC系数的编码(所述编码即为上述差值)并且将其存入 水印数据缓存器72(参见图12B)。在步骤S36,将+/-1的新变化值 放入比特流,以便取代清除的系数。在步骤S36和S38,在临时缓存器 74中重组比特流(参见图12C),如果空间可用,那么将会把清除的 系数值放入水印用户数据空间20,否则在步骤S40,所述系数值附加 于比特流末端。而原始DC系数则是如上所述进行加密的。
在非内部帧中,AC VLC并没有改变。
第三实例,帧画面,改变DCT类型,图21
第一和第二实例可以如下进行修改。
在这里存在两种类型的画面:场和帧。在场画面中,仅仅出现了 一种DCT块。
在第三实例中,我们只关心帧画面。在帧画面中可以出现两种类 型的DCT块;也就是场DCT块和帧DCT块。在对视频源进行隔行扫描 时使用的是场DCT,因为它改善了相邻行之间的相关性,由此提高了信 号功率在DCT的低频成分中的比例。然而场DCT并非专用于这个目 的。在一个宏块中,所有的块都具有相同的类型。
参考图21A,如果在一个帧画面中对于一个DCT块B1实行DC变 化,但却没有对相同宏块MB中直接垂直于其上或其下的DCT块实行DC 变化,并且正在将场类型应用于所述宏块的DCT块,那么所述变化将 会产生横越宏块整个高度的条纹。由于所述条纹造成水印失真,因此 所述变化并不理想,如果水印采用字母-数字形式,那么将会更加难以 读取这些字母-数字。
条纹的出现完全依赖于对内容所进行的编码,尤其依赖于使用场 DCT来进行编码的宏块的比例。根据本发明的一个实例,为了解决这个 问题,在包含了至少一个将要嵌入水印的DCT块的帧画面中,任何宏 块的DCT类型都被设定为帧。这其中包括将原始DCT类型码存入水印 数据缓存器72(图13)并且使用那些用于一个帧DCT的编码来将其替 换。但这并不影响画面所需要的比特数,因为DCT类型码总是一个大 小为1比特的值。因此每当使用DC水印时,总是实行这个变化。
与运动矢量的变化一样,DCT类型作用于宏块级别,因此不管是否 嵌入水印,任何变化都会影响到宏块内部的所有DCT块。在这种情况 下,由此产生的副作用是在宏块内部对各行进行重新排序。显然这会 产生一个明显错误的宏块,但是所述宏块的出现未必是不可采用的。
图21B描述了一种实例方法,用于对DCT类型进行处理(在恰当 情况下,包括从场DCT变为帧DCT以及颠倒这个变化)。
在图21B中:
“picture_structure==FRAME”检测的是帧图像;
“&&”是逻辑“与”;
″frame_pred_frarne_dct==0″检测到宏块具有以个体为基础而 规定的DCT类型,而不是全都设定成用于这个画面的帧DCT类型;
||是逻辑“或”;以及
“macroblock_intra||macroblock_pattern”检测的是帧内编码 宏块以及包括已编码DCT块的非内部块。帧内编码的宏块让所有DCT 块都被编码。由于只有编码的块才具有DCT类型,因此有必要对此进 行检测。
DCT类型(dct_type)由一个1比特码来表示:1=场类型;0= 帧类型。
原始比特流保存在主缓存器70中,而清除的码则临时保存在水印 数据缓存器72中(参见图13)。
所述处理始于步骤S70并且进行到步骤S71和S72,这些步骤检 测那些具有DCT类型的宏块。如果宏块不具有DCT类型,那么处理将 会终止于步骤“结束”。如果宏块具有DCT类型,那么在步骤S73,从 主缓存器70中清除(POP)代表DCT类型的1比特码。步骤S74判定 允许进行DC变化(参见以下的“选择性技术”部分)并且宏块处于模 板内部。如果是这样的话,那么步骤S75判定是否正将水印嵌入比特 流或者是否正把嵌入水印的比特流恢复到它的原始形式(清洗)。如 果正在向比特流中嵌入水印,那么在步骤S76,将会把(在S73,从主 缓存器中清除的)dct_type码置入(PUSH)水印数据缓存器72(参见 图13)。然后在步骤S77,将dct_type码的值改为帧类型(=0), 并且在步骤S79,将新的编码“推入”(PUSH)临时缓存器74(参见 图13)。
如果从步骤S74开始采取“否”路线,则在步骤S79,把“取出” 的dct_type码“推入”临时缓存器。
在逆处理中如上所述地执行步骤S70到S74。然后在步骤S75,确 定正在反转水印嵌入处理(清洗),在步骤S78,使用从水印数据缓存 器72中提取的原始码来取代那些用于嵌入水印的比特流的dct_type 码。然后在步骤S79,如前所述,将dct_type码推入(PUSH)临时缓 存器74。
在图21B显示的处理末端,临时缓存器74包含新的dct_type码, 水印数据缓存器72则包含原始码。来源于缓存器72的原始dct_type 码转移到水印用户数据空间20或者附加于比特流末端。新的dct_type 码放置在比特流中,以便取代原始码。完成这些操作所采用的方法与 以上“水印嵌入码”这部分描述的方法相同。
选择性技术
如上所述,可以通过以下方法来将水印嵌入画面:
a)第一实例-从内部帧中的模板块中清除所有那些代表原始DC 和AC系数的编码,并且使用代表水印的新值来取代DC系数;
b)第二实例-可选地,还清除那些代表非内部帧中原始DC系数 的编码并且使用新值来取代这些编码;
c)可选地,还使用零值来取代模板块的原始运动矢量值。
一般地说,可以使用三种技术:
1.允许改变模板块中的DC系数;
2.允许从模板块中清除AC系数;以及
3.允许在模板块中改变运动矢量值。
通常,与原始画面相比,采用这里描述的实例技术而被嵌入了水 印的画面需要较少比特来进行编码。在第一实例中,这是因为完全清 除了AC系数,但是为DC和运动矢量所进行的大量零差分值编码也起 到了相当大的作用。
然而存在这样一些情况,其中为了完全地嵌入水印,插入画面的 比特数目大于画面中所清除比特数目。举例来说,当完全是黑色的帧 时,容易出现上述情况,并且通常会在视频序列中遇到这种情况。如 果发生这种情况,那么,为了满足代表画面所用的比特数目必须保持 相同这个约束条件,有必要在满足约束条件之前禁止使用一些将水印 嵌入画面的技术。
在本发明的实例中,这个选择是基于每个画面来进行的,因此有 必要保存附加信息,以便于正确的画面清洗。插入标记比特是为了指 示允许将哪些技术应用于当前画面。表格A显示了当前使用的系统。 不管从完整的技术集合中选出的选定技术子集是否可用,所述系统都 非常易于适应更多技术的添加并且非常有效。应该注意的是,第一标 记比特的选择被设计成了防止在嵌入水印的数据内部出现MPEG-2起 始码。

表格A选择性技术的标记比特
只要可能,作为最低限度,应该使用内部DC变化和AC清除技术, 因为这将给出很好的可视性和健壮性。如果应用了内部DC变化,那么 还可以使用非内部DC和DCT类型变化,这是因为它们受到保证,不会 增加画面所需要的比特数目。改变运动矢量将会改善水印的可视质量 和完整性,但这并不是必需的。
作为实例,图22是对三种嵌入水印技术的选择进行说明的流程 图:
1.允许在模板块中改变DC系数;
2.允许从模板块中清除AC系数;以及
3.允许在模板块中改变运动矢量值。
应该注意到以下要点:
●所释放的AC比特总是非负。总是可以执行AC清除而不导 致画面大小增加。
●用于DC变化的比特以及用于MV变化的比特既可以为正也 可以为负。如果其值为正,那么执行所述技术所需要的比特数将 会大于初始给出的比特数。因此,如果要在当前画面上进行变 化,就必须使用另一种技术(例如AC清除)来释放足够的比特 数目。如果其值为负,那么该技术所需要的比特要少于初始给出 的比特数目,因此实际上已经释放了一些比特并且总是可以执行 所述变化。
只要释放的比特数不足以补偿执行这两种技术所需要的比特,那 么将为DC变化给出超过MV变化的优先级。
参考图22,所述处理始于步骤S80并且进行到步骤S81,在这个 步骤,所有这三种技术一开始都是允许使用的。在步骤S82,对一个(帧 或场)画面进行处理,以便应用所有这三种允许使用的技术。步骤S83 把一个重新处理标记设定为“真”,以此表示一开始假设可以使用所 有这三种技术来对画面进行重新处理。在概述中,使用所有这三种技 术对画面进行了一次处理,由此施加水印并且分析了结果。如果结果 并不成功,那么将会使用一种或多种被禁止的技术重新对画面进行二 次处理。
释放AC比特来允许全部三种技术
步骤S84确定清除AC系数是否导致清除了任何数据,由此释放比 特来改变DC系数。(对黑色画面而言,有可能并不存在AC系数)。 如果释放的比特数目大于零,那么步骤S85确定所释放的AC比特数目 是否大于那些用于DC变化和MV(运动矢量)变化的比特的总和。用于 DC变化的比特数即为清除原始DC码所释放的比特数目与新DC码所用 比特数目之间的差值。同样,用于MV变化的比特数目即为清除原始MV 码所释放的比特数目与新MV码所用的比特数目之间的差值。
如果释放的AC比特数目不小于那些用于DC变化和MV变化的比特 的总和(也就是说,释放了足够的AC比特来允许进行DC和MV变化), 那么可以使用所有这三种技术,因此不需要重新处理画面。这样一来, 在步骤S90,重新处理标记变为“假”。步骤S91判定重新处理标记是 “真”还是“假”。在这种情况下,所述标记为“假”,因此处理将 会终止于“结束”步骤。
步骤S84-没有释放AC比特
有可能在黑色画面中出现这种情况,因此所述画面不具有AC系数 并且无法嵌入任何水印。但这并不会导致出现问题,因为黑色画面根 本没有要保护的内容。
在步骤S84,判定没有释放AC比特,那么所述处理进行到步骤 S93,该步骤禁止使用AC清除技术。步骤S94对用于DC变化的比特是 否大于零进行测试。如果大于零,则在步骤S95将会禁用DC变化技术。 如果并不存在用于DC变化的比特或者已经进行了步骤S95,那么所述 处理将会进行到步骤S96,该步骤测试用于MV变化的比特数目是否大 于零。如果大于零,那么在步骤S97,MV变化将被禁用。
总之,如果没有释放AC比特,那么将会禁用DC和MV变化或者并 不存在DC和MV变化比特。但不论哪种情况,重新处理标记仍旧为 “真”,因此会在步骤S92(再次)处理画面。
应该注意的是,虽然‘释放的AC比特’总是非负,但是‘用于DC 变化的比特’与‘用于MV变化的比特’既可以为正也可以为负。如果 没有AC数据要清除,那么只有在替换数据的比特少于原始数据的时候 才可以执行DC和MV变化:也就是说,用于DC变化的比特<=0,对于 MV变化是同样的。因此可能(但是未必可能)在禁止使用AC清除的情 况下,允许启用DC和/或MV变化。
在禁止使用任何技术的时候,总是有必要进行重新处理,这是由 于原始假设是启用所有三种技术,所以必须改变标记数据,并且在二 次操作中嵌入了水印的帧将会改写在首次操作中嵌入了水印的帧。
缺乏AC VLC数据意味着无法在画面数据中释放空间来允许差分DC 值中的变化,其中所述变化增加了比特数目。在这种情况下是无法嵌 入水印的,但这并不是一个问题,因为其中并没有要保护的内容。然 而,必须向在这里被称为水印清洗器的清除水印的解码器告知上述情 况是在什么地方发生,这样一来,它就不会尝试从所述帧中清除水印。 附加的标记比特则用于对此加以指示。
AC比特小于用于DC和MV变化的比特的总和,步骤S85
如果释放的比特不足以进行DC和MV变化,那么处理将会进行到 步骤S86。
在这种情况下,步骤S86测试释放的AC比特数目是否足以完成DC 变化。如果存在足够比特来完成DC变化(S86的输出为“否”),那 么将会进行步骤S97并且禁止MV变化。然后,所述处理进行到步骤 S91。由于重新处理标记为“真”,但是禁止了MV变化,因此在步骤 S92,画面是在禁用MV变化并且启用DC变化的情况下进行重新处理 的。
如果步骤S86确定没有释放足够比特来完成DC变化(S86的输出 为“是”),那么处理将会进行到步骤S87,该步骤测试释放的AC比 特数是否足以进行MV变化。如果存在足够比特来进行MV变化(S87 的输出为“否”),那么步骤S88将会禁用DC变化。然后,该处理进 行到步骤S91。由于重新处理标记为“真”,但是禁止了MV变化,因 此在步骤S92,画面是在禁止DC变化但允许MV变化的情况下进行重新 处理的。
如果步骤S87确定没有足够比特来完成DC变化(S87的输出为 “是”),那么步骤S890将会禁止DC和MV变化,并且在只启用AC 清除技术的情况下,经由S91和S92来重新处理画面。
在修改图22的处理的过程中,AC清除是永久启用的,因为已经发 现,AC清除从未引起问题。因而在图22中,步骤S93将被清除,并且 不需要一个用于AC清除的标记比特。
第四实例-运动矢量-图23到25
将运动矢量设定为零
参考图23A,运动矢量关联于宏块(由粗体正方形MB显示)而不 是DCT块(由较浅正方形B显示)。因此可以基于浓阴影显示的水印 模板来定义淡阴影指示的运动矢量模板。如以上在第一实例中假设的 那样,即使只有I帧包含水印数据,运动矢量也有可能不合需要地致 使水印失真。较为优选而非必要的是,确定P帧和/或B帧中是否有任 何宏块落入运动矢量模板。如果有,那么将宏块的任何运动矢量值都 设定为零。运动矢量将被差分编码,由此设定差分值来代表一个关于 运动矢量的零值。(也就是说,使用等同于上述用于DC差分的方法来 处理运动矢量)。
如上所述,参考DC差分,从比特流中清除那些代表DCT宏块的运 动矢量的原始码并使用经过修改的编码将其替换,其中所述DCT宏块 包含在模板内部的DCT块,在这种情况下,经过修改的编码代表零值 运动矢量。原始运动矢量码则被放入水印用户数据空间中和/或附加于 比特流末端。
因此参考图13和24:
比特流保存在主缓存器70中。
在步骤S100,判定非内部帧中是否有宏块落入运动矢量模板。如 果有,则从主缓存器70的比特流中清除(S102)与宏块相关联的运动 矢量码并将其存入(S104)水印数据缓存器72。将代表用于运动矢量 的零值的新运动矢量码放入比特流,以便取代(S106)临时缓存器74 中的原始值,并且将原始运动矢量码放入临时缓存器74的水印用户数 据空间20(步骤S108)和/或附加于符合MPEG的比特流的末端(S110)。 如以上参考图15所述,在把原始运动矢量码放入用户数据空间或是附 加于比特流末端之前,将会对其进行加密。
正如在这个部分描述的那样,在以上给出的任何实例中都可以将 运动矢量设定为零。虽然这样将会减少水印失真,但是水印仍有可能 失真,尤其是在边缘位置。以下标题为“边界”的部分描述了进一步 减少水印失真的说明性方法。
边界图23B
参考图23B,为了进一步减少水印失真,运动矢量模板将被扩展, 以便包含那些并不包含水印模板块但却与之毗接的宏块。在扩展的运 动矢量模板中,所有宏块的运动矢量码都是如上所述参考图24来进行 处理的。
这样就减少了水印模板规定的水印失真,但是由于宏块的运动矢 量毗接于水印模板,而所述运动矢量并不包含任何水印块,因此画面 会在毗接宏块上失真。而增加的画面失真是否超过减少的水印失真则 是一个主观判断的问题。
改变运动矢量码的值,图25
运动矢量是以与以上标题为“差分DC的重新编码”部分所描述的 DC系数相同的方式而被差分编码并被重新编码的。P帧具有前向预测 运动矢量,而B帧则具有两种运动矢量:即前向预测和后向预测。如 参考图25所示,这两种类型是独立处理的。
图25A显示了在其他宏块0之间具有三个宏块MB的非常简化的运 动矢量模板,其中其他宏块0并不是水印及其边界的一部分。
图25B显示了宏块的预测类型。F表示前向,B表示反向。一些宏 块FB同时是前向和反向预测的。
参考图25C到E,这些图中显示的数字仅用于说明,而不是要表示 那些用于运动矢量的实际值。图25C显示了用于前向预测运动矢量的 非差分值。图25D显示了对应的差分值。应该注意的是,在这里忽略 了反向预测运动矢量。在将这三个模板宏块中的运动矢量设定为零 时,将会重新计算这些块的差分,因此模板内部的有效值实际为零, 但是模板外部相邻块的有效值则保持不变。这将导致处于标记有“入 口”的模板前沿的宏块差分值会相对于它的先前宏块而发生改变,由 此有效提供零运动矢量值,并且处于标记了“出口”的后沿宏块的差 分值将会改变,以便保持下一个毗接宏块的原始值。
应该了解的是,前向预测运动矢量值处于一个差分值序列,这些 差分值独立于反向预测值,这两个序列的入口宏块与出口宏块不一定 非要重合。
并且还应该了解,不必像上文“差分DC重新编码”这部分的块65 那样保存毗接于模板出口的宏块的运动矢量初始差分值,但最好是将 其保存。
模板-图26到28
如上所述,存在两种类型的画面:场和帧。视频序列可以包括: 只有场画面;只有帧画面;同时具有场画面和帧画面。
只具有帧画面的序列
考虑一个只具有帧画面的序列。在水平和垂直方向上将一个模板 定义到一个DCT块的分辨率(8像素乘8像素)。对于图26A显示的实 例帧画面而言,在具有576行并且每行都具有720个像素的情况下, 所需要的模板大小是90个块乘以72个块。在图26B中,将一个形式 为X的模板定义到一个块的分辨率。图26C显示的最终得到的嵌入水 印的画面具有大小为8×8像素的一个块的显示的水印分辨率。
只具有场画面的序列
考虑一个只具有场画面的序列。参考图27A1和A2,其中对两个大 小为720×288个像素的场进行隔行扫描,以便定义一个大小为 720×576像素的隔行扫描帧。在一个场画面中,即使线条数目是帧画 面的一半,DCT块也还是与一个大小为8×8像素的块相对应。如在帧画 面中那样,一个宏块是2×2个DCT块。
用于场画面的模板(图27B中的X)被定义到一个DCT块的分辨率。 为了防止出现条纹,因而为这两个场使用了相同的模板。由于块的位 置相对于场的起点保持固定,因此不需要为每个场进行特殊的模板调 整。
参考图28,对图28C所显示的一个宏块而言,模板指示了一个纯 黑显示并且将被嵌入水印的块。在隔行扫描帧中,来自相应两个场的 宏块进行交织,由此形成了如图28A和28D显示的合成物,其中所述 合成物在水平方向上具有两个DCT块,而在垂直方向上具有四个DCT 块。所述合成物包括来自场1的宏块B1以及来自场2的宏块B2。隔行 扫描帧的线由关于来自场1的线条的F1以及关于来自场2的线条的F2 所指示。
即使模板具有图28C显示的8像素乘8像素的分辨率,所显示的 水印X仍具有图28D显示的水平8个像素以及垂直16个像素的分辨 率。
场画面与帧画面的序列
考虑一个具有至少一个场画面和至少一个帧画面的视频序列。如 图27B中的X这样的模板被设计用于一个或多个场画面并且其分辨率 为一个DCT块。这将导致所显示的水印具有大小为水平一个块以及垂 直两个块的分辨率。一个或多个帧画面中的水印需要与场画面的水印 保持一致;并且可以通过从用于场画面的模板中自动导出用于帧画面 的模板而对此加以保证。实现这个目的的最简单的方法就是将场模板 的各行对折。然后帧模板具有大小为水平一个块以及垂直两个块的有 效分辨率,由此确保帧画面中显示的水印匹配于场画面的水印。
在实践中将会检查视频序列,以便确定其中包含的一种或多种画 面类型。对于只有场画面和只有帧画面的序列而言,将会使用一个适 于所述画面类型的模板。对于同时具有这两种画面类型的序列而言, 将会选择适于场画面的模板并将其用于序列中的场画面。然后从场模 板中导出供帧画面使用的模板,由此确保对于水印的一致外观。
模板可以是保存在一个或多个存储器中的位图。
修改
分组化的比特流
在原始序列是MPEG-2分组化流(分组化视频序列或音频/视频复 用)的情况下,如果对嵌入水印的视频序列进行重新分组,那么将不 再需要视频序列结束码,因此将剩余水印数据放在分组化流的结束码 之后。
为了简化分组化流(音频/视频复用)的嵌入,可以预先处理所述 流,以便提取视频序列。然后如上所述,视频序列可被单独嵌入。随 后将现有分组化流文件用作模板,并且结合音频而对被嵌入的视频序 列进行重新分组,由此允许重新使用所有分组信息并且保持所有定时 (保持画面数据大小的一个有益的副作用)。以上伪代码中并未描述 这个附加处理阶段,因为所述阶段并不是嵌入处理的操作所必要的。
改变压缩比
上述实例假设:在把水印数据嵌入压缩比特流之前,对视频进行 最小压缩,从而使画面质量达到最高。因此,水印用户数据域不可能 包括所有加密原始系数,而剩余数据则附加于文件末端。在当前并非 优选的本发明版本中,在执行压缩之前提供了一个对包含嵌入水印的 数据所需要的数据空间所进行的估计,并且对压缩加以控制,以便提 供足够备用空间来适应水印用户数据域的所有原始系数以及所显示图 像数据域的新DC差分。
附加那些经过加密的原始AC VLC和DC差分
在上述实例中,超出水印用户数据域中存储的那些的原始AC VLC 和DC差分附加于文件末端。然而也可将其放在文件开头。
在当前优选实施中,对附加于文件末端的剩余字节数目进行计 数。所述计数放置在剩余数据之后,以便易于访问剩余数据起点。
将原始AC VLC和DC差分存入用户数据域的替换方法
在以上描述中,原始AC VLC和DC差分保存在压缩比特流的用户 数据域20。如图14所示,在帧P1和P2的实例中,帧P1的一些数据 保存在帧P1的用户数据空间20,任何超出所述空间的数据保存在帧 P2的用户数据空间。贯穿所述比特流继续这个处理。并且任何剩余数 据都附加于比特流末端。
在这个处理的一种修改中,如图29所示,帧P1的原始AC VLC和 DC差分保存在帧P1的用户数据空间20。对于每个帧来说,产生一个 剩余数据域291,其中包含了经过加密的AC VLC以及DC差分的字节 数目B,其中所述字节不与加密AC VLC以及DC差分一起包含在所述 帧的用户数据空间中。如果没有剩余AC VLC和DC差分,那么关于所 述帧的数字B为零。因此每个帧只在其用户数据空间20中包含了源自 所述帧的数据,而剩余数据则保存在其他地方,例如图29的缓存器 290。
如图30所示,剩余数据可以附加于MPEG比特流末端,其中所述 剩余数据即为本实例中缓存器290的内容。如292所示,剩余数据可 以附加于比特流开端,或者如293所示,剩余数据也可以附加于比特 流的结束端。
代表用户数据比特数的编码B将被选择,因此它们并不代表MPEG 比特流中使用的其他码或与MPEG比特流中使用的其他码相混淆,尤其 是MPEG起始码。
文件
如上所述,任何包括编码B、经过加密的剩余AC VLC以及DC差 分的剩余数据都附加于比特流末端。在一种修改中,剩余数据保存在 一个与比特流分离的文件中。如图30所示,该文件可以附加于比特流 末端,也就是比特流的开端292或结束端293。如图31所示,该文件 可以保存在一种传输介质294中,例如与比特流分离的数据载体或通 信信道。而数据载体则可以是软盘、磁带或其他存储介质。
所述文件与比特流相关联。所述关联可以通过将其附加于图30显 示的比特流而得以实现。如果如图31所示,将文件单独保存,那么, 举例来说,可以使用一个将文件链接到比特流的标识符而将其与比特 流关联。这种标识符的一个实例是UMID。
清洗
为了从图29的比特流中清洗水印,将会保存和分析比特流P1到 Pn。在分析处理中,从附加数据292或293或是文件292、293或294 中检索那些包含码B、AC VLC以及DC差分的剩余数据,并且将其加以 保存。对于各个帧而言,用户数据域20中的数据将被解密并用于取代 比特流中的修改数据。而字节数目B就是为这个区域读取的。如果它 大于零,那么所述域的剩余数据将被解密并被用于取代所述帧的剩余 修改数据。
在MPEG比特流的实例中,并没有对所述帧进行编号,也没有对剩 余数据域291进行编号。这种编号并不是必需的:每个帧及其关联的 剩余数据域都是连续处理的。而这种编号可以在本发明的其他实例中 提供。
选择水印嵌入技术
以上描述对三种水印嵌入技术的选择进行了说明。然而,可以从 许多技术中进行选择,其中包括:
a)使用经过修改的DC差分来取代DC差分,并且清除原始DC差 分;
b)清除AC VLC,以便在比特流中为原始DC差分提供空间;
c)将清除的系数放在用户数据块中;
d)将清除的系数放在比特流末端;
e)修改运动矢量,以便嵌入水印;
f)修改颜色信息,以便嵌入水印;以及
g)将系数放入P帧和/或B帧的备用空间。
这些技术既可以单独使用也可以结合使用。举例来说,在某些情 况中,有可能在没有清除AC VLC的情况下使用经过修改的系数来仅仅 替换掉DC差分。对系数和用于水印的运动矢量所进行的修改通常而并 非总是会增加比特数目。
可以根据所用技术对比特率产生的作用而对这些技术加以选择。 如果某组技术产生了太多比特(例如a)加上c)),那么可以选择一 组不同的技术。在嵌入水印的比特流中,所用技术是使用一个识别所 述技术的标记来指示的,因此,在把嵌入水印的比特应用于一个清洗 器来清除水印的时候,将会向清洗器提供正确清除水印所需要的信 息。
应用
如上所述的本发明实例可以应用在以下环境中。
内容代理(content brokering)
使用所述技术产生的可见地嵌入水印的文件允许使用一个标准的 MPEG-2播放机来对内容进行预览(嵌入水印的文件是一个有效的 MPEG-2流),其中不需要定制的播放机。嵌入水印的文件包括逆处理 所需要的全部信息(除了加密密钥和模板文件之外)。因此仅仅有必 要分发/发送所述内容的一个副本(与分发一份受保护序列的常规方法 相比较,在所述方法中,所述序列之后还有一个不受保护的副本,并 且所述分发是在买方购买了所述内容的时候进行的)。
这种分发可以采取多种形式:
嵌入水印的内容可以保存在一个安全服务器上,但是,在请求所 述文件的一个副本的时候,可以对文件内部的水印数据执行加密。客 户可以输入他们的详细资料,然后这些资料与所用加密密钥一起保存 在安全服务器上。如果客户想要购买内容,那么可以将客户详细资料 作为索引,以便从安全服务器上检索加密密钥。这意味着一个客户密 钥无法用于清洗另一个客户的嵌入水印的内容副本。当然,具有密钥 的客户仍然可以将(嵌入水印或是经过清洗的)他们的内容副本提供 给其他人。
一旦客户购买了所述内容,则存在如下选项:对文件进行清洗, 以便产生一个没有可见水印的文件,或者,保留嵌入了水印的文件的 本地副本并且根据需要对其进行实时清洗。前一种情况很可能是可接 受的,因为它并没有不同于当前模型的地方。
付费节目广播
水印处理的特性使得有可能开发一种实时清洗器。这意味着受到 保护的内容可以流向观众,以便进行预览。如果观众随后决定为所述 内容付费,那么可以为他们提供一个密钥来进入(例如)他们的机顶 盒并且内容随着到达而在本地进行清洗-不需要改变正在发送的数 据。为了简化实时清洗,首先有必要将所有经过加密的水印信息下载 到机顶盒。作为选择,可以对内容压缩处理进行修改,以便在画面帧 中引入足够的填充来补偿附加的水印数据。在具有给定模板设计的情 况下,可以通过计算来确定需要被补偿的最坏情况的增加。
本发明可以借助硬件、软件或者二者的结合来加以实施。
本发明提供了一个计算机程序,当在计算机上运行所述程序时, 该程序将会执行上述方法。本发明还提供了一种保存这个程序的存储 器。
相关专利内容
标题 发布/更新时间 阅读量
移动呼叫修改 2020-05-12 204
一种修改纸 2020-05-11 105
修改对象的基层 2020-05-12 525
路线修改 2020-05-11 540
路线修改 2020-05-11 878
修改带 2020-05-11 676
修改对话窗口 2020-05-12 618
修改对象的基层 2020-05-13 1048
修改笔 2020-05-11 786
错字修改笔 2020-05-12 958
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈