tone mapping曲线的本质是一个亮度映射函数,即横坐标(X 轴)是输入亮度,纵坐 标(Y 轴)是输出亮度。其作用是将输入图像的亮度映射到一个更窄的亮度范围,从而实现动态范围的压缩。

     Tone mapping中的对数函数曲线性质,主要取决于输入数据范围大小。如果输入数据相对于[0,65535]的输入数据范围比较小,比如8bit的输入数据,其对数函数的曲线将没有那么陡峭,输出较小的数值Yg,对高亮部分的压缩也比较小; 相反对于16bit输入数据其暗区曲线较陡峭,高亮部分压缩较大。

    如上图亮度映射曲线所示。Drc 根据tone mapping算法原理,硬件使用查找表的形式开放出相应的可调接口给到用户进行不同类型的tone mapping 亮度映射函数的设置,实现不同的DRC效果。DRC算法中还需要需要考虑到颜色还原、halo atrifact、noise suppression.的处理,以及tone mapping 处理之后的对比度增强处理,才能实现比较好的DRC效果。

    线性压缩和tone mapping压缩图像对比:

 

     左侧是Tone mapping效果图,右侧是线性压缩之后的效果图。可以看出,经过线性压缩之后的效果,要么高亮的部分完全过曝,较暗的部分完全看不清图像信息。

    选取要硬件实现的tone mapping算法时,需要兼顾色调映射的效果和算法复杂度。虽然专用硬件运算速度很快,但硬件运算的灵活性远不及软件运算。全局色调映射算法本质上是一条单增的映射曲线,硬件实现相对简单。但由于不同相邻照度值的像素点会映射至同一灰度值,局部对比度很低,画质下降十分明显,且单一的曲线很难适应各种场景。局部色调映射效果好,但算法复杂度较高,有些算法算法硬件化成本很高,有些算法甚至无法实现硬件化。所以有些DRC算法先是进行全局tone mapping,之后再进行局部对比度增强。

   tone mapping的曲线为非线性函数,一般来说,非线性函数的硬件实现方法有:用以下方法拟合tone mapping的压缩函数 比如log函数

  1. 进行泰勒级数展开,提取级数的前几个乘加项进行 Verilog 描述;
  2. 查找表法,权衡查找精度和硬件资源遍历变量的范围;
  3. 折线拟合法,通过将非线性函数进行分段表示,然后用一次函数对每段折线进行描述;
  4. 多次函数拟合法,这种方法是级数展开法和折线拟合法的折衷,即用二次或者三次函数去拟合分段的非线性函数;
  5. 坐标旋转数值计算方法(CORDIC, Coordinate Rotation Digital Computer),通过基本的移位与加法运算代替乘法运算,通过迭代的方式计算三角函数、开方、反三角、指数等运算。

实际实现的时候,大多数采用分段折线拟合的方式构建tone mapping算法所需要的曲线。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐