图像亮度调整分为非线性和线性两种方法。    非线性图像亮度是将图像像素的R、G、B分别加上或减去某个值,其优点是代码简单,亮度调整速度快;缺点是图像信息损失较大,调整过的 图像显得平淡,无层次感(可参见《GDI+ 在Delphi程序的应用 -- 调整图像亮度》)。    线性图像亮度一般是将图像像素的RGB转换为HSL(HSV)等颜色空间,对L(V)部分进行增减调整后,再转换为RGB颜色空间,优点是调整过图像层次感很强;缺点是代码较复杂,调整速度慢,而且当图像亮度增减量较大时有很大的失真(可参见《GDI+ 在Delphi程序的应用 -- 线性调整图像亮度》)。    针对上面两种方法的优缺点,本人参照Photoshop的对比度、饱和度调整原理(可参见本人的有关文章),对图像亮度调整方法进行了改进,经测试,效果还不错:主要有不失真调整范围宽、有较好的层次感、尽可能减少图像信息损失量、运算速度较快及代码也不太复杂等。下面是用RGB非线性亮度调整(中)、HSL线性亮度调整(右)以及本文介绍的改进线性亮度调整方法(左)对同一照片的调整结果贴图:原图:
具体算法公式和代码实现请见我的BLOG文章,文章前面是C/C++实现代码,后面是Delphi实现代码,欢迎大家提出意见:
改进的图像线性亮度调整方法

解决方案 »

  1.   

    优势在哪?这样的代码应该有很多吧?
    不懂为什么一部分要用C++,一部分Delphi?
      

  2.   

    不知道楼主的意思是不是(实际上是)对RGB分量按照亮度较少的比例按照对应的比例减少
      

  3.   

    我觉得设计一条r曲线可能比较好,对于亮度低的区域,减少的亮度少,亮度高的减少的大一点,直接的RGB减去一个值不是很好,因为背景的亮度(RGB)本来就比较小,随便一减,可能全是0了,背景全是黑的了,先做个同态滤波不知道能不能好一点,学习之,,,
      

  4.   

    非线性图像亮度是将图像像素的R、G、B分别加上或减去某个值,其优点是代码简单,...
    ===========================================
    线性和非线性概念上不是这个样子的,二者都可以进行和不进行色彩空间变换。
      

  5.   


    所谓线性和非线性说白了,就是前者为加减、后者为乘除。所以本文对非线性亮度的解释并没有错,而线性亮度我只是说“线性图像亮度一般是将图像像素的RGB转换为HSL(HSV)等颜色空间”,注意这里的“一般”,值得是常用作法,并没有说一定要“进行色彩空间变换”,比如本文的标题是“改进的图像线性亮度调整算法”,但并没有“进行色彩空间变换”。
    所以请不要误解。
      

  6.   

       顶
    http://www.xinkeor.cn/?11604-1.html
      

  7.   

    /255和>>8从严格意义上来说并不是一样的,所以你这里的速度优化不能叫做优化。一般a/255 用移位来表示为:  (a>>8+a)>>8  
    后者的计算速度和前者基本上一样了。
      

  8.   

    谢谢捧场!不过要说明的是:我的文章里并没认为“/255和>>8”“是一样的”,也没说这是“速度优化”,而只是说“为了加快运算速度”,而采用“的简化原理”。
      

  9.   

    请问,photoshop中亮度调整算法到底是哪种啊? 多谢了!