请教自动色阶&色阶调整的算法和思路 今天小弟在使用PS的时候使用了自动色阶和色阶调整,很是羡慕,小弟也想亲自编程实现一下,其实色阶不是太难,不过PS里面的可选项属实很多,所以请高手不吝赐教,针对PS自动色阶和色阶调整,给出个算法或者思路,代码也可以.注意一般的色阶算法(傻瓜型的)就不用提供了.一经解决马上结帖,给大家多多UP.UP者也有分. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这是我在研究photoshop时找出的它们之间的关系,而且经过测试是正确的,试试:1.自动色阶公式: 首先换算出Histogram,并侦测出其最大值HistogramUp和最小值HistogramDown及两者之差HistogramDifer,则自动色阶公式为:在最大值和最小值边分别去掉整个图像总点数的5.5%,并以此作为新的最大值和最小值,且有(R/G/B-histogrambottom)*255.0/histogramdiffer;作为新的此点的值。 谢谢,FrankWind!!(),能不能说的再具体点?另外色阶调整的是否也能给出个算法或者公式之类的? 你有用过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的值。 太好了,太好了,请把代码发到[email protected] 或者[email protected]另外"整个图像总点数"是什么值?是整个图象的width*height*3?还是..?? 整个图像总点数就是图像的实际像素值,即width*height。 另外histogrambottom是如何得来的? 还是有点不明白,试验了一下您的算法,不过处理后的图象全是白色的(255),可能是我理解您的算法有误,最好还是发给我代码吧我的邮件地址是[email protected] [email protected] 能给我也发一份吗,我很感兴趣,学习学习。谢谢。[email protected] 能发给我一分吗? [email protected]谢谢!!!!!!!!!!!!!! 十分感谢frankwind11(),提前祝您新年快乐. OpenGL 错误 DeviceIoControl访问OID_802_11_BSSID_LIST老是失败,错误代码31,求高手指点 图片中 实现单文档多视图 问题 关于一个函数的小问题 关于试图分割的一个问题和一个算法的实现 求救:tree控件的滚动条周围区域刷新有问题 RTTI作用是什么?如何自己实现? 请问各位高手《windows程序设计》这本书该如何学习??? 求局域网内通过socks5/http代理方式访问Internet源代码 dll的初级问题 强烈建议设一个“最快进步排名榜” 如何将一个类的实现文件分成多个文件?
1.自动色阶公式:
首先换算出Histogram,并侦测出其最大值HistogramUp和最小值HistogramDown及两者之差HistogramDifer,则自动色阶公式为:在最大值和最小值边分别去掉整个图像总点数的5.5%,并以此作为新的最大值和最小值,且有(R/G/B-histogrambottom)*255.0/histogramdiffer;作为新的此点的值。
另外色阶调整的是否也能给出个算法或者公式之类的?
然后沿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的值。
另外"整个图像总点数"是什么值?是整个图象的width*height*3?还是..??
可能是我理解您的算法有误,最好还是发给我代码吧
我的邮件地址是[email protected] [email protected]
谢谢!!!!!!!!!!!!!!