本算法是我第二个实现的色调映射算法,因为我参考的这篇论文是中文论文,容易看懂。。。所以先实现了它。在进行介绍算法之前我先给大家推荐一篇博客,他把直方图均衡化介绍了很详细(链接https://blog.youkuaiyun.com/Enjoying_Science/article/details/51165295?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.nonecase)。
参考文献是《一种基于直方图均衡化的色调映射方法 》(我有论文,但是不知道如何点击下载,希望有人可以教教我),这个文献详细介绍了算法流程,与操作步骤。但是他的过程有些繁琐,而且算法似乎针对的是RGB图像,所以我对其进行了一点点修改。
本算法分为五步:
第一步:色彩空间转化+归一化
//转化成XYZ表示,虽然缩放只缩放Y,但是为了后面进行转化,这里把x,z也求出来;
xyz[i][j].x=Mrgb[0][0]*RGB[0]+Mrgb[1][0]*RGB[1]+Mrgb[2][0]*RGB[2];
xyz[i][j].y=Mrgb[0][1]*RGB[0]+Mrgb[1][1]*RGB[1]+Mrgb[2][1]*RGB[2];
xyz[i][j].z=Mrgb[0][2]*RGB[0]+Mrgb[1][2]*RGB[1]+Mrgb[2][2]*RGB[2];
double rateX=xyz[i][j].x/(xyz[i][j].x+xyz[i][j].y+xyz[i][j].z);
double rateY=xyz[i][j].y/(xyz[i][j].x+xyz[i][j].y+xyz[i][j].z);
xyz[i][j].y=pow(xyz[i][j].y,r);
if(strstr(fileName,".hdr")!=NULL)
xyz[i][j].y=atan(xyz[i][j].y)*2/PI;
else
xyz[i][j].y/=255.0;
//还原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);
第二步:统计直方图
//统计对应色阶的像素点个数
NumPixel[(int)(xyz[i][j].y*255+0.5)]++;
第三步:计算分布函数
for(int i=0;i<256;i++)
{
//计算分布函数
if(i==0)RatePixel[i]=1.0*NumPixel[i]/(rows*cols);
else RatePixel[i]=1.0*NumPixel[i]/<

最低0.47元/天 解锁文章
1911





