今天小弟在使用PS的时候使用了自动色阶和色阶调整,很是羡慕,小弟也想亲自编程实现一下,其实色阶不是太难,不过PS里面的可选项属实很多,所以请高手不吝赐教,
针对PS自动色阶和色阶调整,给出个算法或者思路,代码也可以.注意一般的色阶算法(傻瓜型的)就不用提供了.一经解决马上结帖,给大家多多UP.UP者也有分.

解决方案 »

  1.   

    这是我在研究photoshop时找出的它们之间的关系,而且经过测试是正确的,试试:
    1.自动色阶公式:
          首先换算出Histogram,并侦测出其最大值HistogramUp和最小值HistogramDown及两者之差HistogramDifer,则自动色阶公式为:在最大值和最小值边分别去掉整个图像总点数的5.5%,并以此作为新的最大值和最小值,且有(R/G/B-histogrambottom)*255.0/histogramdiffer;作为新的此点的值。
      

  2.   

    谢谢,FrankWind!!(),能不能说的再具体点?
    另外色阶调整的是否也能给出个算法或者公式之类的?
      

  3.   

    你有用过photoshop,那么你在菜单的image选项中就有一个Histogram项,其算法就是进行对图像中的所有点按0~255阶进行统计(也就是每阶共有多少个点). 
      然后沿0阶->255阶方向找到最小点HistogramDown(所谓最小点即第一个在某一阶上有点数出现的阶数,如在0阶时为0点,1阶时为0点,2阶也为0点,3阶为10点,4阶为5点,...,那么最小点应为3阶), 同样最大值则是反方向从255阶开始第一个在某一阶上有点数出现的阶数HistogramUp。然后从最小点开始选择整个图像总点数的5.5%的那一点做为新的最小点HistogramDown,再沿相反方向(即255阶->0阶方向)选择整个图像总点数的5.5%的那一点做为新的最大点HistogramUp,那么两者之差为HistogramDifer。
       再对每一像素点根据公式(R/G/B-histogrambottom)*255.0/histogramdiffer 算出此像素点的新值。 如还有不明白,我这有源代码,给我你的信箱,我把代码给你。//////////////////////////////////////////////////////////
    色阶调整比较复杂,因为时间关系,我仅知道灰点的算法:
        设置灰点计算公式:
          取样点的R,G ,B三色的平均值作为此点的灰值Vavg,并通过公式:Vavg=pow(X/255,1/gamma)*255;算出gamma. 注:其中X为R,G或B,且gamma也为对应的R,G或B的gamma.再以此gamma分别算出每点的最终R,G和B的值。
      

  4.   

    太好了,太好了,请把代码发到[email protected] 或者[email protected]
    另外"整个图像总点数"是什么值?是整个图象的width*height*3?还是..??
      

  5.   

    整个图像总点数就是图像的实际像素值,即width*height。
      

  6.   

    另外histogrambottom是如何得来的?
      

  7.   

    还是有点不明白,试验了一下您的算法,不过处理后的图象全是白色的(255),
    可能是我理解您的算法有误,最好还是发给我代码吧
    我的邮件地址是[email protected] [email protected]
      

  8.   

    能给我也发一份吗,我很感兴趣,学习学习。谢谢。[email protected]
      

  9.   

    能发给我一分吗?   [email protected]
    谢谢!!!!!!!!!!!!!!
      

  10.   

    十分感谢frankwind11(),提前祝您新年快乐.