图像编辑之对比度调整 亮度对比度的算法公式

                     继续图片编辑系列的文章,这次讲讲对图片对比度的调整方法。开篇先闲话一番,讲讲一些相关的东西。先是TinyImage的进度,因为某次莫名其妙用另外一个文件把一个很重要的头文件给覆盖了,导致出来一堆编译错误,改了大半个小时,于是为了保险起见赶紧整了个SVN。其次是本来这个周想写写色彩平衡的东西—-上星期主要在研究GIMP中关于色彩平衡实现的代码,但是因为各种原因:周六一大早折腾起来买票,搞得一天都没精神,周日又要去周老师家腐败,没啥心思整理相应的东西,所以先讲讲简单的东西。

    对比度,具体的概念解释可以参考Wiki或者百度百科。简单的讲对比度反应了图片上亮区域和暗区域的层次感。而反应到图像编辑上,调整对比度就是在保证平均亮度不变的情况下,扩大或缩小亮的点和暗的点的差异。既然是要保证平均亮度不变,所以对每个点的调整比例必须作用在该值和平均亮度的差值之上,这样才能够保证计算后的平均亮度不变,故有调整公式:

                                  Out = Average + (In – Average) * ( 1 + percent)

其中In表示原始像素点亮度,Average表示整张图片的平均亮度,Out表示调整后的亮度,而percent即调整范围[-1,1]。证明这个公式的正确性相当简单:

设图上有n个像素点,各个点亮度为Ai,平均亮度为A,变化率为alpha,则有:

CodeCogsEqn (1)

    但是实际处理中,并没有太多的必要去计算一张图的平均亮度:一来耗时间,二来在平均亮度上的精确度并不会给图像的处理带来太多的好处—-一般就假设一张图的平均亮度为128,即一半亮度,而一张正常拍照拍出来的图平均亮度应该是在[100,150]。在肉眼看来两者基本没有任何区别,而如果真实地去计算平均亮度还会带来很大的计算量。如下:

通过计算平均亮度来调整对比度

01 void    AdjustContrastUsingAverageThreshold(TiBitmapData& bitmap,doublelevel)
02 {
03   
04     TINYIMAGE_ASSERT_VOID(level >= -1.0 && level <= 1.0);
05   
06     doublerThresholdSum = 0,gThresholdSum = 0,bThresholdSum = 0;
07     doubledetal= level + 1;
08     intwidth    = bitmap.GetWidth();
09
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值