具体实施方式
本申请实施例提供一种基于H.264压缩域的水印嵌入方法及装置。
为了使本技术领域的人员更好地理解本申请实施例中的技术方案,并使本申请实施例的上述目的、特征和优点能够更加明显易懂,下面结合附图对本申请实施例中技术方案作进一步详细的说明。
参见图1,为本申请基于H.264压缩域的水印嵌入方法的第一实施例流程图:
步骤101:获取宏块的帧块类型,不同帧块类型对应不同数量的帧块。
其中,帧块类型包括:亮度帧块类型和色度帧块类型。具体的,亮度帧块类型包括4乘4帧块类型、8乘8帧块类型和16乘16帧块类型;色度帧块类型包括8乘8帧块类型。
步骤102:从预先设置的水印模式集中为宏块中的每个帧块选择一种帧内预测模式。
其中,预先设置的水印模式集包括:H.264标准定义的帧内预测模式或者所述帧内预测模式的子集。
步骤103:按照预先设置的编码策略对每个帧块的帧内预测模式进行编码,获得编码数据。
具体的,可以按照预先设置的定长编码策略对每个帧块的帧内预测模式进行定长编码。
步骤104:从编码数据中提取水印载体,并将水印信息嵌入水印载体。
具体的,可以按照下述任意一种方式从编码数据中提取水印载体:提取至少一个宏块内的所有帧块的编码数据作为水印载体;提取至少一个宏块内的部分帧块的编码数据作为水印载体;提取至少一个宏块内的所有帧块的编码数据,以及另外至少一个宏块内的部分帧块的编码数据作为水印载体。
参见图2A,为本申请基于H.264压缩域的水印嵌入方法的第二实施例流程图,该实施例以帧块类型为4乘4为例进行描述:
步骤201:预先设置定长编码策略和提取水印载体的策略。
其中,提取水印载体的策略包括:提取至少一个宏块内的所有帧块的编码数据作为水印载体;或提取至少一个宏块内的部分帧块的编码数据作为水印载体;或提取至少一个宏块内的所有帧块的编码数据,以及另外至少一个宏块内的部分帧块的编码数据作为水印载体。
步骤202:获取宏块的帧块类型,不同帧块类型对应不同数量的帧块。
在H.264标准中,可以选择帧内预测和帧间预测两种技术进行编码,编码的基本单位是宏块,一个宏块的亮度分量大小为16像素乘以16像素。帧内预测是利用帧块上边或者左边的像素点来获取预测块的一种编码技术。对于亮度分量来说,每个宏块可以分为4乘4帧块类型、16乘16帧块类型和8乘8帧块类型,而对于色度分量来说,每个宏块只有8乘8帧块类型。其中,4乘4、16乘16和8乘8是指每个帧块的大小,以宏块为4乘4帧块类型为例,它可以划分为16个4乘4亮度的帧块。
如图2B所示,为一个亮度分量4乘4帧块类型的宏块结构示意图,其中的数字标号代表每个4乘4帧块的编号顺序。
步骤203:获取每个帧块允许的帧内预测模式的交集。
在H.264标准中,对于亮度分量4乘4帧块类型和8乘8帧块类型,定义了9中帧内预测模式,分别为:V(Vertical,垂直预测),H(Horizontal,水平预测),DC(平均预测),DL(Diagonal Down Left,左下对角预测),DR(Diagonal Down Right,右下对角预测),VR(Vertical Right,垂直向右预测),HD(Horizontal Down,水平向下预测),VL(Vertical Left,垂直向左预测),HU(Horizontal Up,水平向上预测)。对于亮度分量16乘16帧块类型和色度分量8乘8帧块类型均规定了4种帧内预测模式,分别为V(Vertical,垂直预测),H(Horizontal,水平预测),DC(平均预测),Plane(棋盘预测)。
以宏块采用亮度分量4乘4帧块类型为例,其中共有16个帧块,因此包含了16个帧内预测模式,每个帧内预测模式最多可能有9种情况。但是,因为4乘4帧内预测模式是方向性预测,利用4乘4帧块左边和上边相邻像素点来获得预测值,例如,帧内预测模式Vertical需要利用上面相邻像素点来获得预测值,如果在编码中,该4乘4帧块上面相邻像素点位置不可用(比如在图像顶部),则对于这个4乘4帧块,Vertical模式不可用,所以本步骤需要获取每个帧块允许的帧内预测模式,即获取16个帧块中每个帧块允许的帧内预测模式,然后从允许的帧内预测模式中选择16个帧块的帧内预测模式的交集。
步骤204:从交集中选择2的幂次方个帧内预测模式组成水印模式集。
考虑到后续的编码过程,如果交集中的帧内预测模式个数不是2的幂次方,则还需要将多余的帧内预测模式去掉,以得到由2的幂次方个帧内预测模式组成的水印模式集。由此可知,水印模式集是H.264标准规定的所有帧内预测模式或者其子集,每个宏块的水印模式集可以不同。
假设本步骤中获得的水印模式集中包含的帧内预测模式分别为DC、H、V和DR。
步骤205:从预先设置的水印模式集中为宏块中的每个帧块选择一种帧内预测模式。
参见图2C,假设为按照步骤204中获得的水印模式集为宏块中的每个帧块选择帧内预测模式后的示意图。
步骤206:按照预先设置的定长编码策略对每个帧块的帧内预测模式进行定长编码,获得编码数据。
由于水印模式集中包含四种帧内预测模式,因此可以选择2比特的定长编码策略,假设该策略中定义:DC模式对应的编码为00,V模式对应的编码为01,H模式对应的编码为10,DR模式对应的编码为11。结合图2B中每个帧块的顺序,以及图2C中每个帧块的帧内预测模式可知,最终获得的编码数据为:00100001110111011011000110010000。
步骤207:从编码数据中提取水印载体。
其中,水印载体可以是整个宏块的编码数据,或部分编码数据,可以是两个或多个宏块的编码数据,可以是整数个宏块的编码数据与另外宏块的部分编码数据,也可以是多个宏块的部分编码数据,具体应用时可以依照预先设置的策略进行提取,对于不同的水印算法,选择的策略会有所不同。例如,以每个宏块的帧块0和帧块8的编码数据作为水印载体,参照图2C,则得到水印载体为0010。
步骤208:将水印信息嵌入水印载体。
嵌入水印的方法很多,本实施例仅列举几个例子进行说明。
方法一:
每个宏块嵌入2比特信息,以帧块0和帧块8的编码数据为水印载体,参照图2C,水印载体就是0010。嵌入方法可以如下:
假设a
0a
1a
2a
3为水印载体,x
0x
1为水印信息,
表示异或运算,
如果则不改变a0、a2的值;
如果改变a1的值(即0变为1,1变为0)。
按照上述方法,在图2C中嵌入x0x1=11两比特水印信息,则水印载体0010在嵌入水印后变为0110,过程如下:
a0不变,仍然为0
a1改变,从0变为1
嵌入水印信息后,获得的负载编码数据为:01100001110111011011000110010000。
方法二:
每个宏块嵌入1比特信息,以一个宏块的编码数据作为水印载体。嵌入方法可以如下:统计水印载体中0、1的个数,分别记为N0、N1,水印信息为x0,
如果x0=0,并且N0≥N1,则不变;
如果x0=0,并且N0<N1,则将水印载体中0变为1,1变为0;
如果x0=1,并且N0≥N1,则将水印载体中0变为1,1变为0;
如果x0=1,并且N0<N1,则不变;
按照上述方法,在图2C中嵌入1比特水印信息x0=1,因为N0=18,N1=14,N0>N1,需要将水印载体中0变为1,1变为0。嵌入水印后,获得的负载编码数据为:11011110001000100100111001101111。
方法三:
每两个宏块嵌入2比特信息,以两个宏块的部分编码数据作为水印载体,分别以第1个宏块的帧块0和第2个宏块的帧块0的模式编码数据作为水印载体。假设图2C为第1个宏块,图2D为第2个宏块,结合图2B中每个帧块的顺序,以及图2D中每个帧块的帧内预测模式可知,第2个宏块的模式编码数据为10100010010111111000010000010110。嵌入方法可以如下:
假设a
0a
1a
2a
3为水印载体,x
0x
1为水印信息,
表示异或运算。其中a
0a
1是第1个宏块的帧块0的编码数据,a
2a
3是第2个宏块的帧块0的编码数据,
按照上述方法,a0a1=00,a2a3=10,如果嵌入的水印信息为x0x1=11,嵌入水印信息后,水印载体变为:0110,同时得到第1个宏块的负载编码数据为01100001110111011011000110010000;第2个宏块的负载编码数据没有改变,仍然为10100010010111111000010000010110。
步骤209:按照编码策略对负载编码数据进行反向解码,获得嵌入水印信息后的帧块的最终帧内预测模式。
嵌入水印信息后的编码数据为负载编码数据,负载编码数据按照同样的编码策略,进行模式解码,获得最终的帧内预测模式,最终的预测模式就是每个4乘4帧块在编码时采用的帧内预测模式。比如根据前述步骤208中的方法一,在加载水印信息x0x1=11后,得到负载编码数据为01100001110111011011000110010000,按照步骤204中定义的策略,经过模式解码后,获得最终预测模式如图2E所示。
与本申请基于H.264压缩域的水印嵌入方法的实施例相对应,本申请还提供了基于H.264压缩域的水印嵌入装置的实施例。
参见图3,为本申请基于H.264压缩域的水印嵌入装置的实施例框图。
该装置包括:预设单元310、获取单元320、选择单元330、编码单元340、提取单元350和嵌入单元360。
其中,预设单元310,用于预先设置水印模式集和编码策略;
获取单元320,用于获取宏块的帧块类型,所述不同帧块类型对应不同数量的帧块;
选择单元330,用于从预先设置的水印模式集中为所述宏块中的每个帧块选择一种帧内预测模式;
编码单元340,用于按照预先设置的编码策略对所述每个帧块的帧内预测模式进行编码,获得编码数据;
提取单元350,用于从所述编码数据中提取水印载体;
嵌入单元360,用于将水印信息嵌入所述提取的水印载体。
具体的,预设单元310可以包括(图3中未示出):交集获取单元,用于获取每个帧块允许的帧内预测模式的交集,所述帧内预测模式为H.264标准定义的帧内预测模式;模式集选择单元,用于从所述交集中选择2的幂次方个帧内预测模式组成所述水印模式集。
编码单元340可以包括(图3中未示出):定长编码单元,用于按照预先设置的定长编码策略对所述每个帧块的帧内预测模式进行定长编码。
提取单元350可以包括至少一个下述单元(图3中未示出):第一提取单元,用于提取至少一个宏块内的所有帧块的编码数据作为水印载体;第二提取单元,用于提取至少一个宏块内的部分帧块的编码数据作为水印载体;第三提取单元,用于提取至少一个宏块内的所有帧块的编码数据,以及另外至少一个宏块内的部分帧块的编码数据作为水印载体。
进一步,该装置还可以包括(图3中未示出):解码单元,用于按照所述编码策略对所述负载编码数据进行反向解码,获得嵌入水印信息后的帧块的最终帧内预测模式,所述负载编码数据为所述嵌入水印信息后的编码数据。
通过以上的实施方式的描述可知,本申请实施例中从预先设置的水印模式集中为宏块中的每个帧块选择一种帧内预测模式,按照预先设置的编码策略对每个帧块的帧内预测模式进行编码,获得编码数据,从编码数据中提取水印载体,并将水印信息嵌入提取的水印载体。本申请实施例以帧内预测模式为基础获取水印载体,由于帧内预测模式需要在编解码过程中实时获取,因此将水印信息嵌入该水印载体不会导致编码和解码不匹配的情况,扩展了水印嵌入的应用范围。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本申请可用于众多通用或专用的计算系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
虽然通过实施例描绘了本申请,本领域普通技术人员知道,本申请有许多变形和变化而不脱离本申请的精神,希望所附的权利要求包括这些变形和变化而不脱离本申请的精神。