一、对比度增强算法AGCWD硬件化实现
2013年发表在TIP上的对比度增强算法AGCWD(Efficient contrast enhancement using adaptive gamma correction with weighting distribution)
2014年发表在IEEE Transactions on Image Processing的《A New Hardware-Efficient Algorithm and Reconfigurable Architecture for Image Contrast Enhancement》论文是对前文成果的硬件化实现
下面先介绍一下这个算法的原始版本。该算法本质上是一种自适应的gamma校正算法,其中,“自适应”是利用图像直方图信息来实现的。
假设X表示我们的输入图像,其亮度l的变化范围是lmin到lmax,那么这个算法一共分为5步来执行:
二、原始版本算法步骤:
假设X表示我们的输入图像,其亮度l的变化范围$l_{min}$和$l_{max}$,那么这个算法一共分为5步来执行:
2.1、Image Statistics Computation
图像$X(i,j)$,亮度灰阶I的动态范围是$l_{min}$和$l_{max}$,其中 $l_{min}$是最小的灰度阶,例如8bit数据,Imin最小为0,最大为255。统计图像的灰阶像素分布概率probability density function (PDF)。
$$ PDF(l) =\frac{n_{l}}{MN} $$
其中,MN是像素总个数,$n_{l}$是灰阶n对应的像素数。
2.2、Weighting Probability Density Function
利用cdf并应用归一化伽玛函数来修改变换曲线,而不会丢失可用的统计直方图,对前一步算出来的概率密度函数进行修改,加权分布(WD)函数也用于略微修改统计直方图,得到加权概率密度函数。
$$ PDF_{w}(l) =max(PDF)*(\frac{PDF(l)-min(PDF)}{max(PDF)-min(PDF)})^{\alpha} $$
较低的伽玛参数产生更显著的调整,$\alpha$可取[0.1,0.5]值,根据经验可以取0.5,让函数曲线更加平滑
2.3、Smoothed Cumulative Distribution Function
用$PDF_{w}(l)$计算cumulative distribution function (CDF) ,做归一化处理,利用第二步算出来的加权概率密度函数,求出平滑的累积分布函数
$$ CDF_{s}(l) =\sum_{l=l_{min}}^{l_{max}}\frac{PDF_{w}(l)}{\sum{PDF_{w}}} $$
2.4、Adaptive Gamma Correction
T(l)transform function,利用第三步的图像累积分布函数信息CDF,进行自适应的gamma校正。
$$ T(l) = (l_{max}-l_{min})*(\frac{l}{l_{max}-l_{min}})^{\gamma}
$$
$$ \gamma=1-CDF_{s}(l)*P $$
其中,P表示自适应参数,设置为1,取值范围[0.5,1]
2.5、Final Luminance Transformation
在映射函数T(l)映射函数中,最后一步就是对图像每个像素点的亮度值进行映射,就得到了对比度增强后的图像
$$ Y= {T (X(i, j))|∀X(i, j) ∈ X}。 $$
三、算法硬件移植优化
修改gamma的算法整体流程是比较简单的,其中涉及到一些计算过程对于硬件实现(FPGA逻辑实现 )来说是比较困难,尤其是步骤2和4中涉及到的非整数的求幂运算。另外,除法的实现也需要比较高的硬件成本。
因此,为了面向硬件实现,作者在文章《A New Hardware-Efficient Algorithm and Reconfigurable Architecture for Image Contrast Enhancement》对这个算法做出了一定修改。例如,对于步骤1中的除法,作者直接将分母去掉了,相当于就是在求图像的直方图。这个修改不会影响最后的结果,修改前后算出来的结果都是一样的。另外,步骤2、3、4中涉及到的除法运算和求幂运算,作者使用了近似的方法来求解。下面详细介绍一下这个近似的过程。
本文的改进算法,面向硬件实现,
3.1、修改公式2、4的非整数幂运算
为了降低中使用非整数基运算的变量幂运算的计算复杂度,修改公式2、4的非整数幂运算,将公式2简化为下式
$$ y=m*(\frac{x}{n})^{\gamma} $$
将上式重写为
$$ y=m*2^{log_{2}{(\frac{x}{n})^{\gamma}}} $$
再
$$ y=m*2^{\gamma({log_{2}{\frac{x}{n}}})} $$
$$ y=m*2^{\gamma({log_{2}x-log_{2}n})} $$
具有将非整数基计算简化为变量以二为基数的幂运算和以二为对数基数的计算。
下一步 如何在硬件上实现这个对数运算和指数运算
$$ y=m*(\frac{x}{n})^{\gamma} $$
上市,m,gamma为1的时候 ,为下式
$$ y=(\frac{x}{n}) $$
重写为下式
$$ y=2^{log_{2}{(\frac{x}{n})}} $$
$$ y=2^{({log_{2}x-log_{2}n})} $$
除法计算简化为以二为基数的可变幂运算,以及以二为对数的计算
3.2、硬件求解$log_2k$
通常的求解
$$ log_{2}k=p+log_{2}h,k\in[1,2^{p+1}) $$
$$ p=floor(log_{2}k) $$
p是实数正数,$log_{2}h$是小数部分,然后发现
$$ k = h2^p $$
$$ h=\frac{k}{2^p},h\in[1,2) $$
其中,p是寻找k中最大的非零数
我们已知了k和p,所以可以通过直接右移p位来计算h
$log2k$的求解就转变为了$log2h$的求解问题,这个h的定义域就在1和2之间
对于这个小区间的对数求解,作者使用了牛顿差分插值公式,将它简化成了一个只含乘法和加法运算的公式
为了实现较低的计算复杂度,我们使用牛顿分差插值公式,该公式在所需的区间内近似函数,将$log2h$的运算以下式近似公式代替。
$$ log_{2}h约= [(0.1519*h−1.02123)*h+3]*h−2.13\ h ∈ [1, 2) $$
3.3、硬件求解2^k
$$ 2^k,k\in[p,0) $$
将k分为p和h
$$ k=p+h $$
则
$$ h=k-p,h\in[0,1) $$
p是正实数,接着
$$ 2^k=2^p+2^h $$
且
$$ p=floor(k) $$
从牛顿差分插值公式中,我们可以找到2h的近似函数为:
$$ 2^h约=[(0.079*h + 0.2242)*h + 0.6967]*h + 0.999, \h ∈ [0, 1) $$
四、算法硬件化版本
4.1、Image Statistics Computation:
$$ PDF'(l) = n_{l} $$
$$ PDF'(l) = PDF(l)*MN $$
之前没有除以MN减少除法的应用,l是灰度阶的递进
nl表示输入图像的
4.2、Weighting Probability Density Function:
$$ PDF_{w}^{'}(l) =max(PDF^{'})*\frac{PDF^{'}(l)-min(PDF^{'})}{max(PDF^{'})-min(PDF)}^{\alpha} $$
alpha可取[0.1,0.5]值根据经验可以取0.5,让函数曲线更加平滑
$$ PDF_{w}^{'}(l) =max(PDF^{'})*2^{\beta} $$
$$ \beta=\alpha*{log_{2}[PDF^{'}(l)-min(PDF^{'})}]-{log_{2}[max(PDF^{'}(l))-min(PDF^{'})}] $$
4.3、Smoothed Cumulative Distribution Function
重写 公式3
$$ CDF_{s}(l) =\sum_{l=l_{min}}^{l_{max}}\frac{PDF_{w}(l)}{\sum{PDF_{w}}} $$
用新的数据改为
$$ CDF_{s}^{'}(l) =\frac{\sum_{l=l_{min}}^{l_{max}}PDF_{w}^{'}(l)}{\sum{PDF_{w}^{'}}} $$
根据
$$ y=\frac{x}{n}=2^{({log_{2}x-log_{2}n})} $$
上式再重写为
$$ CDF_{s}^{'}(l) =2^{(log_{2}(\sum_{l=l_{min}}^{l_{max}}PDF_{w}^{'}(l))-log_{2}(\sum{PDF_{w}^{'}}))} $$
4.4、Adaptive Gamma Correction:
$$ T(l) = (l_{max}-l_{min})*2^{\gamma(log_2{l}-log_2{(l_{max}-l_{min})})} $$
$$ \gamma=1-CDF_{s}^{'}(l)*P $$
P参数设置为1,参数范围[0.5,1]。
4.5、Final Luminance Transformation
在映射函数T(l)映射函数中,找对应的输出
$$ Y= {T (X(i, j))|∀X(i, j) ∈ X} $$