我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:大家发高手网 > 对比度操纵 >

VB图像处理之图像的亮度对比度调整

归档日期:06-20       文本归类:对比度操纵      文章编辑:爱尚语录

  前面一定也有很多人写过这样的文章了,但是想把我的这个系列作一个完整的小结,我就再罗嗦一番了。

  还是以24位色图像为例子,每种色彩都可以用0-255,一共256种深度来表示。如果我们把它画在一个二维坐标上,正好是一条直线。

  比如我们将像素的色深作为横坐标,输出色深作为纵坐标的画,正好是一条经过原点(0,0)的45度斜线。

  如图中直线度,表示它的对比度正好为1。那么很容易就可以写出它的直线方程:Out = In * 1 ,系数1就是对比度的概念如果把条直线加上一个偏移量变成B,那么它的直线方程就成为:Out = In * 1 + (ab) 偏移量(ab)就是亮度的增量。

  只要有初中的代数知识就很容易看出它满足一条直线方程:Y= A * X + B。

  但是,我们这里要处理的情况稍微有些不同,在图像处理中,对比度和亮度要分别对待。不能因为改变而改变亮度,因为我们习惯上把灰色(127,127)这一点作为中心点。比如,我们加大了对比度,原来的直线A就变成如直线D所表示的,在改变了对比度的同时,也增加了亮度(ab),而我们心目中的变化应该是入直线C那样。也就是说,我们把(127,127)这一点映射成了坐标系的原点。

  那么我们就要把原来的直线公式修改成:Y=( X - 127 ) * A + B + 127。A表示对比度,B表示亮度增量。我们验证一下:只要亮度增量 B=0,无论怎么改变对比度 A,该直线),也就是说改变对比度的同时,亮度没有改变。

  慢着,再多做一步吧。我们是在遍程序,不是在做初中代数考试。这多出来的一步将使你的程序的执行效率更高一些。

  或许你又会说我这是多此一举,请聪明的读者想像一下:在一个普通图片做亮度对比度运算的时候,我们上面这些小小的变化将带来什么样的效率提升。假设一张图片大小是1027*768

  那么,上述这个公式就需要计算786432 * 3 = 2359296 次,经过这么多次运算的放大,哪怕是小小的一个重复计算都将浪费很长的时间。

  因为在调用子程序的时候亮度和对比度都已经确定,那么B = B -127 * A +127这一步就可以放在循环的外面先作好。从而减少了程序的运算时间。

  因为在亮度对比度的过程中会出现计算值超出(0,255)的范围,因此需要对它做一个判断,把结果限定在这个范围之内。

  这个程序很简单,可以根据给定的红绿蓝的亮度偏移量和对比度参数计算。由于把三种颜色的6个参数分开,也可以只调整单独的一种颜色。

  还有一个好处,就是当你将对比度参数设为负值的时候,可以直接得到原图片的反色输出。(这也是将前面的坐标系原点移动到127这一点的一个好处。)

  作为这个系列的最后一篇文章,我在我的程序ImageCast中所用到的所效果的算法和主要代码都已经贴出来了。也算是对自己对大家的一个小小交待吧。

  * 网友发言均非本站立场,本站不在评论栏推荐任何网店、经销商,谨防上当受骗!

  更多

  【喂你播】任正非:制止瞎喊口号,不要煽动民族情绪;大疆回应美国国土安全部数据质疑

  机械师T90 Plus评测:九代酷睿+17.3英寸大屏“巨幕微边”发动

  华为自研操作系统Project Z曝光 替代安卓 打通PC、手机、车载等

本文链接:http://buffaloruse.net/duibiducaozong/631.html