发明内容
有鉴于此,本发明提供了一种基于直方图均衡的图像增强方法、以及一种基于直方图均衡的图像增强装置,能够提高增强后的图像质量。
本发明提供的一种图基于直方图均衡的像增强方法,包括:
a、分别对输入图像中的各区域进行直方图均衡处理;
b、分别对各区域与其四周相邻区域边缘处的像素灰度值进行插值处理。
所述步骤a包括:
a1、分别统计各区域中每个灰度值的像素数量,得到各区域中表示该区域内各灰度值像素数量的直方图序列;
a2、对各区域的直方图序列进行累加操作,得到各区域中表示每个灰度值像素累积分布的直方图累积序列;
a3、依据各区域的直方图累积序列计算得到各区域对应的如下均衡化映射表:
其中,Value为Value_Low~Value_High中的任意灰度值区间,{Mapping[Value]n}为第n个区域对应的均衡化映射表,{HistSum[Value]n}为第n个区域的直方图累积序列, Hist[t]n为第n个区域内第t个灰度值的像素数量,AllPixelsn为第n个区域中的像素总数,Value_Low为预设的均衡化最小值,Value_High为预设的匀衡化最大值,n大于1且小于等于区域总数;
a4、分别利用各区域对应的均衡化映射表,将该区域内的像素灰度值修正为Mapping(Lx,y),Lx,y表示每个区域中第x行第y列插值处理后的像素灰度值。
Value_Low取0,Value_High取255。
所述步骤b包括:分别将各区域划分为若干子块,并对位于不同区域的相邻子块进行插值处理。
分别将各区域内等分为行列数相等的四个子块,并对每四个对角拼接的相邻区域中位于对角拼接处的四个相邻子块进行插值处理。
对于拼接角处的每个子块中的各像素灰度值,按照如下方式进行插值处理:
L′i,j=row RevW×[colRevW×Mapping(Li,j)UL+colW×Mapping(Li,j)UR]
+rowW×[colRevW×Mapping(Li,j)BL+colW×Mapping(Li,j)BR]
其中,L′i,j表示所述每个子块中第i行第j列插值处理后的像素灰度值,rowW、rowRevW分别为正反方向的行插值系数矩阵,colW、colRevW分别为正反方向的列插值系数矩阵,Mapping(Li,j)UL、Mapping(Li,j)UR、Mapping(Li,j)BL、Mapping(Li,j)BR分别为左上方字块、右上方子块、左下方子块、右下方子块中第i行第j列的像素灰度值;
上述各矩阵中的rows为每个子块的行数,cols为每个子块的列数。
输入图像等分为8×8共64个区域。
所述步骤b之后,该方法进一步包括:c、对输入图像中所有像素灰度值进行局部对比度调整。
所述步骤c在每个局部调整窗中按照如下方式进行局部对比度调整:
x′p,q=Avr+α(xp,q-Avr)
其中,x′p,q为局部调整窗中第p行第q列像素经局部对比度调整后的灰度值,xp,q为局部调整窗中第p行第q列像素经插值处理后的灰度值,Avr为局部调整窗内所有像素经插值处理后的均衡灰度平均值,α为预设的调整系数、且α≥1。
局部调整窗为3×3的窗口。
本发明提供的一种基于直方图均衡的图像增强装置,包括:
区域直方图均衡模块,用于分别对输入图像中的各区域进行直方图均衡处理;
邻区域插值处理模块,用于分别对各区域与其四周相邻区域边缘处的像素灰度值进行插值处理。
所述区域直方图均衡模块包括:
序列统计子模块,用于分别统计各区域中每个灰度值的像素数量,得到各区域中表示该区域内各灰度值像素数量的直方图序列;
序列累积子模块,用于对各区域的直方图序列进行累加操作,得到各区域中表示每个灰度值像素累积分布的直方图累积序列;
映射建立子模块,用于依据各区域的直方图累积序列计算得到各区域对应的如下均衡化映射表:
其中,Value为Value_Low~Value_High中的任意灰度值区间,{Mapping[Value]n}为第n个区域对应的均衡化映射表,{HistSum[Value]n}为第n个区域的直方图累积序列, Hist[t]n为第n个区域内第t个灰度值的像素数量,AllPixelsn为第n个区域中的像素总数,Value_Low为预设的均衡化最小值,Value_High为预设的匀衡化最大值,n大于1且小于等于区域总数;
均衡映射子模块,用于分别利用各区域对应的均衡化映射表,将该区域内的像素灰度值修正为Mapping(Lx,y),Lx,y表示每个区域中第x行第y列插值处理后的像素灰度值。
Value_Low取0,Value_High取255。
所述邻区域插值处理模块分别将各区域划分为若干子块,并分别将各区域划分为若干子块,并对位于不同区域的相邻子块进行插值处理。
所述邻区域插值处理模块分别将各区域内等分为行列数相等的四个子块,并对每四个对角拼接的相邻区域中位于对角拼接处的四个相邻子块进行插值处理。
所述邻区域插值处理模块对于拼接角处的每个子块中的各像素灰度值,按照如下方式进行插值处理:
L′i,j=rowRevW×[colRevW×Mapping(Li,j)UL+colW×Mapping(Li,j)UR]
+rowW×[colRevW×Mapping(Li,j)BL+colW×Mapping(Li,j)BR]
其中,L′i,j表示所述每个子块中第i行第j列插值处理后的像素灰度值,rowW、rowRevW分别为正反方向的行插值系数矩阵,colW、colRevW分别为正反方向的列插值系数矩阵,Mapping(Li,j)UL、Mapping(Li,j)UR、Mapping(Li,j)BLMapping(Li,j)BR分别为左上方字块、右上方子块、左下方子块、右下方子块中第i行第j列的像素灰度值;
上述各矩阵中的rows为每个子块的行数,cols为每个子块的列数。
输入图像等分为8×8共64个区域。
进一步包括:局部对比度调整模块,用于对输入图像中所有像素灰度值进行局部对比度调整。
所述局部对比度调整模块在每个局部调整窗中按照如下方式进行局部对比度调整:
x′p,q=Avr+α(xp,q-Avr)
其中,x′p,q为局部调整窗中第p行第q列像素经局部对比度调整后的灰度值,xp,q为局部调整窗中第p行第q列像素经插值处理后的灰度值,Avr为局部调整窗内所有像素经插值处理后的均衡灰度平均值,α为预设的调整系数、且α≥1。
局部调整窗为3×3的窗口。
由上述技术方案可见,本发明对整帧输入图像分区域进行直方图均衡、而不是对整帧图像进行直方图均衡,如果区域内的像素在某些灰度区间过于集中,则图像的层次感会较差、图像的边缘细节信息的表现力不高,因此,通过单独对该区域进行直方图均衡就会使得该区域内的层次感增强、且能够提高具有丰富灰度值变化的边缘和细节信息的表现力;此后,再分别对各区域与其四周相邻区域边缘处的像素灰度值进行插值处理,即可使得各区域间存在相关性、避免由于各区域分别经直方图均衡处理而在区域间产生明显边界。如此一来,输入图像经直方图均衡后的边缘细节信息的表现力会被提高、且增强后的输入图像具有较好的平滑度,相比于现有丢失边缘细节信息的方式提高了增强图像的质量。
进一步地,虽然分区域直方图均衡能够尽可能少地丢失边缘细节信息,但由于分区域直方图均衡还大幅提高了整帧输入图像的视觉动态范围,因而在一定程度上会使得边缘细节不够突出,因此,本发明还可通过对增强后的输入图像进行局部对比度调整、以提高均衡化后图像的对比度,使增强图像的局部具有更大的动态范围、使边缘细节信息等局部更为突出,从而能够进一步提高增强图像的质量。
而且,本发明实现简单,硬件代价小、并可以嵌入芯片中。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明进一步详细说明。
本发明实施例中,对整帧输入图像分区域进行直方图均衡、而不是对整帧图像进行直方图均衡,如果区域内的像素在某些灰度区间过于集中,则图像的层次感会较差、图像的边缘细节信息的表现力不高,这样,通过单独对该区域进行直方图均衡就会使得该区域内的层次感增强、且能够提高具有丰富灰度值变化的边缘和细节信息的表现力。
当然,由于各区域分别进行直方图均衡时仅考虑本区域内的像素灰度值,因而各区域分别经直方图均衡处理后,容易在区域间产生明显的边界,为了使得各区域间存在相关性、以避免由于各区域分别经直方图均衡处理而在区域间产生明显边界,本发明实施例还可分别对各区域与其四周相邻区域边缘处的像素灰度值进行插值处理。
如此一来,输入图像经直方图均衡后不会丢失边缘细节信息、且增强后的输入图像具有较好的平滑度,相比于现有丢失边缘细节信息的方式提高了增强图像的质量。
此外,上述分区域直方图均衡、以及相邻区域边缘处的插值处理,虽然能够尽可能少地丢失边缘细节信息,即通过多保留边缘细节信息来提高增强图像的质量,但由于分区域直方图均衡还会大幅提高整帧输入图像的视觉动态范围,因而在一定程度上会使得边缘细节不够突出,由此,本发明还可通过对增强后的输入图像进行局部对比度调整、以提高均衡化后图像的对比度,使增强图像的局部具有更大的动态范围、使边缘细节信息等局部更为突出,从而能够进一步提高增强图像的质量。
下面,首先对本发明实施例中基于直方图均衡的图像增强方法进行详细说明。
图1为本发明实施例基于直方图均衡的图像增强方法的示例性流程图。如图1所示,本实施例中基于直方图均衡的图像增强方法包括如下步骤:
步骤101,分别对输入图像中的各区域进行直方图均衡处理。
本步骤之前,还可以对输入图像进行去噪等预处理。
在本步骤中,首先可以将输入图像等分成M×N个区域,然后对每个区域进行直方图统计,较佳地选用M=N=8,然后即可按照如下方式进行直方图均衡处理:
1)、分别统计每个灰度值的像素数量Hist[Value],其中,Value表示灰度值。相应地,每个区域中的各灰度值像素数量Hist[Value]即可构成第n个区域中由各灰度值像素数量顺序构成的直方图序列{Hist[Value]n},n大于1且小于等于区域总数M×N。
2)、分别对第n个区域的直方图序列{Hist[Value]n}进行累加操作,得到表示每个灰度值像素累积分布的递增的直方图累积序列{HistSum[Value]n},该序列中的每个元素 Hist[t]n为第n个区域内第t个灰度值的像素数量。
例如,对于一个直方图序列{Hist[Value]n}={0,1,2,4,5,7,6,……},其得到的递增的直方图累积序列{HistSum[Value]n}={1,3,7,12,19,25,26……}。
在芯片设计中,可利用两帧图像中变化不大的特点,将本步骤中得到的当前输入图像的分区域直方图统计供下一帧处理使用。
3)、依据各区域的直方图累积序列计算得到对应的均衡化映射表:
其中,Value为Value_Low~Value_High中的任意灰度值,{Mapping[Value]n}为第n个区域对应的均衡化映射表,{HistSum[Value]n}为第n个区域的直方图累积序列,AllPixelsn为第n个区域中的像素总数,Value_Low为预设的均衡化最小值,Vale_High为预设的匀衡化最大值。较佳地,为了使均衡化处理后的各区域均具有最大的动态范围,Value_Low可以取0,Value_High可以取255。
假设,灰度值0~128区间内的像素数量所占比例过大,那么,经均衡化映射表修正像素灰度值后,灰度值0~128区间内接近128的像素灰度值会超过128,从而被均衡至大于128的其它区间内,从而使得各灰度区间内的像素数量趋于均衡。
4)、分别利用各区域对应的均衡化映射表,将该区域内的像素灰度值修正为Mapping(Lx,y),Lx,y表示每个区域中第x行第y列插值处理后的像素灰度值,以使该区域内的像素灰度值得到均衡化处理,从而使各区域中落在不同灰度区间的像素数量尽可能平均、且每个灰度区间内均有像素,从而通过使各区域内可能具有的边缘细节信息具有更强的层次感来达到图像增强的目的。
当然,虽然现有技术中并未分区域进行直方图均衡化处理,但如何实现本步骤中的直方图均衡化,还可以由本领域技术人员采用任意的其它算法,在此不再一一列举。
步骤102,分别对各区域与其四周相邻区域边缘处的像素灰度值进行插值处理。
本步骤中,可以分别将各区域划分为若干子块,并对位于不同区域的相邻子块进行插值处理。更具体地,如图2所示,可以分别将如实线所示各区域内等分为像素行列数相等的2×2共4个如虚线划分的子块,并对每4个对角拼接的相邻区域中,位于如图2中箭头所引出的对角拼接处的4个相邻子块进行插值处理,即对图2中每4个对角拼接处的相邻左上方子块UL、右上方子块UR、左下方子块BL、右下方子块BR进行插值处理。需要说明的是,对于边缘区域中未标示出UL、UR、BL、BR的子块,可以不进行处理、或采用任意适用于边缘的处理方式进行处理。
而对于4个对角拼接处的相邻UL、UR、BL、BR中每个子块的各像素灰度值,按照如下方式进行插值处理:
L′i,j=rowRevW×[colRevW×Mapping(Li,j)UL+colW×Mapping(Li,j)UR]
+rowW×[colRevW×Mapping(Li,j)BL+colW×Mapping(Li,j)BR]
其中,L′i,j表示所述每个子块中第i行第j列先后经直方图均衡化和插值处理后的像素灰度值,rowW、rowRevW分别为正反方向的行插值系数矩阵,colW、colRevW分别为正反方向的列插值系数矩阵,Mapping(Li,j)UL、Mapping(Li,j)UR、Mapping(Li,j)BL、Mapping(Li,j)BR分别为左上方字块、右上方子块、左下方子块、右下方子块中第i行第j列经直方图均衡化的像素灰度值;
上述各矩阵中的rows为每个子块的行数,cols为每个子块的列数。
利用上述正反方向的行插值系数矩阵rowW和rowRevW、以及正反方向的列插值系数矩阵colW、colRevW,即可使得各子块中越靠近拼接角顶端的像素插值系数越大、越远离拼接角顶端的像素插值系数越小。
且,由于每个子块中的像素在插值运算时,以需要使用、且仅使用一次自身所在行和列的其余像素,因而正反方向的行插值系数矩阵rowW和rowRevW中,只能有一个矩阵的插值系数选取1~rows、另一个则只能选取0~rows-1,正反方向的列插值系数矩阵colW、colRevW中,只能有一个矩阵的插值系数选取1~cols、另一个则只能选取cols-1,从而能够避免在插值处理时重复使用每个像素所在行和列的其余像素灰度值。
步骤103,对输入图像中所有像素灰度值进行局部对比度调整。
本步骤为可选的步骤(在图1中以虚线框示出),且本步骤中可以在每个局部调整窗中按照如下方式进行局部对比度调整:
x′p,q=Avr+α(xp,q-Avr)
其中,x′p,q为局部调整窗中第p行第q列像素经局部对比度调整后的灰度值,xp,q为局部调整窗中第p行第q列像素先后经直方图均衡和插值处理后的灰度值,即可将步骤102中得到的L′i,j作为xp,q,Avr为局部调整窗内所有像素经插值处理后的均衡灰度平均值,α为预设的调整系数、且α≥1。
如上可见,当α>1时,如果Avr>xp,q,则x′p,q>xp,q;如果Avr<xp,q,则x′p,q<xp,q,从而实现了细节增强、或者说主要起到局部调整窗内的局部对比度增强作用,但基本没有调节整幅输入图像的动态范围。但正是如此,才能够弥补分区域直方图均衡由于大幅提高整帧输入图像的视觉动态范围、而在一定程度上会导致边缘细节不够突出的缺陷,从而使得本实施例能够既调节动态范围并保留边缘细节信息、又能够增强局部对比度,从而使得增强的图像效果更佳。
较佳地,为了使得局部对比度调整更加细致,可以设置局部调整窗为3×3的窗口。
至此,上述流程结束。
下面,再对本实施例中基于直方图均衡的图像增强装置进行详细说明。
图3为本发明实施例基于直方图均衡的图像增强装置的示例性结构图。如图3所示,本实施例中基于直方图均衡的图像增强装置包括:区域直方图均衡模块、邻区域插值处理模块、局部对比度调整模块。
区域直方图均衡模块,用于分别对输入图像中的各区域进行直方图均衡处理。
具体说,区域直方图均衡模块可以包括序列统计子模块、序列累积子模块、映射建立子模块以及均衡映射子模块(图3中未示出),其中:
序列统计子模块,用于分别统计每个灰度值的像素数量Hist[Value],Value表示灰度值,相应地,每个区域中的各灰度值像素数量Hist[Value]即可构成第n个区域中由各灰度值像素数量顺序构成的直方图序列{Hist[Value]n},n大于1且小于等于区域总数M×N;
序列累积子模块,用于分别对第n个区域的直方图序列{Hist[Value]n}进行累加操作,得到表示每个灰度值像素累积分布的递增的直方图累积序列{HistSum[Value]n},该序列中的每个元素 Hist[t]n为第n个区域内第t个灰度值的像素数量;
映射建立子模块,用于依据各区域的递增直方图累积序列计算得到对应的均衡化映射表:
其中,Value为0~255中的任意灰度值,{Mapping[Value]n}为第n个区域对应的均衡化映射表,{HistSum[Value]n}为第n个区域的直方图累积序列,AllPixelsn为第n个区域中的像素总数,Value_Low为预设的均衡化最小值,Value_High为预设的匀衡化最大值,较佳地,为了使均衡化处理后的各区域均具有最大的动态范围,Value_Low可以取0,Value_High可以取255;
均衡映射子单元,用于分别利用各区域对应的均衡化映射表,将该区域内的像素灰度值修正为Mapping(Lx,y),Lx,y表示每个区域中第x行第y列插值处理后的像素灰度值。
邻区域插值处理模块,用于分别对各区域与其四周相邻区域边缘处的像素灰度值进行插值处理。
实际应用中,邻区域插值处理模块可以分别将各区域划分为若干子块,并对位于不同区域的相邻子块进行插值处理。更具体地,如图2所示,可以分别将如实线所示各区域内等分为像素行列数相等的2×2共4个如虚线划分的子块,并对每4个对角拼接的相邻区域中,位于如图2中箭头所引出的对角拼接处的4个相邻子块进行插值处理,即对图2中每4个对角拼接处的相邻左上方子块UL、右上方子块UR、左下方子块BL、右下方子块BR进行插值处理。需要说明的是,对于边缘区域中未标示出UL、UR、BL、BR的子块,可以不进行处理、或采用任意适用于边缘的处理方式进行处理。
而对于4个对角拼接处的相邻UL、UR、BL、BR中每个子块的各像素灰度值,邻区域插值处理模块可以按照如下方式进行插值处理:
L′i,j=rowRevW×[colRevW×Mapping(Li,j)UL+colW×Mapping(Li,j)UR]
+rowW×[colRevW×Mapping(Li,j)BL+colW×Mapping(Li,j)BR]
其中,L′i,j表示所述每个子块中第i行第j列先后经直方图均衡化和插值处理后的像素灰度值,rowW、rowRevW分别为正反方向的行插值系数矩阵,colW、colRevW分别为正反方向的列插值系数矩阵,Mapping(Li,j)UL、Mapping(Li,j)UR、Mapping(Li,j)BL、Mapping(Li,j)BR分别为左上方字块、右上方子块、左下方子块、右下方子块中第i行第j列经直方图均衡化的像素灰度值;
上述各矩阵中的rows为每个子块的行数,cols为每个子块的列数。
利用上述正反方向的行插值系数矩阵rowW和rowRevW、以及正反方向的列插值系数矩阵colW、colRevW,即可使得各子块中越靠近拼接角顶端的像素插值系数越大、越远离拼接角顶端的像素插值系数越小。
且,由于每个子块中的像素在插值运算时,以需要使用、且仅使用一次自身所在行和列的其余像素,因而正反方向的行插值系数矩阵rowW和rowRevW中,只能有一个矩阵的插值系数选取1~rows、另一个则只能选取0~rows-1,正反方向的列插值系数矩阵colW、colRevW中,只能有一个矩阵的插值系数选取1~cols、另一个则只能选取cols-1,从而能够避免在插值处理时重复使用每个像素所在行和列的其余像素灰度值。
局部对比度调整模块,为可选的功能模块(在图3中以虚线框示出),用于对输入图像中所有像素灰度值进行局部对比度调整。
实际应用中,局部对比度调整模块可以在每个局部调整窗中按照如下方式进行局部对比度调整:
x′p,q=Avr+α(xp,q-Avr)
其中,x′p,q为局部调整窗中第p行第q列像素经局部对比度调整后的灰度值,xp,q为局部调整窗中第p行第q列像素先后经直方图均衡和插值处理后的灰度值,即可将邻区域插值处理模块得到的L′i,j作为xp,q,Avr为局部调整窗内所有像素经插值处理后的均衡灰度平均值,α为预设的调整系数、且α≥1。
如上可见,当α>1时,如果Avr>xp,q,则x′p,q>xp,q;如果Avr<xp,q,则x′p,q<xp,q,从而实现了细节增强、或者说主要起到局部调整窗内的局部对比度增强作用,但基本没有调节整幅输入图像的动态范围。但正是如此,才能够弥补分区域直方图均衡由于大幅提高整帧输入图像的视觉动态范围、而在一定程度上会导致边缘细节不够突出的缺陷,从而使得本实施例能够既调节动态范围并保留边缘细节信息、又能够增强局部对比度,从而使得增强的图像效果更佳。
较佳地,为了使得局部对比度调整更加细致,可以设置局部调整窗为3×3的窗口。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换以及改进等,均应包含在本发明的保护范围之内。