毕设—高动态范围图像渲染算法之基于亮度分区与引导滤波的色调映射技术(六)

顾名思义,该算法就是先对亮度进行分区,对不同区域的亮度值进行压缩,把压缩后的图像作为引导图像,对原图像进行引导滤波,本项目的引导滤波器使用的Open CV函数库内的函数。
亮度分区示意图:
在这里插入图片描述使用上方的两个分区函数,找到分区界限,LA、LB。其中权重α取值如图:
在这里插入图片描述
然后把亮度分成三个区域[Lmin,LA]、[LA,LB]、[LB,Lmax],对这三个区域分别进行伽马校正。在校正过程中,会出现低亮度区域的最大值高于高亮度区域最小值的问题,所以伽马系数的取值要谨慎,通过大量实验最后得出当γ取值为5、1.25、0.83时效果最佳。
引导滤波示意图:
在这里插入图片描述本算法参考的文献是:《一种亮度分区和导向滤波相结合的色调映射算法

实现该算法共分为五步:

第一步:色彩空间转化和归一化

第二步:计算分区界限

Yav = (Ysum/(1.0*rows*cols));//求取对数平均值

//亮度分区计算
double key=(Yav-log(Ymin+a))/(log(Ymax + a)-log(Ymin + a));
LD=Ymax-(0.9+0.1*key)*(Ymax-Ymin);
LB=Ymin+(0.6+0.4*(1-key))*(Ymax-Ymin);

第三步:分区进行伽马校正

rateX=xyz[i][j].x/(xyz[i][j].x+xyz[i][j].y+xyz[i][j].z);
rateY=xyz[i][j].y/(xyz[i][j].x+xyz[i][j].y+xyz[i][j].z);

//对不同亮度区域进行伽马校正
if(xyz[i][j].y>=Ymin&&xyz[i][j].y<LD)xyz[i][j].y=pow(xyz[i][j].y,r1);
if(xyz[i][j].y>=LD&&xyz[i][j].y<=LB)xyz[i][j].y=pow(xyz[i][j].y,r2);
if(xyz[i][j].y>LB&&xyz[i][j].y<=Ymax)xyz[i][j].y=pow(xyz[i][j].y,r3);

//还原x,y,z的比率
xyz[i][j].x=xyz[i][j].y/rateY*rateX;
xyz[i][j].z=xyz[i][j].y/rateY*(1-rateX-rateY);

第四步:进行引导滤波

//引导滤波
resultImage = guidedFilter(tempImage, out_image, 9, 0.01);//对分通道分别进行导向滤波,半径为1、3、5...等奇数  

第五步:融合(使用的是库函数,也可以用其他方法)

//图像融合
resultImage.convertTo(resultImage, CV_8UC3,255);//将分通道转换成整数型数据
addWeighted(out_image, 0.5, resultImage, 0.5, 0, dst);

算法效果:
在这里插入图片描述在这里插入图片描述总体效果:会出现色彩翻转的现象,比直方图均衡化出现的还明显。亮度较低的图像处理后,亮度还是较低,亮度较高的图像处理后,亮度较亮。总体来说,亮度处理一般,对比度改善的很好,但会出现翻转。

最近好多人找我要代码,代码在这里,我就不发邮箱了

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值