背景技术
由于图像噪波的出现是随机的,因此每一帧图像出现的噪波是不相同的。3D降噪(3D DNR)通过对比相邻的几帧图像,将不重叠的信息(即噪波)自动滤出,降低弱信号图像的噪波干扰。采用3D降噪的摄像机,图像噪点会明显减少,图像会更透彻,从而显示出比较纯净细腻的画面。
在模拟高清监控系统中,ISP降噪技术将传统的2D技术升级为3D,在原有的帧内降噪的基础上,增加了帧与帧之间降噪的功能。在宽动态处理方面,模拟高清ISP实现了帧间宽动态技术,使图像明暗部分的细节都更加清晰、更接近人眼看到的实际效果。这就要求在对每一帧目标图像进行3D降噪前,对用于对比的相邻帧图像进行临时存储及调用。而现有的绝大数模拟高清监控系统出于硬件资源限制,在存储、调用图像时需进行压缩及相应的编解码处理;又因为相关图像作为3D降噪对比帧被调用时需保持足够充分的原始信息以保证在降噪中精准实现噪点定位,所以首选无损压缩方式以实现最佳降噪效果。
哈夫曼编码(Huffman Coding)作为一种用于无损数据压缩的熵编码(权编码)算法,是现行主流图像压缩方式(如PNG、ZIP)的核心算法,基本原理是使用变长编码表对目标图像中的每一个像素的相关数值(如差分值、初步编码值)进行编码,出现机率高的字母使用较短的编码,反之出现机率低的则使用较长的编码,这便使编码之后的字符串的平均长度、期望值降低,从而达到无损压缩数据的目的。以上编码表是通过对目标图像每个像素的相关数值出现机率进行计算得到的。这就要求压缩时对目标图像像素信息进行两次调用,第一次计算变长编码表,第二次利用编码表对图像信息进行编码。相对于其他图像无损压缩方式,哈夫曼编码在压缩上具有压缩率高、解编码高效等优势。
但是现有的绝大数模拟高清监控系统在进行ISP 3D降噪时采用流水线式处理方式,目标帧图像信息在ISP进行处理时被调用一次后,随即进入下一帧图像的处理环节,后续无法被重复调用,这就意味着传统的基于哈夫曼编码算法的图像压缩方式在模拟高清监控系统上难以实现。虽然可以用固定编码表的方式略去对每帧图像编码表的计算步骤,但是根据哈夫曼编码方式的数据结构特点,目标图像编码表如非基于本图像相关像素信息实际出现频率计算形成,实际压缩率相对于信息熵理论所计算的最大压缩率将有一定差距。
发明内容
发明目的:针对上述现有技术,提出一种基于改进哈夫曼编码的图像压缩方法,应用于高清监控系统ISP 3D降噪时,目标图像压缩率能够接近信息熵理论所计算的最大压缩率;并提出一种图像3D降噪方法,实现对监控视频图像3D降噪时所需参考帧图像的高效无损压缩及存储。
技术方案:一种基于改进哈夫曼编码的图像压缩方法,利用上一帧图像对应的改进哈夫曼编码表对当前帧图像进行映射编码;
上一帧图像对应的改进哈夫曼编码表获取方法包括:首先,对上一帧图像的像素值进行预测计算,得出相邻同颜色像素点间的残差值;然后,将所述残差值的绝对值作为信息值,统计出各信息值的出现频率;基于所述出现频率进行哈夫曼编码时,若根据图像位数确定的统计区间内存在出现频率为0的信息值,则将出现频率为0的各信息值对应的哈夫曼编码值中位深最小的一个编码值作为解码标志符号,将所有出现频率为0的各信息值对应的哈夫曼编码值更新为所述解码标志符号,得到所述改进哈夫曼编码表;
先对当前帧图像的像素值进行预测计算得到对应的残差值以及信息值,然后利用所述改进哈夫曼编码表对当前帧图像对应的信息值逐一进行映射编码,若映射得到的编码值为所述解码标志符号,则在所述解码标志符号后编入对应信息值的二进制字符码,作为最终编码值并进行存储;同时,将对当前帧图像对应的残差值的正负进行判定,以正值为1,负值为0进行存储。
进一步的,在图像数据处理过程中,按固定像素尺寸对图像数据进行分块后逐块处理。
根据所述图像压缩方法的图像3D降噪方法,对采用所述图像压缩方法处理后的上一帧图像数据先进行解压,利用解压出的上一帧图像数据对当前帧图像进行3D降噪;
将当前帧图像的上一帧图像称为第二帧图像,当前帧图像的上上帧图像称为第一帧图像,解压方法包括:首先,通过第一帧图像对应的改进哈夫曼编码表对第二帧图像对应的所述映射编码进行映射解码还原,映射解码得出第二帧图像对应的信息值;然后,根据映射解码得出的信息值,调用第二帧图像对应的残差值正负判定数据还原出第二帧图像中各像素的残差值;最后,根据残差值预测计算的逆运算,通过第二帧图像中各像素的残差值得出第二帧图像中各像素原值;
其中,进行映射解码还原时,若所述映射编码的编码值串中存在与所述解码标志符号相等的值串,则取该编码值串中所述解码标志符号后的编码值作为该编码值串的解码值,再将二进制的解码值转换为十进制整数,得到最终的信息值。
进一步的,解压过程中,按固定像素尺寸对图像数据进行分块后逐块处理。
有益效果:本发明在对传统的哈夫曼编码的编码形式进行改进的基础上,利用上一帧图像的改进哈夫曼编码表对下一帧图像的像素信息进行映射编码以实现压缩存储,为后续帧图像开展3D降噪提供支持。本发明利用相邻两帧图像像素信息的出现概率在时域上的强烈相关性,使得经改进哈夫曼编码处理过的目标图像压缩率接近信息熵理论所计算的最大压缩率,进而实现对监控视频图像3D降噪时所需参考帧图像的高效无损压缩及存储。
具体实施方式
下面结合附图对本发明做更进一步的解释。
如图1所示,一种图像3D降噪方法,包括以下步骤:
步骤1:获取进入监控系统的第一帧图像,本实施例以8bit位深图像为例。因ISP图像降噪处理的图源多为Bayer格式,本实施方式所有步骤皆在Bayer域图像上进行展开。从第一帧图像的第一个像素点开始,将图像按8*8个像素点矩阵分割为n个像素块,对存在数目不足8*8成块的像素点不予处理。
步骤2:对像素块进行逐块预测计算,得出相邻同颜色像素点间的残差值。对于Bayer格式图像,每一个像素点只有红R、绿G、蓝B三种颜色中的一种,其中在2*2的窗口中放置2个G、1个R、1个B,故除保留8*8像素块左上角的四个像素点的原值作为残差计算依据外,其余像素点都利用间隔一位的一个相同颜色像素点相减得出本像素点的残差值。如图2所示,第一个2*2窗口的像素点B11 、G12 、G21、R22为保留像素原值作为残差计算依据,其他坐标为(i,j)的像素点的像素值f(i,j)对应的残差值dif(i,j)=f (i-2,j)- f(i,j)。故本发明8*8残差块数组中包含4个像素原值和60个像素预测残差值。
步骤3:将残差值的绝对值作为信息值,统计根据图像位数确定的统计区间内第一帧图像所有信息值的出现频率,因本实施例处理图像均为8bit位深图像,所以需统计的信息值区间为0-255。根据256个信息值的出现频率形成如图3左侧所示的传统哈夫曼编码表,该编码表中所含的部分编码所对应的信息值在第一帧中未出现,即出现频率为0。
步骤4:对传统的哈夫曼编码形式进行改进,得到第一帧图像对应的改进哈夫曼编码表。
据哈夫曼编码的数据结构特点可知,在对信息值区间内的所有数值进行哈夫曼编码时,将对大量出现概率为0的信息值进行编码,则其中部分信息值的编码值位深将严重超量,如为原单个像素位深8bit的数十倍。针对这一点,传统哈夫曼编码的处理方式是对出现频率为0的信息值不进行编码或者进行部分编码,如仅对已出现信息值中最大值和与最小值之间的信息值进行编码。由于本方法需利用上一帧图像对应的改进哈夫曼编码表对下一帧图像进行映射编码,需保证编码表在0-255区间内的所有256个数值均有对应的编码值,否则对于在下一帧出现而在在上一帧未出现的相关数值将可能无法进行匹配编码。若采用传统的哈夫曼编码对区间内每个信息值均进行编码,这不仅导致编码表在存储及计算上严重超量,特别当编码表中的过长编码值在下一帧中被匹配编码时,还将大大增加最后需存储的像素编码数据量。针对这个问题,本发明方法基于出现频率进行哈夫曼编码时,将出现频率为0的各信息值对应的哈夫曼编码值中位深最小的一个编码值code_mark作为解码标志符号,将所有出现频率为0的各信息值对应的哈夫曼编码值更新为该解码标志符号,得到如图3右侧所示的改进哈夫曼编码表A,并存入本发明所需调用的第一个存储空间,即图1所示ram_map_1中。
步骤5:获取第二帧图像,按步骤1的分块方法对图像进行分块,对于存在数目不足8*8成块的像素点,由于此部分占全帧图像极小比例,故不做压缩或者存储处理。
步骤6:对第二帧图像进行编码。
对各像素块进行逐块预测计算,得到对应的残差值以及信息值,并调用ram_map_1中的改进哈夫曼编码表A对第二帧图像对应的信息值进行逐一映射编码。若相应信息值在改进哈夫曼编码表A中所映射的编码值为code_mark,即说明该信息值在上一帧图像中未出现。对这类信息值采取的编码形式为:先编入解码标志符号code_mark,再编入固定位数的本像素残差绝对值二进制字符码,作为最终编码值,本实施例中固定位数为8位,如图4所示。将以上得到的编码内容存储进入本发明所需调用的第二个存储空间,即图1所示ram_code中。虽然通过此类编码方式,每个像素相对原像素8位像素位深多出code_mark这一存储开销,但是相对于使用传统哈夫曼编码造成的庞大开销,依然能够在实际压缩处理中节约大量存储空间。同时,因为相邻两帧图像在时域上具有强烈相关性,在第一帧未出现的像素信息即使在第二帧图像中存在对应像素点,也是极少量的。即,虽然采用了略长位深的编码值,但对总体开销的增量幅度十分有限。
步骤7:如图5所示,逐块对第二帧图像的各像素块对应的残差值进行正负值判定,以正值为1,负值为0分块依次存入本发明所需调用的第三个存储空间,即图1所示ram_sign中。需要说明的是,本步骤可以和步骤6同步进行。
步骤8:统计第二帧图像中每个信息值的出现频率,根据步骤4得到第二帧图像对应的改进哈夫曼编码表B,存入本发明所需调用的第四个存储空间,即图1所示ram_map_2中。需要说明的是,本步骤可以和步骤6、步骤7同步进行。
步骤9:获取第三帧图像,按步骤1方法对图像进行分块,对于存在数目不足8*8成块的像素点,因此部分占全帧图像比例极小,故不做压缩、存储及3D降噪处理。
步骤10:对ram_code中存储的第二帧图像信息按照改进哈夫曼编码表A逐块进行映射解码还原。
具体的,逐块调用ram_code中的每块像素的编码值,此后调用ram_map_1中存储的改进哈夫曼编码表A,映射解码得出第二帧图像对应像素的信息值,再调用ram_sign中每块像素残差的正负符号值,还原第二帧图像每块像素的残差原值,最后根据步骤2中残差值预测计算的逆运算,通过第二帧图像中各像素的残差值得出第二帧图像中各像素原值。其中,进行映射解码还原时,若映射编码的编码值串中存在与解码标志符号code_mark相等的值串,则取该编码值串中解码标志符号后8位二进制字符码作为该编码值串的解码值,再将二进制的解码值转换为十进制整数,得到最终的信息值,如图6所示。
步骤11:逐块使用步骤10解压出的第二帧图像的像数值对第三帧图像对应像素块进行3D降噪处理。
具体的,在获取第三帧图像第一像素块信息后,同步对第二帧图像第一像素块编码进行解码还原,对比完成本像素块的3D降噪,此后进行下一像素块的3D降噪,直至第三帧图像的所有像素块依次完成降噪。
步骤12:与步骤10、步骤11同步的,对第三帧图像进行逐块编码,并依次存储更新到ram_code中,即调用完ram_code中存储的第二帧图像第一像素块编码值用于完成解码及3D降噪后,调用ram_map_2中存储的改进哈夫曼编码表B,对第三帧图像第一个像素块进行编码,替换已被调用信息存入ram_code中。而后调用及解码ram_code中存储的第二帧图像第二个像素块编码值。
步骤13:与步骤12同步的,逐块对第三帧图像像素残差值的正负值进行判定,以正值为1,负值为0分块依次更新存入ram_sign中。
步骤14:将ram_map_2存储的改进哈夫曼编码表B转移至ram_map_1,并统计第三帧图像中每个信息值的出现频率,利用本发明改进的哈夫曼编码形式,得出基于第三帧图像对应的改进哈夫曼编码表C,存储进ram_map_2中。
步骤15:后续帧的编码压缩及解压、降噪过程按照步骤9至步骤14进行循环开展,直至最后一帧图像在ISP中完成降噪。
以上图像3D降噪过程中,第一帧图像用于计算下一帧图像编码压缩所需的编码表,不进行压缩及存储处理,第二帧图像经压缩及解压后作为第三帧图像的3D降噪对比帧,不做降噪处理,其余帧图像均做3D降噪处理。
一种图像3D降噪装置,包括存储有执行上述图像3D降噪方法程序的存储介质。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。