掌桥专利:专业的专利平台
掌桥专利
首页

编码方法以及解码方法

文献发布时间:2023-06-19 19:27:02


编码方法以及解码方法

技术领域

本申请涉及图像处理技术领域,特别是涉及一种编码方法以及解码方法。

背景技术

目前在安防监控领域越来越注重对隐私的保护。

发明内容

本申请提供一种编码方法以及解码方法,能够在将目标图像编码成一份目标码流的同时实现对目标图像进行加密处理。

本申请实施例第一方面提供一种编码方法,所述编码方法包括:识别目标图像中的隐私区域;将所述目标图像划分为多个预设大小的宏块;将所述隐私区域中的至少部分所述宏块加入第一宏块集,以及将不同于所述第一宏块集的所述宏块加入第二宏块集,其中,将加入所述第一宏块集中的所述宏块定义为第一宏块,将加入所述第二宏块集中的所述宏块定义为第二宏块;基于预设编码标准对所述目标图像进行编码而得到目标码流,其中,在基于所述预设编码标准对所述目标图像进行编码的过程中,将所述第一宏块集中的所述第一宏块映射至第一片组,以及将所述第二宏块集中的所述第二宏块映射至第二片组,使得所述目标码流包括装载第一切片的第一网络抽象单元以及装载第二切片的第二网络抽象单元,其中,所述第一切片与所述第一片组对应,所述第二切片与所述第二片组对应;查找所述第一网络抽象单元,并对所述第一网络抽象单元装载的至少部分切片数据进行加密处理,得到加密处理后的所述目标码流。

本申请实施例第二方面提供一种解码方法,所述解码方法包括:获取目标码流,其中,所述目标码流是通过采用上述任一项所述的编码方法对目标图像进行编码处理而得到的;响应于接收到用户触发的解密指令,查找所述目标码流中装载有所述第一切片的所述第一网络抽象单元,并对所述第一网络抽象单元装载的经过所述加密处理的所述至少部分切片数据进行解密处理,并对解密处理后的所述目标码流进行解码处理。

本申请实施例第三方面提供一种电子设备,所述电子设备包括处理器、存储器以及通信电路,所述处理器分别耦接所述存储器、所述通信电路,所述存储器中存储有程序数据,所述处理器通过执行所述存储器内的所述程序数据以实现上述方法中的步骤。

本申请实施例第四方面提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序能够被处理器执行以实现上述方法中的步骤。

有益效果是:在本申请的方案中,将目标图像中的宏块进行分类,得到对应隐私区域的第一宏块集以及其他区域对应的第二宏块集,然后在编码过程中,将第一宏块集映射至第一片组,将第二宏块集映射至第二片组,使得最终得到的目标码流包括装载第一切片(与第一片组对应)的第一网络抽象单元以及装载第二切片(与第二片组对应)的第二网络抽象单元,最后在加密时,只需要对第一网络抽象单元中的至少部分切片数据进行加密即可,最终在对目标图像中的隐私区域进行加密处理的前提下,完成对目标图像的编码处理。在该过程中,将隐私区域和非隐私区域进行独立的切片编码,最终得到一份码流(即目标码流),与现有技术相比无需编两份全图像区域码流,能够将目标图像编码成一份目标码流的同时实现对目标图像进行加密处理,保证在更小的编码性能开销的前提下,对目标图像中的隐私区域进行加密处理,同时还可以降低码流的大小,从而传输过程中占用的带宽更小。

附图说明

为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图,其中:

图1是图像与切片之间的关系示意图;

图2是NAL单元的结构示意图;

图3是图2中NALU头部的结构示意图;

图4是宏块的结构示意图;

图5是本申请编码方法一实施方式的结构示意图;

图6是目标图像的示意图;

图7是图6的目标图像进行宏块划分的示意图;

图8是本申请解码方法一实施方式的流程示意图;

图9是图5中步骤S150的部分示意图;

图10是图8解码方法在第一应用场景中的具体流程示意图;

图11是图8解码方法在第二应用场景中的具体流程示意图;

图12是本申请电子设备一实施方式的结构示意图;

图13是本申请电子设备另一实施方式的结构示意图;

图14是本申请电子设备又一实施方式的结构示意图;

图15是本申请计算机可读存储介质一实施方式的结构示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。

需要说明的是,本申请中的术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。本申请的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。

在介绍本申请的方案之前,首先对H.264编码标准以及H.265编码标准进行介绍:

H.264是国际标准化组织(ISO)和国际电信联盟(ITU)共同提出的继MPEG4之后的新一代数字视频压缩格式。H.264是ITU-T以H.26x系列为名称命名的视频编解码技术标准之一。H.264是ITU-T的VCEG(视频编码专家组)和ISO/IEC的MPEG(活动图像编码专家组)的联合视频组(JVT:joint video team)开发的一个数字视频编码标准。该标准最早来自于ITU-T的称之为H.26L的项目的开发。H.26L这个名称虽然不太常见,但是一直被使用着。H.264是ITU-T以H.26x系列为名称命名的标准之一,AVC是ISO/IEC MPEG一方的称呼。

H.264是在MPEG-4技术的基础之上建立起来的,其编解码流程主要包括5个部分:帧间和帧内预测(Estimation)、变换(Transform)和反变换、量化(Quantization)和反量化、环路滤波(Loop Filter)、熵编码(Entropy Coding)。

国际电联ITU和MPEG组织在发布了H.264标准之后,很快就发布公告,为下一代视频编解码标准H.265征集技术方案。为H.265设定的技术性能指标是:压缩效率比H.264提高1倍、且不明显提高编码和解码的计算量,H265是对H264的扩展与优化,技术原理上存在相当部分一致性。

结合图1,一帧图像经过H.264编码器之后,就被编码为一个或多个片(slice,也可以称为切片),而装载着这些片(slice)的载体就是NALU(Nal Unit,NAL单元),其中,NAL(Network abstraction layer)单元也可以称为网络抽象单元,其中参阅图2,图2展示了NALU与片(slice)之间的关系,从图2可以看出,NALU包括NALU头部以及所装载的切片。

需要说明的是,片(slice)都是由NAL单元装载并进行网络传输的,但是这并不代表NAL单元内就一定是切片,这是充分不必要条件,因为NAL单元还有可能装载着其他用作描述图像或者视频的信息。总而言之,每个NAL单元都可以拆分成NAL Header(NALU头部结构)和RBSP结构,其中,RBSP结构是该NAL单元携带的内容结构。

其中,片(slice)的主要作用是用作宏块(Macroblock)的载体,各个片相互间是独立的,这样做可以限制误码的扩散和传输。某一片的预测不能以其他片中的宏块为参考图像,这样该片中的预测误差才不会传播到其他片中去,换言之一个片的数据丢失或错误不会影响其他片的解码。

继续参阅图2,一帧图像在经过编码后可以划分为一个或者多个片(slice),而每个片包含整数个宏块(Macroblock)的信息,即每片包含至少一个宏块的信息,最多时可以包含整个图像的宏块。

继续参阅图2,片的内部结构分为切片头(slice_header)和切片数据(slice_data)两部分,其中切片头记录了该片中第一个宏块的地址、该片的类型、该片属于哪帧图像、该片的参考帧等等信息,切片数据部分包括一系列宏块。

参阅图3,图3为NALU头部结构,一个NALU头部结构占8个字节,其中各个字节位参数说明如下:

占5bit的是T,表示的是nal_unit_type,即表征当前NAL单元类型的类型数值,具体表征包含在当前NAL单元中的RBSP数据结构(也就是当前NAL单元所装载的数据结构)的类型,其中nal_unit_type表示的类型如下表1所示,nal_unit_type取0~31。

占2bit是R,表示的是nal_ref_idc,取00~11。

占1bit是F,表示的是forbidden_zero_bit,在H.264编码标准中规定了这一位必须为0。

表1 NAL单元的类型数值

上表中“C”列列出的是可能出现在NAL单元中的语法元素的种类。

其中,nal_unit_type值等于1到5(包括1和5)的NAL单元称为VCL NAL单元,也就是这些NAL单元的类型是VCL(视频编码类型),所有其他的NAL单元都称作非VCL NAL单元(即非视频编码类型的NAL单元)。其中VCL是为了有效的表示视频数据的内容,也就是说,有效表示图像数据的内容都保存在nal_unit_type值等于1到5的NAL单元中。

下面结合图4,介绍宏块的概念:

宏块是图像信息的主要装载者,因为它包含着每一个像素的亮度和色度信息。解码最主要的工作则是提供高效的方式从码流中获得宏块中的像素阵列。一般情况下,一个宏块由一个16×16亮度像素块和附加的一个8×8 Cb像素块、一个8×8 Cr像素块组成,结合图4可以看出,宏块中包含了宏块类型、预测类型、Coded Block Pattern(编码的块模式)、Quantization Parameter(量化参数)、像素的亮度和色度数据集等等信息。

同时在H.264标准里面还有一个片组(又称条带组)的概念:

片组包含1个或多个片(Slice),片组中的片支持灵活宏块次序(FMO,FlexibleMacroblock Order),它可用灵活的方法,把图像中的宏块(MB)序列映射到对应的片中。H.264标准提供了一种“显式映射”的宏块-片组映射模式,可将图像中每个宏块都指定属于哪个片组。本申请的方案将利用该特性进行实施。

同时在现有技术中,通常采用以下方法对图像A中的隐私区域进行加密处理,以及后续的解密处理:

将图像A中的隐私区域抠出,并按相同位置存放至另一张与图像A尺寸一样的空白图像中,得到图像B,同时对图像A中的隐私区域用马赛克涂抹,接着对图像A和图像B进行编码,分别得到码流a和码流b,接着对码流b进行加密处理,并将码流a和加密后的码流b一起封装,得到码流c,码流c包括码流a、加密后的码流b以及隐私区域的坐标,最后编码端将码流c发送给解码端。

同时解码端在接收到码流c之后,对码流c解封装,得到码流a、加密后的码流b以及隐私区域的坐标。当需要进行解密处理时,对码流b进行解密,然后对码流a、解密后的码流b进行解码,得到图像A和图像B,接着根据隐私区域的坐标,将图像B中的所有隐私区域抠下,覆盖到图像A的对应位置上,最终得到了还原隐私区域的图像,当不需要进行解码处理时,对码流a进行解码,得到隐私区域被马赛克处理的图像。

在上述现有技术的方案中,一方面在编码时需要编两份全图像区域码流,对编码性能消耗较大,且网络传输带宽占用倍增,另一方面在解码时,处理复杂,需要两份码流全解出来后,再进行抠图与粘贴处理,对解码性能、图像处理性能等均有较大消耗。因此为了避免现有技术方案中的缺陷,本申请采用了如下的技术方案:

首先需要说明的是,本申请的编码方法不仅仅可以应用于基于H.264标准的编码方法,也可以应用于基于H.265标准的编码方法,但是为了便于说明,以下主要以基于H.264标准为例进行说明。

参阅图5,图5是本申请编码方法一实施方式的流程示意图,该编码方法由编码端执行,该方法包括:

S110:识别目标图像中的隐私区域。

其中,目标图像是待编码的图像,同时目标图像是YUV格式的图像,当需要对其他格式的图像采用本申请的方案进行编码时,需要将其他格式的图像转变为YUV格式的目标图像。其中,当某一个视频包括多个图像时,将视频中的每个图像做作为目标图像执行以下步骤,从而实现完成对视频的编码。

其中隐私区域可以是一个,也可以是多个,且隐私区域可以是人脸区域,也可以是车牌区域,具体可根据用户需求进行设置。其中可以采用目标识别算法识别目标图像中的各个隐私区域。结合图6,以隐私区域是人脸区域为例:步骤S110在识别隐私区域时,可以采用人脸识别算法识别目标图像中的各个人脸,从而得到各个人脸的检测框101,其中各个人脸的检测框101所在的矩形区域即为目标图像中的多个隐私区域。

S120:将目标图像划分为多个预设大小的宏块。

其中,可以按照H.264标准的定义,将目标图像划分成多个16×16像素大小的宏块,例如,当目标图像的尺寸为720P时,将目标图像划分为3600个16×16像素大小的宏块。需要说明的是,从上述介绍可知,一个宏块由一个亮度像素块、该亮度像素块对应的Cb像素块以及Cr像素块组成,而本申请所说的宏块的尺寸指的是该宏块所包括的亮度像素块的尺寸。

当然宏块也可以是其他尺寸,例如32×32、8×8等,在此不做限制。且在将目标图像划分为多个宏块时,所划分的多个宏块大小可以相等,也可以不等,总而言之,本申请对宏块划分的规则不做具体限制。

其中,当目标图像为图6所示的图像时,对目标图像进行宏块划分的结果如图7所示,且在图7中,宏块用标号102表示。

S130:将隐私区域中的至少部分宏块加入第一宏块集,以及将不同于第一宏块集的宏块加入第二宏块集,其中,将加入第一宏块集中的宏块定义为第一宏块,将加入第二宏块集中的宏块定义为第二宏块。

具体地,在将每个隐私区域中的至少部分宏块加入第一宏块集M0后,将剩余的其他宏块加入第二宏块集M1(可以是将剩余的其他所有宏块都加入第二宏块集M1,也可以是剩余的部分宏块加入第二宏块集M1),即将不同于第一宏块集M0的宏块加入第二宏块集M1,且为了便于说明,在得到第一宏块集M0以及第二宏块集M1之后,将第一宏块集M0中的宏块定义为第一宏块,将第二宏块集M1中的宏块定义为第二宏块。

其中,针对每个隐私区域而言,可以将其所包括的所有宏块都加入第一宏块集,也可以只将其包括的部分宏块加入第一宏块集。

其中,判断宏块是否处于隐私区域中的标准是:如果一个宏块中的所有像素均处于隐私区域,则确定该宏块处于该隐私区域,否则确定该宏块不处于该隐私区域;或者也可以是,如果一个宏块中的至少部分像素处于隐私区域,则确定该宏块处于该隐私区域,否则确定该宏块不处于该加密区域。

S140:基于预设编码标准对目标图像进行编码而得到目标码流,其中,在基于预设编码标准对目标图像进行编码的过程中,将第一宏块集中的第一宏块映射至第一片组,以及将第二宏块集中的第二宏块映射至第二片组,使得目标码流包括装载第一切片的第一网络抽象单元以及装载第二切片的第二网络抽象单元,其中,第一切片与第一片组对应,第二切片与第二片组对应。

具体地,预设编码标准可以是H.264标准,也可以是H.265标准,或者也可以是其他编码标准,例如,H.261或者H.262等,但是为了便于说明,以下以H.264标准进行说明:

步骤S140基于H.264标准对目标图像进行编码而得到目标码流,且此时在编码过程中,在片组划分环节将目标图像分成两个slice_group,采用slice_group_map_type =6的显示片组映射方式,将第一宏块集M0中的所有第一宏块映射至第一片组,将第二宏块集M1中的所有第二宏块映射至第二片组,然后进行后续的编码过程。其中,将宏块映射至对应片组之后的编码过程属于现有技术,在此不具体介绍。

同时根据H.264标准,在编码后的码流中的图像参数集RBSP语法中,关于片组映射部分的关键参数可以设置为:

frame_mbs_only_flag = 1

num_slice_groups_minus1 = 1

slice_group_map_type = 6

slice_group_id[i] =

其中,i为宏块的编号。

在经过上述编码得到编码后的目标码流,目标码流包括两个slice,分别定义为第一切片、第二切片,其中第一切片装载第一宏块集M0中的第一宏块,第二切片装载第二宏块集M1中的第二宏块,其中,第一切片是基于第一片组得到的,第二切片是基于第二片组得到的,也就是第一切片与第一片组对应,第二切片与第二片组对应。同时由上述介绍可知,每个切片都由一个NAL单元装载,因此此时目标码流包括装载第一切片的第一NAL单元以及装载第二切片的第二NAL单元。同时由上述介绍可知,此时目标码流还包括装载其他用作描述图像信息的NAL单元,也就是说,此时目标码流除了包括第一NAL单元、第二NAL单元之外,还包括其他的NAL单元。

S150:查找第一网络抽象单元,并对第一网络抽象单元装载的至少部分切片数据进行加密处理,得到加密处理后的目标码流。

具体地,由上述介绍可知,针对每个NAL而言,NAL单元包括NALU头部以及所装载的切片,切中所装载的切片又包括切片头(slice_header)和切片数据(slice_data)两部分,其中切片数据部分包括一系列宏块信息,也就是目标图像真正的信息。

因此在查找到第一NAL单元后,对第一NAL单元所装载的切片数据(slice_data)中的至少部分数据进行加密处理,得到加密后的目标码流,从而后续可以将目标码流发送给解码端。

从上述内容可以看出,在本申请的方案中,将目标图像中的宏块进行分类,得到第一宏块集以及第二宏块集,然后在编码过程中,将第一宏块集映射至第一片组,将第二宏块集映射至第二片组,使得最终得到的目标码流包括装载第一切片(与第一片组对应)的第一NAL单元以及装载第二切片(与第二片组对应)的第二NAL单元,最后在加密时,只需要对第一NAL单元中的至少部分切片数据进行加密即可,最终在对目标图像中的隐私区域进行加密处理的前提下,完成对目标图像的编码处理。在该过程中,将隐私区域和非隐私区域进行独立的切片编码,最终得到一份码流(即目标码流),与现有技术相比无需编两份全图像区域码流,能够将目标图像编码成一份目标码流的同时实现对目标图像进行加密处理,保证在更小的编码性能开销的前提下,对目标图像中的隐私区域进行加密处理,同时还可以降低码流的大小,从而传输过程中占用的带宽更小。

参阅图8,图8是本申请解码方法一实施方式的流程示意图,该解码方法由解码端执行,该方法包括:

S210:获取目标码流。

其中,目标码流是采用上述任一项实施方式中的编码方法对目标图像进行编码处理而得到的,详细的方法可参见上述内容,在此不再赘述。

S220:判断是否接收到用户触发的解密指令。

其中,用户可以选择是否对目标码流进行解密处理,当用户选择不对目标码流进行解密处理时,解码端将不会接收到用户触发的解密指令,当用户选择对目标码流进行解密处理时,解码端将接收到用户触发的解密指令。

当接收到用户触发的解密指令时,执行步骤S230,否则执行步骤S240。

S230:查找目标码流中装载有第一切片的第一网络抽象单元,并对第一网络抽象单元装载的经过加密处理的至少部分切片数据进行解密处理。

S240:对目标码流进行解码处理。

具体地,当用户选择不对目标码流进行解密处理时,解码端直接对目标码流进行解码处理,此时第一网络抽象单元所装载的切片数据因为至少部分被加密,因此解码端无法正确对第一网络抽象单元进行解码,最终在解码得到的图像中,隐私区域将无法正确显示,可以保证隐私数据安全。

当用户选择对目标码流进行解密处理时,解码端会对第一网络抽象单元所装载的在编码时经过加密处理的切片数据进行解密处理,然后再对解密后的目标码流进行解码处理,此时因为经过隐私还原,解码端能够正确解码,最终能够得到最终的目标图像,在该目标图像中,隐私区域能够正确显示。

可以理解的是,在执行完步骤S230之后再执行步骤S240时,步骤S240中的目标码流是经过解密处理后的目标码流,而如果是步骤S220之后直接执行步骤S240,步骤S240中的目标码流是未经过解密处理的目标码流。

参阅图9,在本实施方式中,步骤S150中对第一NAL单元装载的至少部分切片数据进行加密处理的过程包括:

S151:对第一网络抽象单元装载的切片数据中的第一目标字节数据进行加密处理,得到第二目标字节数据,其中,第二目标字节数据与第一目标字节数据长度相等。

S152:用第二目标字节数据替换切片数据中的第一目标字节数据。

具体地,将切片数据(slice_data)中预设位置处预设长度的字节数据进行加密处理而得到新的等长度的字节数据,然后用该新的等长度的字节数据替换切片数据(slice_data)中预设位置的原字节数据。例如,对切片数据(slice_data)的前128个字节进行加密,得到新的128个字节,然后用新的128个字节替换原来的前128个字节,从而得到加密后的目标码流。此处的128个字节仅是举例,还可以是256个字节或者其他数量的字节,且此处是从起始字节的128个字节进行加密处理,但是在其他应用场景中,还可以是从其他位置的字节开始进行加密,例如从第10个字节或者第20个字节开始等。

需要说明的是,在其他实施方式中,第二目标字节数据的长度也可以小于第一目标字节数据的长度。

或者在其他实施方式中,步骤S150中对第一NAL单元装载的至少部分切片数据进行加密处理的过程还可以包括:第一NAL单元装载的至少部分切片数据进行打乱处理。总而言之,本申请对加密处理的具体过程不做限制。

下面介绍本实施方式中第一应用场景中的具体方案:

在第一应用场景中,在步骤S130之前还包括:按照光栅扫描的顺序,将多个宏块从目标编号开始依次进行编号。此时步骤S130还进一步包括:将编号为目标编号的目标宏块加入第二宏块集,以及此时步骤S150中查找第一NAL单元的步骤包括:在目标码流所包括的类型为VCL的NAL单元中,响应于NAL单元装载的第一个宏块的编码大于目标编号,将NAL单元确定为第一NAL单元。

具体地,在划分得到多个宏块后,为每个宏块都设置唯一的编号,且在为每个宏块都设置唯一的编号时,按照光栅扫描的顺序,将多个宏块从目标编号开始依次进行编号。同时将编号为目标编号的宏块定义为目标宏块。

当目标编号为0,光栅扫描的顺序为从左往右,从上至下的顺序,目标图像的格式为720p,宏块的大小为16*16像素时,宏块的编号的取值范围为0~3599,此时目标宏块为编号为0的宏块,也就是扫描目标图像时扫描的第一个宏块。

同时将在划分宏块集时,不管目标宏块是否处于隐私区域,都将目标宏块加入第二宏块集M1中,该步骤的目的是为了后续在加密时,能够查找到装载第一切片的第一NAL单元。

其中,由上述介绍可知,只有类型为VCL的NAL单元装载的才是目标图像真正需要关注的信息,因此第一NAL单元和第二NAL单元的类型必定是VCL。同时由于目标宏块处于第二宏块集M1中,因此第二NAL单元装载的第一个宏块的编号为目标编号,而第一NAL单元装载的第一个宏块的编码是目标编标以外的其他编号,也就是大于目标编号,因此在目标码流所包括的类型为VCL的NAL单元中,装载的第一个宏块的编码大于目标编号的宏块即为第一NAL单元。

其中,NAL单元所装载的第一个宏块的编号记载在切片头slice_header()中的first_mb_in_slice字段,因此在类型为VCL的NAL单元中,如果某一个NAL单元其first_mb_in_slice字段大于目标数值,则确定该NAL单元是第一NAL单元。

同时由上述内容可知,类型为VCL的NAL单元中的nal_unit_type值等于1到5(包括1和5),因此查找第一NAL单元的过程就是:在所有nal_unit_type = 1~5 的NAL单元中,如果某一个NAL单元,其切片头slice_header()中的first_mb_in_slice大于目标编号(例如为0),则确定该NAL单元装载第一切片,为第一NAL单元。

同时在该第一应用场景中,步骤S150在对第一NAL单元装载的至少部分切片数据进行加密处理时,还会修改表征第一NAL单元类型的类型数值至第一NAL的类型数值处于保留区间内,从而使得解码端在直接对目标码流进行解码处理时,可以直接忽略该第一NAL单元。

从上述介绍可知,基于H.264标准,表征NAL单元类型的类型数值记载在NAL单元中的nal_unit_type字段,当nal_unit_type等于1~5时,表征NAL单元的类型是VCL,当nal_unit_type等于其他数值时,表征NAL单元的类型是非VCL,同时通过上表1可知,当nal_unit_type处于14~18时,NAL单元和RBSP语法结构的内容为“保留”,该“保留”的含义是,当解码端识别到该NAL单元时,将直接丢弃该NAL单元,不会对其进行解码处理。

因此可以将第一NAL单元类型的类型数值修改至14~18这一保留区间。其中,在修改类型数值之前第一NAL单元是VCL类型的NAL单元,其类型数值处于1~5这一区间,因此为了使得修改后的类型数值处于14~18这一保留区间,将表征第一NAL单元类型的类型数值加13,即nal_unit_type = nal_unit_type + 13。

可以理解的是,当利用其它编码标准进行编码时,具体将表征第一NAL单元类型的类型数值加多少,可由该编码标准中的保留区间进行设置,在此不做限制。

针对该应用场景的编码方案,参阅图10,解码端在进行解码时,步骤S230解密处理的过程包括:

S2301:在目标码流所包括的类型数值处于预设保留区间的网络抽象单元中,查找装载有第一切片的第一网络抽象单元。

此处的预设保留区间与编码时所使用的预设保留区间为同一个保留区间,为了便于说明,以预设保留区间为14~18进行说明。

此时查找第一NAL单元的过程与编码时查找第一NAL单元的过程相同,例如当编码时响应于NAL单元装载的第一个宏块的编码大于目标编号,将NAL单元确定为第一NAL单元,此时步骤S2301具体包括:在目标码流所包括的类型数值处于预设保留区间的NAL单元中,响应于NAL单元装载的第一个宏块的编码大于目标编号,将NAL单元确定为第一NAL单元,以目标编号为0进行说明:

此时在目标码流中,在nal_unit_type= 14~18的NAL单元中,如果某一个NAL单元,其切片头slice_header()中的first_mb_in_slice大于0,则确定该NAL单元装载第一切片,该NAL单元为第一NAL单元。

S2302:对第一网络抽象单元装载的经过加密处理的至少部分切片数据进行解密处理。

具体地,经过加密处理的至少部分切片数据进行解密处理,恢复加密之前的切片数据,例如,当加密处理时,对切片数据(slice_data)的前128个字节进行加密,得到新的128个字节,然后用新的128个字节替换原来的前128个字节,则此时在解密处理时,切片数据(slice_data)的前128个字节进行解密,得到加密之前的前128个字节,然后再进行字节的替换,从而使得第一NAL单元装载的切片数据为加密之前的切片数据。

S2303:修改第一网络抽象单元的类型数值,使得第一网络抽象单元的类型数值不处于任何保留区间。

具体为了后续在进行解码处理时,解码端能够对第一NAL单元进行解码处理,修改第一NAL单元的nal_unit_type,使得第一NAL单元的nal_unit_type不再处于任何一个保留区间,例如修改第一NAL单元的nal_unit_type,使得第一NAL单元的nal_unit_type既不处于14~18这一保留区间,也不处于20~23这一保留区间。

其中,当编码时将表征第一NAL单元类型的类型数值加上13,使得第一NAL单元类型的类型数值处于14~18这一预设保留区间,相对应地,此时在解码时将第一NAL单元的类型数值nal_unit_type减去13,即,对于第一NAL单元而言,nal_unit_type = nal_unit_type– 13。

此时在经过解密处理后,第一NAL单元的nal_unit_type不处于任何保留区间,后续步骤S240在进行解码处理时,将对第一NAL单元正常进行解码。

而在该应用场景中,解码端未接收到用户触发的解密指令而直接对目标码流进行解码处理时,由于第一NAL单元的类型数值处于预设保留区间,则解码端直接丢弃该第一NAL单元,从而在最终得到的图像上,隐私区域不能正常显示。

在该第一应用场景中,通过在编码时修改第一NAL单元的类型数值的方式,使得解码端在不进行解密处理而直接对目标码流进行解码处理时,直接忽略第一NAL单元,可以提高解码速度,避免因为第一NAL单元不能正确解码而造成解码端出现例如死机等异常。

为了便于理解上述第一应用场景中的编码方法和解码方法,下面结合具体例子进行说明:

此时编码过程为:

S101:识别目标图像中的各个人脸区域,得到各个人脸检测框坐标;

S102:将目标图像划分为多个宏块,并按照从左往右,从上至下的光栅扫描顺序,将宏块从0开始编号;

S103:如果一个宏块其所有像素均处于人脸检测框中,则将该宏块加入第一宏块集M0,其中除了编号为0的宏块。

S104:将不同于第一宏块集的宏块加入第二宏块集M2。

S105:基于H.264标准对目标图像进行编码,得到目标码流,在该过程中,在片组划分环节将目标图像分成两个slice_group,采用slice_group_map_type =6 的显示片组映射方式,将第一宏块集中的所有宏块映射至第一片组,将第二宏块集中的所有宏块映射至第二片组,然后进行后续编码,最终得到的目标码流包括第一切片以及第二切片,其中第一切片被第一NAL单元装载,第二切片被第二NAL单元装载。

S106:解析目标码流中所有nal_unit_type = 1~5 的NAL单元中的slice_header,其中如果first_mb_in_slice>0,即为第一切片所在的NAL单元,即为第一NAL单元。

S107:解析第一NAL单元的slice_data( )语法,对前128个字节进行加密处理,用等长的加密后的数据进行替换原来的前128个字节。

S108:对第一NAL单元做如下处理:nal_unit_type =nal_unit_type + 13。

经过上述步骤,完成整个编码过程,下面介绍对应的解码过程:

S201:确定用户是否进行隐私还原,如果用户进行隐私还原,则执行步骤S202,否则执行步骤S204。

S202:解析目标码流中所有nal_unit_type = 14~18 的NAL单元中的slice_header语法,其中如果first_mb_in_slice>0,即为第一切片所在的第一NAL单元。

S203:将第一NAL单元中的slice_data前128个字节进行解密,并进行数据的替换,然后将nal_unit_type还原:nal_unit_type = nal_unit_type– 13。

在步骤S203之后执行步骤S204。

S204:对目标码流进行解码处理。

在执行步骤S204时,如果目标码流没有经过解密处理,解码端将直接忽略第一NAL单元,而第二NAL单元被正确解码,最终解码出来的图像为除了人脸区域的其他区域的图像内容。如果有未经授权的人员强行修改第一NAL单元的nal_unit_type的值,使之能被解码端进一步处理,则由于该第一NAL单元中的slice_data前部数据被加密,则也无法正确解码,也能保障隐私数据安全。

在执行步骤S204时,如果目标码流经过解密处理,第一NAL单元以及第二NAL单元均能够被正确解码,从而还原包含人脸的完整图像。

下面介绍本实施方式中第二应用场景中的具体方案:

在该第二应用场景中,在步骤S140之前还包括:生成第三宏块集,其中,第三宏块集中的每个第三宏块是分别对第一宏块集中的第一宏块进行修改而得到的,此时步骤S140基于预设编码标准对目标图像进行编码的过程还包括:对第三宏块集进行编码,使得目标码流进一步包括装载第三切片的第三NAL单元,其中,第三切片与第三宏块集对应,也就是说,第三NAL单元与第三宏块集对应;同时,当解码端在对目标码流进行解码处理时,响应于对第一NAL单元解码失败,解码端对第三NAL单元进行解码,以及响应于对第一NAL单元解码成功,解码端忽略第三NAL单元。

具体地,对第一宏块集M0中的每个第一宏块进行修改,然后利用修改后的第一宏块组成第三宏块集M0’,然后在编码过程中,对第三宏块集M0’进行与第一宏块集M0、第二宏块集M1相同的编码处理,最终得到的目标码流包括装载第三切片的第三NAL单元,其中,第三切片装载第三宏块集M0’。

其中,第三切片称为第一切片对应的冗余编码图像数据。当编码标准为H.264标准时,第三切片符合H.264的冗余编码图像的所有语法规则,包括:redundant_pic_cnt设定为1。

其中,第三切片作为第一切片对应的冗余编码图像数据,在解码时,如果解码端不先进行解密处理而直接对目标码流进行解码处理时,解码端将无法对装载第一切片的第一NAL单元进行正确解码,此时解码端就会发现装载第三切片的第三NAL单元,而后解码端就会对第三NAL单元进行解码处理,并将对第三NAL单元解密得到的解码数据作为对第一NAL单元解码得到的解码数据。而由于第三切片所对应的第三宏块是对第一宏块进行修改得到的,因此解码端在对装载第二切片的第二NAL单元以及装载第三切片的第三NAL单元进行正确解码后,最终得到的图像虽然是一张完整的图像,但是图像中隐私区域所显示的画面是被涂改后的画面,无法还原目标图像,能够达到隐私保护的目的。

在解码时,如果解码端先对第一NAL单元进行解密处理,而后解码端将会对第一NAL单元以及第二NAL单元进行正确解码,此时解码端将直接忽略装载第三切片的第三NAL单元,最终能够解码出的图像便是目标图像,达到了隐私还原的目的。

同时在该第二应用场景中,在步骤S130之前还包括:按照光栅扫描的顺序,将多个宏块从目标编号开始依次进行编号。此时步骤S130还进一步包括:将编号为目标编号的目标宏块加入第二宏块集,以及此时步骤S150中查找第一NAL单元的步骤包括:在目标码流所包括的类型为VCL的NAL单元中,将最先查找到的装载的第一个宏块的编码大于目标编号的NAL单元,确定为第一NAL单元。

在该第二应用场景中,对宏块进行编号以及划分宏块集的过程与上述第一应用场景中完全相同,同时由于在该应用场景中,第三宏块集是对第一宏块集修改得到的,因此第三宏块集中第三宏块的编号与第一宏块集中第一宏块的编号完全相同,因此第三NAL单元装载的第一个宏块的编号与第一NAL单元装载的第一个宏块的编号相等,第三NAL单元的类型也是VCL。但是不管是在H.264标准还是H.265标准中,都规定了作为“基本编码数据位于有关冗余编码数据之前”,因此在目标码流中,第一NAL单元位于第三NAL单元之前,进而在目标码流中查找第一NAL单元时,在目标码流所包括的类型为VCL的NAL单元中,最先查找到的装载的第一个宏块的编码大于目标编号的NAL单元就是第一NAL单元。

也就是说,此时查找第一NAL单元的过程就是:在所有nal_unit_type = 1~5 的NAL单元中,如果某一个NAL单元,其切片头slice_header( )中的first_mb_in_slice首次大于目标编号(例如为0),则确定该NAL单元装载第一切片,该NAL单元为第一NAL单元。

可以理解的是,在上述第一应用场景中,在查找第一NAL单元时,由于只有第一NAL单元的first_mb_in_slice大于目标编号,因此查找第一NAL单元的过程也可以理解为是:在目标码流所包括的类型为VCL的NAL单元中,将最先查找到的装载的第一个宏块的编码大于目标编号的NAL单元,确定为第一NAL单元。也就是说,第一应用场景和第二应用场景查找第一NAL单元的过程本质相同。

参阅图11,在第二应用场景中,解码端在进行解码时,步骤S230解密处理的过程包括:

S2304:在目标码流所包括的类型为视频编码类型的网络抽象单元中,将最先查找到的装载的第一个宏块的编码大于目标编号的网络抽象单元,确定为第一网络抽象单元。

具体地,在第二应用场景中,解密过程中查找第一NAL单元的过程与加密过程中查找第一NAL单元的过程相同。

S2305:对第一网络抽象单元装载的经过加密处理的至少部分切片数据进行解密处理。

此时如果用户选择对目标码流进行解密处理,则首先查找到第一NAL单元,然后对第一NAL单元装载的经过加密处理的至少部分切片数据进行解密处理,最后解码端再对经过解密处理后的目标码流进行解码处理,此时在解码的过程中,由于解码端能够对第一NAL单元进行正确解码,因此其会忽略第三NAL单元,最终在经过解码处理后,能够恢复出原始的目标图像。

但是如果用户选择不对目标码流进行解密处理,则解码端直接对目标码流进行解码处理,此时在解码过程中,由于无法对装载第一切片的第一NAL单元进行正确解码,解码端就会发现装载第三切片的第三NAL单元,而后解码端就会对第三NAL单元进行解码处理,并将对第三NAL单元解密得到的解码数据作为对第一NAL单元解码得到的解码数据,最终经过得到的图像中,隐私区域所显示的画面是被涂改后的画面,无法还原目标图像,能够达到隐私保护的目的。

其中,修改第一宏块得到第三宏块的过程可以是:对第一宏块的至少一个目标分量进行修改,得到对应的第三宏块,其中,至少一个目标分量包括第一宏块的Y分量、Cb分量、Cr分量中的至少一个分量。

具体地,可以将第一宏块的目标分量修改为0或者其他数值,只要在经过修改后无法辨认隐私区域中的画面即可。

为了便于理解上述第二应用场景中的编码方法和解码方法,下面结合具体例子进行说明:

此时编码过程为:

S301:识别目标图像中的各个人脸区域,得到各个人脸检测框坐标;

S302:将目标图像划分为多个宏块,并按照从左往右,从上至下的光栅扫描顺序,将宏块从0开始编号;

S303:如果一个宏块其所有像素均处于人脸检测框中,则将该宏块加入第一宏块集M0,其中除了编号为0的宏块。

S304:将第一宏块集M1之外的宏块加入第二宏块集M2。

S305:生成第三宏块集M3,其中,第三宏块集M3中的第三宏块是修改第一宏块集M0中的第一宏块的Y分量得到的。

S306:基于H.264标准对目标图像进行编码,得到目标码流,与上述第一应用场景不同的是,此时还会第三宏块集进行编码,最终得到的目标码流包括装载第一切片的第一NAL单元、装载第二切片的第二NAL单元以及第三切片的第三NAL单元,第三切片为第一切片的冗余编码数据。

S307:解析目标码流中所有nal_unit_type = 1~5 的NAL单元中的slice_header,其中如果某个NAL单元的first_mb_in_slice首次大于0,即该NAL单元为第一切片所在的NAL单元,即为第一NAL单元。

S308:解析第一NAL单元的slice_data( )语法,对前128个字节进行加密处理,用等长的加密后的数据进行替换原来的前128个字节。

经过上述步骤,完成整个编码过程,下面介绍对应的解码过程:

S401:确定用户是否进行隐私还原,如果用户进行隐私还原,则执行步骤S402,否则执行步骤S404。

S402:解析目标码流中所有nal_unit_type = 1~5 的NAL单元中的slice_header,其中如果某个NAL单元的first_mb_in_slice首次大于0,即该NAL单元为第一切片所在的NAL单元,即为第一NAL单元。

S403:将第一NAL单元中的slice_data前128个字节进行解密,并进行数据的替换。在步骤S403之后执行步骤S404。

S404:对目标码流进行解码处理。

在执行步骤S404时,如果目标码流没有经过解密处理,因此解码端无法对装载第一切片的第一NAL单元进行正确解码,进而就会发现装载第三切片的第三NAL单元,而后解码端就会对第三NAL单元进行解码处理,并将对第三NAL单元解密得到的解码数据作为对第一NAL单元解码得到的解码数据,最终经过得到的图像中,隐私区域所显示的画面是被涂改后的画面,无法还原目标图像,能够达到隐私保护的目的。在执行步骤S404时,如果目标码流经过解密处理,则解码端能够对第一NAL单元进行正确解码,因此其会忽略第三NAL单元,最终在经过解码处理后,能够恢复出原始的目标图像。

从上述内容可以看出,本申请不管是编码过程还是解码过程都只有一份码流,编码性能和解码性能大大降低,在传输过程中所需的传输带宽也较小。

参阅图12,图12是本申请电子设备一实施方式的结构示意图,该电子设备200包括处理器210、存储器220以及通信电路230,处理器210分别耦接存储器220、通信电路230,存储器220中存储有程序数据,处理器210通过执行存储器220内的程序数据以实现上述任一项实施方式方法中的步骤,其中详细的步骤可参见上述实施方式,在此不再赘述。

其中,电子设备200可以是电脑、手机等任一项具有算法处理能力的装置,在此不做限制。

参阅图13,图13是本申请电子设备另一实施方式的结构示意图,该电子设备300包括依次连接的识别模块310、划分模块320、加入模块330、编码模块340以及加密模块350。

识别模块310用于识别目标图像中的隐私区域。

划分模块320用于将目标图像划分为多个预设大小的宏块。

加入模块330用于将隐私区域中的至少部分宏块加入第一宏块集,以及将第一宏块集之外的宏块加入第二宏块集,其中,将加入第一宏块集中的宏块定义为第一宏块,将加入第二宏块集中的宏块定义为第二宏块。

编码模块340用于基于预设编码标准对目标图像进行编码而得到目标码流,其中,在基于预设编码标准对目标图像进行编码的过程中,将第一宏块集中的第一宏块映射至第一片组,以及将第二宏块集中的第二宏块映射至第二片组,使得目标码流包括装载第一切片的第一网络抽象单元以及装载第二切片的第二网络抽象单元,其中,第一切片与第一片组对应,第二切片与第二片组对应。

加密模块350用于查找第一网络抽象单元,并对第一网络抽象单元装载的至少部分切片数据进行加密处理,得到加密处理后的目标码流。

其中,电子设备300在工作时执行上述任一项实施方式中的编码方法,详细的编码方法可参见上述相关内容,在此不再赘述。

其中,电子设备300可以是电脑、手机等任一项具有算法处理能力的装置,在此不做限制。

参阅图14,图14是本申请电子设备又一实施方式的结构示意图,该电子设备400包括依次连接的获取模块410、解密模块420以及解码模块430。

获取模块410用于获取目标码流。其中,目标码流是通过采用上述任一项实施方式中的编码方法对目标图像进行编码处理而得到的,详细的编码方法可参见上述相关内容,在此不再赘述。

解密模块420用于响应于接收到用户触发的解密指令,查找目标码流中装载有第一切片的第一网络抽象单元,并对第一网络抽象单元装载的经过加密处理的至少部分切片数据进行解密处理。

解码模块430用于对解密处理后的目标码流进行解码处理,或者在未接收到用户触发的解密指令时,直接对目标码流进行解密处理。

其中,电子设备400在工作时执行上述任一项实施方式中的解码方法,详细的解码法可参见上述相关内容,在此不再赘述。

其中,电子设备400可以是电脑、手机等任一项具有算法处理能力的装置,在此不做限制。

参阅图15,图15是本申请计算机可读存储介质一实施方式的结构示意图。该计算机可读存储介质500存储有计算机程序510,计算机程序510能够被处理器执行以实现上述任一项方法中的步骤。

其中,计算机可读存储介质500具体可以为U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等可以存储计算机程序510的装置,或者也可以为存储有该计算机程序510的服务器,该服务器可将存储的计算机程序510发送给其他设备运行,或者也可以自运行该存储的计算机程序510。

以上所述仅为本申请的实施例,并非因此限制本申请的专利范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其它相关的技术领域,均同理包括在本申请的专利保护范围内。

技术分类

06120115918545