宝塔服务器面板,一键全能部署及管理,送你10850元礼包,点我领取

使用文章目录1场景2的原理3实现步骤4的效果5

1使用场景

如果一张图像太亮或太暗会导致图像对比度差,可以使用伽玛校正进行处理

2原理

如上图所示,是函数f(I )=I) I ) )f ) I )=I的曲线表示。

1 1 1时,为图中上方虚线曲线,图中=1/2.2 =1/2.2 =1/2.2

=1 =1 =1时,图中央的直线,即f(I )=If )=I )=I )=I ) ) ) ) ) ) ) )

1 1 1时,为图中下方曲线实线,图中=2.2 =2.2 =2.2

变成!=1 !=1 !=1时,对I进行非线性变换,从而使在0、1两端的变换最小,且在中间点的变换最大。 如果将图像中0-255像素的值归一化为0-1,则该变换会产生一定的效果。

1 )在 1 1 1情况下,图像中最亮的(1)或最暗的)像素保持不变,整体亮度上升,像素值的中间部分最有效,非常适合于处理比较暗的图像

2 )在 1 1 1的情况下,图像中最亮的(1)或最暗的)像素保持不变,整体亮度降低,像素值的中间部分最有效,非常适于处理比较亮的图像

最后x255就可以了

3安装步骤假设图像中有200个像素,则需要执行以下步骤来校正此像素。

1 .归一化:将像素值转换为0到1之间的实数。 算法如下:(I0.5 )/256这里包括一个除法和一个加法操作。 对于像素a的情形,对应于该情形的归一化值为0.783至203。

2 .使用事先补偿)式,求出将像素正规化后的数据的1/伽马作为指数的对应值。 这个步骤包括求指数的运算。 假设伽马值为2. 2,则1/伽马值为0. 454545,并且作为对标准化了的a值进行预补偿的结果,1/伽马值为0. 783203 ^0. 454545=0. 894872。

3 .逆正规化:将预补偿的实数值逆转换为0 ~ 255的整数值。 具体算法为: f*256 – 0. 5该步骤包括乘法和减法。 跟在前面的例子之后,将a的预补偿结果0. 894872代入上面的公式,其中,a的预补偿后的对应像素值为228,最后被发送给显示器的数据。

如上所述,直接用数学公式编程时,假设图像分辨率为800*600,为了对其进行伽马校正,需要执行48万个浮点数的乘法运算、除法运算、指数运算。 效率太低,完全得不到实时效果。

针对这种情况,提出了如果能够知道图像像素所取的值的范围、例如0 ~ 255间的整数,则图像中的任意一个像素值只能是0 ~ 255的256个整数中的任意一个的高速算法; 在已知伽马值的情况下,0到255之间的任何整数在经过“归一化、预补偿、逆归一化”操作后,对应的结果是唯一的,并且在0到255的范围内。

如前例所示,如果已知伽马值为2. 2并且像素a的原始值为200,则需要与伽马校正后的a对应的预补偿值为228。 根据上述原理,对0 ~ 255的每个整数进行事前校正操作,只需将对应的事前校正值保存在预先制作的伽马校正查找表LUT:Look Up Table中,就可以使用该表对任意像素值为0 ~ 255的图像进行伽马校正

实现4 # include iostream # include opencv2/opencv.hppusingnamespacecv; 匹配矩阵(匹配,浮动k因子) {unsigned char LUT[256]; for(intI=0; i 256; I ) ) floatf=(I0.5f )/255; f=(浮动) ) pow(f,kFactor ); lut [ I ]=saturate _ cast uchar (f * 255.0 f-0.5f ); }Mat resultImage=srcImage.clone (; if(srcimage.channels(==1) mat iterator _ uchar iterator=result image.begin uchar ); mat iterator _ uchariteratorend=result image.end uchar (; for (; 迭代器!=迭代器结束; 迭代器(* iterator=lut ) )迭代器); } else { mat iterator _ ve c3b iterator=result image.begin ve c3b (; mat iterator _ ve C3 biteratorend=result image.endv ec3b (; for (; 迭代器!=迭代器结束; iterator () iterator ) [0]=lut ) () iterator ) [0] ); //b (迭代器[1]=lut ) ) )迭代器) [1] ); //g (迭代器) (2)=lut ) () (迭代器) ) ); //r } }返回结果图像; ) 5彪形大汉来试试:

=1/2.2 =1/2.2 =1/2.2亮度提高效果