发明内容
有鉴于此,本发明提供了一种视频编码系统、一种视频编码方法、以及一种调节编码位宽的控制装置和一种调节编码位宽的控制方法,能够根据亮度动态范围的变化实时调整编码位宽。
本发明提供的一种视频编码系统,包括用于输出N位图像数据的感光器件、以及视频编码器,所述视频编码器内部存储有编码位宽参数和亮度偏移量参数,且该系统还包括调节编码位宽的控制装置,其中,
所述调节编码位宽的控制装置包括:
动态范围检测单元,用于检测所述N位图像数据的直方图中满足预设第一比例因子的像素亮度值下限、以及满足预设第二比例因子的像素亮度值上限,并将检测到的所述上限与所述下限之间的像素亮度值范围确定为所述图像数据的亮度动态范围;
编码位宽配置单元,用于根据所述上限与下限的差计算所述图像数据所需的编码位宽,并将所述编码位宽参数取值P赋值为计算得到的编码位宽、将所述亮度偏移量参数取值Q赋值为所述图像数据的亮度动态范围的下边界;
所述视频编码器,用于将所述N位图像数据中的所有像素的亮度值减去亮度偏移量参数的取值Q;以编码位宽参数的取值P为编码位宽,对减去亮度偏移量参数的取值Q后的N位图像数据的低P位进行视频编码;
其中,N、P、Q均为正整数。
所述下限和所述上限分别满足:
且
且
其中,k表示所述N位图像数据的直方图中2N个像素亮度值被划分成的亮度值区间个数;S(j)表示亮度值落在第j个亮度值区间内的像素个数,0≤j≤k-1、且j为正整数;Min为表示亮度值区间的所述下限、Max为表示亮度值区间的所述上限;α为预设第一比例因子,β为预设第二比例因子;M为所述N位图像数据的总像素个数;
且,所述动态范围检测单元包括:
区间检测子单元,用于检测表示亮度值区间的所述下限和所述上限;
边界检测子单元,用于检测表示亮度值区间的下限的上/下边界、以及表示亮度值区间的上限的上/下边界;
边界差值子单元,用于计算所述上限的上/下边界与所述下限的上/下边界之差,得到当前图像数据的亮度动态范围。
所述下限和所述上限分别满足:
且
且
其中,H[i]为表示直方图中像素亮度值为i的像素个数,0≤i≤2N-1、且i为正整数;Min为表示像素亮度值的所述下限、Max为表示像素亮度值的所述上限;α为预设第一比例因子,β为预设第二比例因子;M为所述N位图像数据的总像素个数;
且,所述动态范围检测单元包括:
亮度值检测子单元,用于检测表示像素亮度值的所述下限和所述上限;
亮度值差值子单元,用于计算所述上限与所述下限之差,得到当前图像数据的亮度动态范围。
所述编码位宽配置单元包括:
对数计算子单元,用于计算以2为底的该亮度动态范围的对数;
取整子单元,用于对所述对数向上取整,得到所述图像数据所需的编码位宽;
配置子单元,用于将所述视频编码器中的编码位宽参数的取值P赋值为计算得到的编码位宽、将所述亮度偏移量参数取值Q赋值为所述图像数据的亮度动态范围的下边界。
所述配置子单元进一步将编码位宽参数取值P和亮度偏移量参数取值Q插入在所述图像数据传输码流的任意预设位置。
所述视频编码器进一步在对减去亮度偏移量参数取值后的N位图像数据进行箝位处理后、再取低P位进行视频编码。
本发明提供的一种视频编码方法,在视频编码器内部设置编码位宽参数和亮度偏移量参数,且该方法包括:
a、检测感光器件输出的N位图像数据的直方图中,满足预设第一比例因子的像素亮度值下限、以及满足预设第二比例因子的像素亮度值上限;
b、将检测到的所述上限与所述下限之间的像素亮度值范围确定为所述图像数据的亮度动态范围;
c、根据确定的所述图像数据的亮度动态范围计算所述图像数据所需的编码位宽;
d、将所述视频编码器中的编码位宽参数取值P赋值为计算得到的编码位宽、并将所述亮度偏移量参数取值Q赋值为所述图像数据的亮度动态范围的下边界;
e、视频编码器将所述N位图像数据中的所有像素的亮度值减去亮度偏移量参数的取值Q;
f、以编码位宽参数取值P为编码位宽对减去亮度偏移量参数取值Q后的N位图像数据的低P位进行视频编码;
其中,N、P、Q均为正整数。
所述下限和所述上限分别满足:
且
且
其中,k表示所述N位图像数据的直方图中2N个像素亮度值被划分成的亮度值区间个数;S(j)表示亮度值落在第j个亮度值区间内的像素个数,0≤j≤k-1、且j为正整数;Min为表示亮度值区间的所述下限、Max为表示亮度值区间的所述上限;α为预设第一比例因子,β为预设第二比例因子;M为所述N位图像数据的总像素个数;
且,所述步骤b包括:
b11、检测表示亮度值区间的所述下限和所述上限;
b12、检测表示亮度值区间的下限的上/下边界、以及表示亮度值区间的上限的上/下边界;
b13、计算所述上限的上/下边界与所述下限的上/下边界之差,得到当前图像数据的亮度动态范围。
所述下限和所述上限分别满足:
且
且
其中,H[i]为表示直方图中像素亮度值为i的像素个数,0≤i≤2N-1、且i为正整数;Min为表示像素亮度值的所述下限、Max为表示像素亮度值的所述上限;α为预设第一比例因子,β为预设第二比例因子;M为所述N位图像数据的总像素个数;
且,所述步骤b包括:
b21、检测表示像素亮度值的所述下限和所述上限;
b22、所述上限与所述下限之差,得到当前图像数据的亮度动态范围。
所述步骤c包括:计算以2为底的该亮度动态范围的对数,并对所述对数向上取整,得到所述图像数据所需的编码位宽。
所述步骤d进一步将编码位宽参数取值P和亮度偏移量参数取值Q插入在该图像数据传输码流的任意预设位置。
所述步骤f进一步在对减去亮度偏移量参数取值后的N位图像数据进行箝位处理后、再取低P位进行视频编码。
本发明提供的一种调节编码位宽的控制装置,该装置包括:
动态范围检测单元,用于检测所述N位图像数据的直方图中满足预设第一比例因子的像素亮度值下限、以及满足预设第二比例因子的像素亮度值上限,并将检测到的所述上限与所述下限之间的像素亮度值范围确定为所述图像数据的亮度动态范围;
编码位宽配置单元,用于根据所述上限与下限的差计算所述图像数据所需的编码位宽,并将视频编码器中的编码位宽参数取值P赋值为计算得到的编码位宽、将所述视频编码器中的亮度偏移量参数取值Q赋值为所述图像数据的亮度动态范围的下边界;
其中,N、P、Q均为正整数。
所述下限和所述上限分别满足:
且
且
其中,k表示所述N位图像数据的直方图中2N个像素亮度值被划分成的亮度值区间个数;S(j)表示亮度值落在第j个亮度值区间内的像素个数,0≤j≤k-1、且j为正整数;Min为表示亮度值区间的所述下限、Max为表示亮度值区间的所述上限;α为预设第一比例因子,β为预设第二比例因子;M为所述N位图像数据的总像素个数;
且,所述动态范围检测单元包括:
区间检测子单元,用于检测表示亮度值区间的所述下限和所述上限;
边界检测子单元,用于检测表示亮度值区间的下限的上/下边界、以及表示亮度值区间的上限的上/下边界;
边界差值子单元,用于计算所述上限的上/下边界与所述下限的上/下边界之差,得到当前图像数据的亮度动态范围。
所述下限和所述上限分别满足:
且
且
其中,H[i]为表示直方图中像素亮度值为i的像素个数,0≤i≤2N-1、且i为正整数;Min为表示像素亮度值的所述下限、Max为表示像素亮度值的所述上限;α为预设第一比例因子,β为预设第二比例因子;M为所述N位图像数据的总像素个数;
且,所述动态范围检测单元包括:
亮度值检测子单元,用于检测表示像素亮度值的所述下限和所述上限;
亮度值差值子单元,用于计算所述上限与所述下限之差,得到当前图像数据的亮度动态范围。
所述编码位宽配置单元包括:
对数计算子单元,用于计算以2为底的该亮度动态范围的对数;
取整子单元,用于对所述对数向上取整,得到所述图像数据所需的编码位宽;
配置子单元,用于将所述视频编码器中的编码位宽参数的取值P赋值为计算得到的编码位宽、将所述亮度偏移量参数取值Q赋值为所述图像数据的亮度动态范围的下边界。
所述配置子单元进一步将编码位宽参数取值P和亮度偏移量参数取值Q插入在该图像数据传输码流的任意预设位置。
本发明提供的一种调节编码位宽的控制方法,在视频编码器内部设置编码位宽参数和亮度偏移量参数,且该方法包括:
a、检测感光器件输出的N位图像数据的直方图中,满足预设第一比例因子的像素亮度值下限、以及满足预设第二比例因子的像素亮度值上限;
b、将检测到的所述上限与所述下限之间的像素亮度值范围确定为所述图像数据的亮度动态范围;
c、根据确定的所述图像数据的亮度动态范围计算所述图像数据所需的编码位宽;
d、将所述视频编码器中的编码位宽参数取值P赋值为计算得到的编码位宽、并将所述亮度偏移量参数取值Q赋值为所述图像数据的亮度动态范围的下边界;
其中,N、P、Q均为正整数。
所述下限和所述上限分别满足:
且
且
其中,k表示所述N位图像数据的直方图中2N个像素亮度值被划分成的亮度值区间个数;S(j)表示亮度值落在第j个亮度值区间内的像素个数,0≤j≤k-1、且j为正整数;Min为表示亮度值区间的所述下限、Max为表示亮度值区间的所述上限;α为预设第一比例因子,β为预设第二比例因子;M为所述N位图像数据的总像素个数;
且,所述步骤b包括:
b11、检测表示亮度值区间的所述下限和所述上限;
b12、检测表示亮度值区间的下限的上/下边界、以及表示亮度值区间的上限的上/下边界;
b13、计算所述上限的上/下边界与所述下限的上/下边界之差,得到当前图像数据的亮度动态范围。
所述下限和所述上限分别满足:
且
且
其中,H[i]为表示直方图中像素亮度值为i的像素个数,0≤i≤2N-1、且i为正整数;Min为表示像素亮度值的所述下限、Max为表示像素亮度值的所述上限;α为预设第一比例因子,β为预设第二比例因子;M为所述N位图像数据的总像素个数;
且,所述步骤b包括:
b21、检测表示像素亮度值的所述下限和所述上限;
b22、所述上限与所述下限之差,得到当前图像数据的亮度动态范围。
所述步骤c包括:计算以2为底的该亮度动态范围的对数,并对所述对数向上取整,得到所述图像数据所需的编码位宽。
所述步骤d进一步将编码位宽参数取值P和亮度偏移量参数取值Q插入在该图像数据传输码流的任意预设位置。
由上述技术方案可见,本发明根据图像数据的直方图检测出像素亮度值的下限和上限,并根据上限与下限之间的像素亮度值范围所表示的图像数据的亮度动态范围,确定出该图像数据实际所需的编码位宽,然后以计算出的编码位宽配置视频编码器的编码位宽参数的取值、以对视频编码器的编码位宽进行调整,同时以检测到的像素亮度值下限配置视频编码器的亮度偏移量参数的取值,使得视频编码器将图像数据的所有像素值减去亮度偏移量参数的取值之后,直接从图像数据中取相应的低位即可以编码位宽参数的取值为编码位宽对图像数据进行视频编码,避免了硬件资源的浪费和编码速度的降低。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明进一步详细说明。
图3为本发明实施例中视频编码系统的示例性结构图。如图3所示,本实施例中的视频编码系统仍包括感光器件31和视频编码器32,但该系统中还包括调节编码位宽的控制装置33。
感光器件31与现有如图1所示的感光器件11的工作原理相同,用于输出N位图像数据至视频编码器32,同时还将该N为图像数据输出至调节编码位宽的控制装置33。其中,N为正整数。
视频编码器32,其内部存储有编码位宽参数和亮度偏移量参数、且编码位宽参数的取值P和亮度偏移量参数的取值Q均可配置,视频编码器32用于将感光器件31输出的N位图像数据中的所有像素的亮度值减去亮度偏移量参数的取值Q,然后以编码位宽参数的取值P为编码位宽,对减去亮度偏移量参数取值后的N位图像数据中的低P位进行视频编码。其中,P和Q均为正整数。
实际应用中,视频编码器32可包括一掉电不丢数据且能够进行写操作存储器(图中未示出),例如闪存(Flash)、非易失性只读存储器(E2PROM)等,用于存储有编码位宽参数和亮度偏移量参数;视频编码器32中还包括一处理器(图中未示出),例如英特尔奔腾第三代(Intel Pentium III)处理器、各种型号的数字处理器(DSP)、各种型号的现场可编程逻辑门阵列(FPGA)等,用于执行视频编码操作,该处理器进行视频编码操作的基本原理与现有如图1所示的视频编码器12相同。
调节编码位宽的控制装置33包括动态范围检测单元331和编码位宽配置单元332。
动态范围检测单元331,用于获取感光器件31输出的N位图像数据转换的直方图,并检测该直方图中满足预设第一比例因子的像素亮度值下限、以及满足预设第二比例因子的像素亮度值上限,然后将检测到的上限与下限之间的像素亮度值范围确定为当前图像数据的亮度动态范围。
编码位宽配置单元332,用于根据动态范围检测单元331确定的亮度动态范围计算当前图像数据所需的编码位宽,然后将视频编码器32中的编码位宽参数取值P赋值为计算得到的编码位宽、并根据动态范围检测单元331得到的像素亮度值下限配置视频编码器32中的亮度偏移量参数取值Q。
实际应用中,调节编码位宽的控制装置33可以由DSP或FPGA等处理器来实现。
具体来说,在本实施例的视频编码系统中,动态范围检测单元331检测到的满足预设第一比例因子的像素亮度值下限、以及满足预设第二比例因子的像素亮度值上限,可以有多种定义方式,例如:
方式一,对于感光器件31输出N位图像数据,其直方图中存在0~(2N-1)、共2N个像素亮度值,假设将2N个像素亮度值划分为k个亮度值区间、每个区间包含l=2N/k个像素亮度值,然后分别统计亮度值属于每一个区间的像素个数S(j),0≤j≤k-1、且j为正整数,动态范围检测单元331检测到的直方图中的像素亮度值的下限和上限均表示亮度值区间、且分别满足:
且
且
其中,k表示直方图中2N个像素亮度值被划分成的区间个数;S(j)表示图像数据中亮度值落在第j个区间内的像素个数,0≤j≤k-1、且j为正整数;Min为所述下限、Max为所述上限;α为预设第一比例因子,β为预设第二比例因子,本实施例中α、β较佳地取1%~5%、且α、β可以相同也可以不同。
方式二,在上述方式一的条件中,如果将2N个像素亮度值划分为2N个区间、即每个区间内只有1个像素点亮度值i,0≤i≤2N-1、且i为正整数,则检测到的该直方图中的像素亮度值的下限和上限均表示像素亮度值、且分别满足:
且
且
其中,H[i]为表示直方图中像素亮度值为i的像素个数,0≤i≤2N-1、且i为正整数;Min为所述下限、Max为所述上限;α为预设第一比例因子,β为预设第二比例因子,本实施例中α、β较佳地取1%~5%、且α、β可以相同也可以不同。
上述两种方式相比,显然方式一涉及的计算过程更少、计算速度更快,但方式二精度显然更高。
且对于上述两种不同的下限和上限的定义方式,动态范围检测单元331确定当前图像数据的亮度动态范围的方式也就随之不同:
对于下限和上限均表示亮度值区间的方式一,动态范围检测单元331可以包括区间检测子单元、边界检测子单元、边界差值子单元(图中未示出)。其中,区间检测子单元用于在直方图中检测满足方式一的表示亮度值区间的下限和上限;边界检测子单元用于在直方图中检测表示亮度值区间的下限的上/下边界、以及表示亮度值区间的上限的上/下边界;边界差值子单元用于计算上限上/下边界与下限上/下边界之差,得到当前图像数据的亮度动态范围(本文中所出现的“/”表示“或”)。
对于下限和上限均表示像素亮度值的方式二,动态范围检测单元331可以包括亮度值检测子单元、亮度值差值子单元(图中未示出)。其中,亮度值检测子单元用于在直方图中检测满足方式二的表示像素亮度值的下限和上限;亮度值差值子单元用于计算上限与下限之差,得到当前图像数据的亮度动态范围。
此外,在本实施例的视频编码系统中,编码位宽配置单元332可以包括对数计算子单元、取整子单元、以及配置子单元(图中未示出),并由对数计算子单元计算以2为底的该亮度动态范围的对数,然后由取整子单元对该对数向上取整,得到当前图像数据所需的编码位宽,再由配置子单元执行对视频编码器32的配置。
对于下限和上限均表示亮度值区间的方式一,编码位宽配置单元332中对数计算子单元和取整子单元的处理过程可以表示为:
N′表示实际所需的编码位宽、Max_boundary表示上限的上/下边界、Min_boundary表示下限的上/下边界;
且配置子单元将视频编码器32中的编码位宽参数取值P赋值为计算得到的编码位宽、并需要将视频编码器32中的亮度偏移量参数取值Q赋值为动态范围检测单元331得到的像素亮度值下限上/下边界Min_boundary。
对于下限和上限均表示像素亮度值的方式二,编码位宽配置单元332中对数计算子单元和取整子单元的处理过程可以表示为:
N′表示实际所需的编码位宽、Min为所述下限、Max为所述上限;
且配置子单元将视频编码器32中的编码位宽参数取值P赋值为计算得到的编码位宽、并直接将视频编码器32中的亮度偏移量参数取值Q赋值为动态范围检测单元331得到的像素亮度值下限Min。
对于上限和下限的两种方式,配置子单元对视频编码器32中的亮度偏移量参数取值Q赋值的过程,实质上均是将动态范围检测单元331所确定的当前图像数据的亮度动态范围的下边界赋值给亮度偏移量参数取值Q。也就是说,对于下限和上限均表示亮度值区间的方式一,动态范围检测单元331得到的像素亮度值下限上/下边界Min_boundary为亮度动态范围的下边界;对于下限和上限均表示像素亮度值的方式二,动态范围检测单元331得到的像素亮度值下限Min为亮度动态范围的下边界。
而且,在配置视频编码器32时,编码位宽配置单元332中的配置子单元可以直接对视频编码器32中存储有编码位宽参数和亮度偏移量参数的存储器进行写操作,实现如上所述的配置;当然,为了解码端也能够获知各图像数据的编码位宽和亮度偏移量参数取值,较佳地,编码位宽配置单元332中的配置子单元将该图像数据实际所需的编码位宽和用作亮度偏移量参数取值的下限上/下边界、或下限,即将编码位宽参数取值P和亮度偏移量参数取值Q,插入在该图像数据传输码流的任意预设位置,例如可以在图像数据的头参数中增加如下的语法元素:
{
亮度偏移量;
编码位宽;
}
然后由视频编码器32中实现编码操作的处理器,自行对存储有编码位宽参数和亮度偏移量参数的存储器进行写操作,这样,也可以实现如上所述的配置,且解码端能够从码流中获取上述语法元素,以确定图像数据的实际编码位宽和所作的亮度偏移量。
进一步地,在本实施例的视频编码系统中,考虑到如下原因,视频编码器32来说,可以在对减去亮度偏移量参数取值后的N位图像数据进行箝位处理后、再取低P位进行视频编码:
感光器件31输出的N位图像数据中亮度值小于下限的部分像素,在其亮度值减去亮度偏移量取值之后会变为负数;
感光器件31输出的N位图像数据中亮度值大于上限的部分像素,在其亮度值减去亮度偏移量取值之后有可能会大于2P-1,且取低P位后减去亮度偏移量取值之后的亮度值会发生巨变,以N=10、P=8为例,假设某像素的亮度值减去亮度偏移量取值为0010000001、即257,大于255,则取低8位后就变为00000001、即1;
虽然上述两点问题对图像数据在整体视觉效果上不会造成很大的影响,但有可能使得图像数据中出现相邻像素间的较大亮度差,因而会对视频编码速度也会稍有影响。
这样,可以采用的箝位处理具体包括:如果减去亮度偏移量参数取值后的N位图像数据中,存在亮度取值小于0的像素点,则将该像素点的亮度取值设置为0;如果减去亮度偏移量参数取值后的N位图像数据中,存在亮度取值大于等于2P的像素点,则将该像素点的亮度取值设置为(2P-1)。
对于由DSP或FPGA等处理器实现的调节编码位宽的控制装置33来说,只需增加如下的逻辑语句即可:
If(x<0),x=0;
If(x≥2P),x=2P-1。
这样,仍以N=10、P=8为例,假设某像素的亮度值减去亮度偏移量取值为0010000001、即257,大于255,则进行箝位处理后就变为0001111111、即255,那么再取低8位后仍为0001111111,相比于其原值没有发生巨变。
以上,是对本实施例中的视频编码系统、以及该视频编码系统中调节编码位宽的控制装置的详细说明,下面,再对本实施例中的视频编码方法、以及该视频编码方法中调节编码位宽的控制方法进行说明。
图4为本发明实施例中视频编码方法的示例性流程图。在视频编码器中设置取值P可配置的编码位宽参数、以及取值Q可配置的亮度偏移量参数之后,如图4所示,该方法包括:
步骤401,获取感光器件输出的N位图像数据的直方图。
步骤402,检测步骤401得到的直方图中满足预设第一比例因子的像素亮度值下限、以及满足预设第二比例因子的像素亮度值上限。
步骤403,将步骤402检测到的像素亮度值上限与下限之间的像素亮度值范围确定为当前图像数据的亮度动态范围。
步骤404,根据步骤403得到的亮度动态范围确定当前图像数据所需的编码位宽。
步骤405,将视频编码器中的编码位宽参数取值P赋值为步骤404计算得到的编码位宽、并根据步骤402得到的像素亮度值下限配置视频编码器中的亮度偏移量参数取值Q。
步骤406,将感光器件输出的N位图像数据中的所有像素的亮度值减去亮度偏移量参数的取值Q。
步骤407,以编码位宽参数的取值P为编码位宽,对减去亮度偏移量参数取值Q后的N位图像数据中的低P位进行视频编码。
至此,本流程结束。
上述流程中,步骤401~步骤405即为本实施例中调节编码位宽的控制方法具体处理流程。
具体来说,在本实施例的视频编码方法中,步骤402检测到的满足预设第一比例因子的像素亮度值下限、以及满足预设第二比例因子的像素亮度值上限,可以有多种定义方式,例如:
方式一,像素亮度值的下限和上限均表示亮度值区间、且分别满足:
且
且
其中,k表示直方图中2N个像素亮度值被划分成的亮度值区间个数;S(j)表示图像数据中亮度值落在第j个区间内的像素个数,0≤j≤k-1、且j为正整数;Min为所述下限、Max为所述上限;α为预设第一比例因子,β为预设第二比例因子,本实施例中α、β较佳地取1%~5%、且α、β可以相同也可以不同。
方式二,像素亮度值的下限和上限均表示像素亮度值、且分别满足:
且
且
其中,H[i]为表示直方图中像素亮度值为i的像素个数,0≤i≤2N-1、且i为正整数;Min为所述下限、Max为所述上限;α为预设第一比例因子,β为预设第二比例因子,本实施例中α、β较佳地取1%~5%、且α、β可以相同也可以不同。
且对于上述两种不同的下限和上限的定义方式,步骤403确定当前图像数据的亮度动态范围的方式也就随之不同:
对于下限和上限均表示亮度值区间的方式一,步骤403的处理过程可以为,在直方图中检测满足方式一的表示亮度值区间的下限和上限,然后在直方图中检测表示的像素亮度值的下限上/下边界、以及表示的像素亮度值的上限上/下边界处的像素亮度值,最后再计算上限上/下边界与下限上/下边界之差,得到当前图像数据的亮度动态范围;
对于下限和上限均表示像素亮度值的方式二,步骤403的处理过程可以为,在直方图中检测满足方式二的表示像素亮度值的下限和上限,然后计算上限与下限之差,得到当前图像数据的亮度动态范围。
此外,在本实施例的视频编码方法中,步骤404的具体处理过程可以包括:对数计算子单元计算以2为底的该亮度动态范围的对数,再对该对数向上取整,得到当前图像数据所需的编码位宽。
对于下限和上限均表示亮度值区间的方式一,步骤404的具体处理过程可以表示为:
N′表示实际所需的编码位宽、Max_boundary表示上限的上/下边界、Min_boundary表示下限的上/下边界;且在步骤405,将视频编码器中的编码位宽参数的取值P赋值为计算得到的编码位宽N′、并需要将视频编码器中的亮度偏移量参数取值Q赋值为像素亮度值下限上/下边界Min_boundary。
对于下限和上限均表示像素亮度值的方式二,步骤404的具体处理过程可以表示为:
N′表示实际所需的编码位宽、Min为所述下限、Max为所述上限;且在步骤405,将视频编码器中的编码位宽参数的取值P赋值为计算得到的编码位宽N′、并可直接将视频编码器中的亮度偏移量参数取值Q赋值为像素亮度值下限Min。
对于上限和下限的两种方式,步骤404中对视频编码器32中的亮度偏移量参数取值Q赋值的过程,实质上均是将步骤403所确定的当前图像数据的亮度动态范围的下边界赋值给亮度偏移量参数取值Q。也就是说,对于下限和上限均表示亮度值区间的方式一,像素亮度值下限上/下边界Min_boundary为亮度动态范围的下边界;对于下限和上限均表示像素亮度值的方式二,像素亮度值下限Min为亮度动态范围的下边界。
而在本实施例的视频编码方法的步骤405中,可以直接对视频编码器中存储有编码位宽参数和亮度偏移量参数的存储器进行写操作,实现如上所述的配置;当然,为了解码端也能够获知各图像数据的编码位宽和亮度偏移量参数取值,较佳地,可以将该图像数据的实际所需的编码位宽和用作亮度偏移量参数取值的下限上/下边界、或下限,即将编码位宽参数取值P和亮度偏移量参数取值Q,插入在该图像数据传输码流的任意预设位置,例如可以在图像数据的头参数中增加如下的语法元素:
{
亮度偏移量;
编码位宽;
}
然后由视频编码器中实现编码操作的处理器,自行对存储有编码位宽参数和亮度偏移量参数的存储器进行写操作,这样,也可以实现如上所述的配置,且解码端能够从码流中获取上述语法元素,以确定图像数据的实际编码位宽和所作的亮度偏移量。
进一步地,在本实施例的视频编码方法中,考虑到在如前所述的视频编码系统已详细说明的原因,在步骤406中,视频编码器可以进一步对减去亮度偏移量参数取值后的N位图像数据进行箝位处理后、再取低P位进行视频编码。
其中,箝位处理可具体包括:如果减去亮度偏移量参数取值后的N位图像数据中,存在亮度取值小于0的像素点,则将该像素点的亮度取值设置为0;如果减去亮度偏移量参数取值后的N位图像数据中,存在亮度取值大于等于2P的像素点,则将该像素点的亮度取值设置为(2P-1)。
可见,本实施例根据图像数据的直方图检测出像素亮度值的下限和上限,并根据上限与下限之间的像素亮度值范围所表示的图像数据的亮度动态范围,确定出该图像数据实际所需的编码位宽,然后以计算出的编码位宽配置视频编码器的编码位宽参数的取值、以对视频编码器的编码位宽进行调整,同时以检测到的像素亮度值下限配置视频编码器的亮度偏移量参数的取值,使得视频编码器将图像数据的所有像素值减去亮度偏移量参数的取值之后,直接从图像数据中取相应的低位即可以编码位宽参数的取值为编码位宽对图像数据进行视频编码,避免了硬件资源的浪费和编码速度的降低。
下面,再结合两个实例对本实施例中的技术方案进行进一步说明。
实例一:
假设感光器件输出的图像数据的位数N=10、且该图像数据共包含M个像素,M为正整数。
参见图5a,对于下限和上限均表示亮度值区间的方式一,将0~1023共1024个像素亮度值划分为64个区间、每个区间包含16个像素点亮度值,然后分别统计亮度值属于每一个区间的像素个数S(j),0≤j≤63、且j为正整数,则检测到的该直方图中,表示亮度值区间的下限Min和上限Max应当分别满足:
且
α为预设第一比例因子,本实施例中较佳地取1%~5%;
且
β为预设第二比例因子,本实施例中较佳地取1%~5%。
然后,再假设α和β均取1%(α和β也可以不同),即直方图中位于下限Min左侧的像素个数之和为总像素个数M的1%、直方图中位于上限Max右侧的像素个数之和也为总像素个数M的1%,则检测到的下限Min为31、检测到的上限Max约为46。
此后,计算上限Max上边界751与下限Min上边界511之差,得到当前图像数据的亮度动态范围为240。当然,也可以计算上限Max下边界736与下限Min上边界511之差、或上限Max下边界736与下限Min下边界495之差、或上限Max上边界751与下限Min下边界495之差,那么对应的当前图像数据的亮度动态范围分别为224、240、254,差别只有每个区间包含的像素点亮度值个数,由此,实际应用中在计算时究竟以上边界为准还是下边界为准,可以任意设定。
这样,根据计算得到的亮度动态范围,即可计算当前图像数据所需的编码位宽N′:
计算出当前图像数据所需的编码位宽N′之后,将视频编码器内部的编码位宽参数的取值P赋值为N′,从而对于位宽10位的当前图像数据,即可根据其亮度动态范围将编码位宽调整为8位。
但是,对于视频编码器来说,应当从其接收到的10位当前数据中选择哪8位进行视频编码是不确定的,因此还需要将视频编码器中的亮度值偏移量参数取值Q赋值为下限Min上边界511。
这样,视频编码器在进行视频编码之前,首先将当前图像数据的所有像素亮度值均减去作为亮度偏移量参数取值Q的下限Min上边界511。参见图5b,减去亮度偏移量参数取值,就相当于将该当前图像数据的直方图向左平移,直至如图5a所示直方图中的下限Min上边界511与如图5b所示直方图中坐标原点重合。然后,视频编码器即可从其接收到的10位当前数据中选择低8位进行视频编码,即对当前图像中位于如图5b所示的向左平移后的直方图中像素亮度值为0~255之间的部分进行视频编码。
如此一来,即实现了视频编码器的编码位宽的调整,且调整编码位宽后的视频编码过程。
当然,在减去亮度偏移量取值Q之后,图5a中位于下限Min上边界511左侧的全部像素亮度值为负数、位于上限Max上边界751右侧的部分像素亮度值会大于28,即丢失了如图5a所示直方图中位于下限Min上边界511左侧的1%的全部像素真实的亮度值、以及位于上限Max上边界751右侧的部分像素真实的亮度值,这虽然对于全部图像数据的效果没有明显的影响,但由于位于下限Min上边界511左侧的全部像素亮度值、以及位于上限Max上边界751右侧的部分像素亮度值在取低8位后会出现如本文前述的问题,因此,可以先对减去亮度偏移量参数取值后的10位图像数据进行箝位处理后、再取低8位进行视频编码。
实例二:
假设感光器件输出的图像数据的位数N=10、且该图像数据共包含M个像素,M为正整数。
参见图6a,对于下限和上限均表示像素亮度值的方式二,将0~1023共1024个像素亮度值划分为1024个区间、即每个区间内只有1个像素点亮度值i,0≤i≤210-1、且i为正整数,则检测到的该直方图中的像素亮度值的下限Min和上限Max均表示具体的像素亮度值、且分别满足:
且
α为预设第一比例因子,本实施例中较佳地取1%~5%;
且
β为预设第二比例因子,本实施例中较佳地取1%~5%;
其中,H[i]为表示直方图中像素亮度值为i的像素个数。
然后,再假设α和β均取1%(α和β也可以不同),即直方图中位于下限Min左侧的像素个数之和为总像素个数M的1%、直方图中位于上限Max右侧的像素个数之和也为总像素个数M的1%,则检测到的下限Min约为511、检测到的上限Max约为759。
此后,如图6a所示,检测得到的下限Min约为511、检测到的上限Max约为759,则计算得到该当前图像数据的亮度动态范围为238。
计算得到该当前图像数据的亮度动态范围后,再计算以2为底的该亮度动态范围的对数、并对该对数向上取整,即可得到当前图像数据所需的编码位宽N′:
计算出当前图像数据所需的编码位宽N′之后,将视频编码器内部的编码位宽参数的取值P赋值为N′,从而对于位宽10位的当前图像数据,即可根据其亮度动态范围将编码位宽调整为8位。
但是,对于视频编码器来说,应当从其接收到的10位当前数据中选择哪8位进行视频编码是不确定的,因此还需要将视频编码器中的亮度值偏移量参数取值Q赋值为下限Min511。
这样,视频编码器在进行视频编码之前,首先将当前图像数据的所有像素亮度值均减去作为亮度偏移量参数取值Q的下限Min511。参见图6b,减去亮度偏移量参数取值,就相当于将该当前图像数据的直方图向左平移,直至如图6a所示直方图中的下限Min511与如图6b所示直方图中坐标原点重合。然后,视频编码器即可从其接收到的10位当前数据中选择低8位进行视频编码,即对当前图像中位于如图6b所示的向左平移后的直方图中像素亮度值为0~255之间的部分进行视频编码。
如此一来,即实现了视频编码器的编码位宽的调整,且调整编码位宽后的视频编码过程。
当然,在减去亮度偏移量取值Q之后,图6a中位于下限Min511左侧的全部像素亮度值为负数、位于上限Max759右侧的部分像素亮度值会大于28,即丢失了如图5a所示直方图中位于下限Min511左侧的1%的全部像素真实的亮度值、以及位于上限Max759右侧的部分像素真实的亮度值,这虽然对于全部图像数据的效果没有明显的影响,但由于位于下限Min511左侧的全部像素亮度值、以及位于上限Max759右侧的部分像素亮度值在取低8位后会出现如本文前述的问题,因此,可以先对减去亮度偏移量参数取值后的10位图像数据进行箝位处理后、再取低8位进行视频编码。
如上述两个实例可知,为了尽可能地减少调整编码位宽所丢弃的像素亮度值,预设第一比例因子α、预设第二比例因子β当然是越小越好。
相应地,由于视频编码器在视频编码之前将当前图像数据的所有像素亮度值均减去亮度偏移量参数取值,因而降低了当前图像数据的整体亮度,那么在视频解码端,如果需要恢复当前图像数据的原有整体亮度,只需在解码之后将当前图像数据的所有像素亮度值均加上相同的亮度偏移量取值即可。
对于上述两个实例,假设视频编码器中的处理器是由英特尔奔腾第三代(Intel Pentium III)处理器实现的,该处理器具有一名为“psadbw”的指令,用于同时比较图像数据的两个不同宏块中所对应的16个8位像素值,以大幅提高视频编码器的计算速度。
对于大于8位的图像数据,则无法利用该指令来提高视频编码器的计算速度。但是,当图像数据的亮度动态范围由于外部环境的变化而由大于28的任一值变化为小于28的任一值时,编码位宽可由大于8的任一值调整为对应图像数据当前亮度动态范围的小于等于8的值,那么,此时即可利用名为“psadbw”的指令来提高视频编码器的计算速度。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换以及改进等,均应包含在本发明的保护范围之内。