Photoshop入门学习之PS 图像调整算法——亮度调整
小标 2018-11-15 来源 : 阅读 2009 评论 0

摘要:本文主要向大家介绍了Photoshop入门学习之PS 图像调整算法——亮度调整,通过具体的内容向大家展现,希望对大家Photoshop入门学习有所帮助。

本文主要向大家介绍了Photoshop入门学习之PS 图像调整算法——亮度调整,通过具体的内容向大家展现,希望对大家Photoshop入门学习有所帮助。

<

亮度调整

非线性亮度调整:

对于R,G,B三个通道,每个通道增加相同的增量。

线性亮度调整:

利用HSL颜色空间,通过只对其L(亮度)部分调整,可达到图像亮度的线性调整。但是,RGB和HSL颜色空间的转换很繁琐,一般还需要浮点数的运算,不仅增加了代码的复杂度,更重要的是要逐点将RGB转换为HSL,然后确定新的L值,再将HSL转换为RGB,运行速度可想而知是很慢的。要想提高图像亮度线性调整的速度,应该从三方面考虑,一是变浮点运算为整数运算,二是只提取HSL的L部分进行调整,三是采用汇编代码,在Delphi中,当然是BASM。下面是按照这三方面考虑写的图像亮度线性调整代码:

L := (Max(R, Max(G,B)) + Min(R, Min(G, B))) div 2;

L没有采用通常的百分比表示,而是取值0 - 255,这样就不必要采用浮点数运算了。

下面代码主要完成2个功能,一是用以前的L值与RGB分别求出其HSL的HS部分,其公式用Pascal表示为:

if L > 128 then
begin
  rHS := (R * 128 - (L - 128) * 256) div (256 - L);
  gHS := (G * 128 - (L - 128) * 256) div (256 - L);
  bHS := (B * 128 - (L - 128) * 256) div (256 - L);
end else
begin
  rHS := R * 128 div L;
  gHS := G * 128 div L;
  bHS := B * 128 div L;
end;

二是用新的L值(老的L值加需要调整的亮度值(0 - 255))和上面求出的HS值计算出新的

RGB值,计算方法为: 
newL := L + Value - 128;
if newL > 0 then
begin
  newR := rHS + (256 - rHS) * newL div 128;
  newG := gHS + (256 - gHS) * newL div 128;
  newB := bHS + (256 - bHS) * newL div 128;
else begin
  newR := rHS + rHS * newL div 128;
  newG := gHS + gHS * newL div 128;
  newB := bHS + bHS * newL div 128;
end;

如此,一个像素点的线性亮度调整就基本完成了



Program:

clc;
clear all;
close all;
Image=imread('4.jpg');
Image=double(Image);
R=Image(:,:,1);
G=Image(:,:,2);
B=Image(:,:,3);
%%%% 求出原始图像亮度分量
I=(R+G+B)/3;
%%% 利用原始图像的亮度分量结合R,G,B求出HSL空间的H,S;
rHS=R;
gHS=G;
bHS=B;
[row, col]=size(I);
for i=1:row
    for j=1:col
        if(I(i,j)>128)
            rHS(i,j)=(R(i,j)*128-(I(i,j)-128)*256)/(256-I(i,j));
            gHS(i,j)=(G(i,j)*128-(I(i,j)-128)*256)/(256-I(i,j));
            bHS(i,j)=(B(i,j)*128-(I(i,j)-128)*256)/(256-I(i,j));
        else
            rHS(i,j)=R(i,j)*128/(I(i,j));
            gHS(i,j)=G(i,j)*128/(I(i,j));
            bHS(i,j)=B(i,j)*128/(I(i,j));
        end
    end
end
%%%% 然后求出新的亮度值
%%%% Increment: 亮度的调整增量(-255,255)
Increment=-100;
I_out=I+Increment-128;
%%%% 再利用新的亮度值结合H,S,求出新的R,G,B分量
R_new=R;
G_new=G;
B_new=B;
for i=1:row
    for j=1:col
        if(I_out(i,j)>0)
            R_new(i,j)=rHS(i,j)+(256-rHS(i,j))*I_out(i,j)/128;
            G_new(i,j)=gHS(i,j)+(256-gHS(i,j))*I_out(i,j)/128;
            B_new(i,j)=bHS(i,j)+(256-bHS(i,j))*I_out(i,j)/128;
        else
            R_new(i,j)=rHS(i,j)+rHS(i,j)*I_out(i,j)/128;
            G_new(i,j)=gHS(i,j)+gHS(i,j)*I_out(i,j)/128;
            B_new(i,j)=bHS(i,j)+bHS(i,j)*I_out(i,j)/128;
        end
    end
end
Image_new(:,:,1)=R_new;
Image_new(:,:,2)=G_new;
Image_new(:,:,3)=B_new;
imshow(Image/255);
figure, imshow(Image_new/255);    

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注常用软件Photoshop频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved