PS里面色阶(LEVEL)调整是如何实现的?(急!)

lhyccnu 2003-08-19 02:17:18
色阶从0-255调到0-234画面为什么会变亮,
以及这种调整的原理是什么,
怎么来实现呢,
有源代码就更好了,
hyliu19_cn@sina.com
...全文
510 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzwu 2003-08-22
  • 打赏
  • 举报
回复
hyliuwuhee(hyliuwuhee):

这里牵涉到一些情况,需要利用近似计算,以下是我主观上认为可行的做法:

当 highlight 被定为 234 时, 亮度要求增加的比例为k=255/234

考察每个像素的亮度i,

i = 0.299R + 0.587G + 0.114B

根据i的大小来确定R,G,B的改变方式:

1. 若i<=234,且右边的R,G,B也都<=234时,把上式右边的R,G,B各乘以k.
这时左边的亮度i也就能改变为i'=k*i.

2. 若i<=234,但右边的R,G,B中某一分量x>234,这时如将右边的R,G,B乘以k,则
大于234的分量乘后的结果会溢出(>255),是不允许的. 所以这时应修改k,
即只能根据x来计算k: k=255/x,然后再来修改每个分量

3. 若i>234,则要根据这一象素的具体i,以及R,G,B分量的最大值x来确定k,
k = min(255/i, 255/x)
只有选择这样的K来乘,才能使分量的新值和亮度的新值都不超出255.
lhyccnu 2003-08-21
  • 打赏
  • 举报
回复
to zzwu:
你能不能具体说说呢,
比如PS中它是可以在RGB中调这个0-255的值,
我现在要编程对24位进行调整,
已得到一个点的R,G,B三个分量,
它的这个亮度值怎么计算,要转换到HLS空间?
还是对分别对RGB三个分量进行上述的线性转换(试了以后不对呀)
如果不麻烦的话,
请你写一点代码给我参考一下,
谢谢!
zzwu 2003-08-20
  • 打赏
  • 举报
回复
24位中,RGB分量各8位,其值也是0-255. 当亮度(或明度)增加时,让RGB分量和它同样增加就可以了.
lhyccnu 2003-08-20
  • 打赏
  • 举报
回复
在24位真彩图上在对每个点的灰度进行上述线性变换以后,
如何再来确定每一点的RGB变化呢
zzwu 2003-08-19
  • 打赏
  • 举报
回复
要了解0-255调到0-234时,为什么会变亮,就要了解"0-255到0-234"是如何调的.

实际上,这里的数值234称为highlight值,它代表要变成最亮值(=255)的最小亮度值,也就是说,原来灰度为234-255的象素点,亮度都将被改变为255的亮度,且原来0-233的象素点被线性地扩展成0-255,所以,整个地变亮了.

根据这一解释,不难自己列出亮度变换的公式,并进一步确定每一点的RGB的变化.

4,445

社区成员

发帖
与我相关
我的任务
社区描述
图形图像/机器视觉
社区管理员
  • 机器视觉
  • 迪菲赫尔曼
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧