python中PS 图像调整算法原理之亮度调整


Posted in Python onJune 28, 2019

亮度调整

非线性亮度调整:

对于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);

总结

以上所述是小编给大家介绍的python中PS 图像调整算法原理之亮度调整 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python中根据字符串调用函数的实现方法
Jun 12 Python
详细介绍Python的鸭子类型
Sep 12 Python
fastcgi文件读取漏洞之python扫描脚本
Apr 23 Python
用tensorflow实现弹性网络回归算法
Jan 09 Python
python实现校园网自动登录的示例讲解
Apr 22 Python
对python插入数据库和生成插入sql的示例讲解
Nov 14 Python
python自动化UI工具发送QQ消息的实例
Aug 27 Python
python实现大量图片重命名
Mar 23 Python
Django app配置多个数据库代码实例
Dec 17 Python
Python while true实现爬虫定时任务
Jun 08 Python
详解python实现可视化的MD5、sha256哈希加密小工具
Sep 14 Python
Python编程中Python与GIL互斥锁关系作用分析
Sep 15 Python
Python中的 is 和 == 以及字符串驻留机制详解
Jun 28 #Python
Python实现 PS 图像调整中的亮度调整
Jun 28 #Python
Python绘图Matplotlib之坐标轴及刻度总结
Jun 28 #Python
python启动应用程序和终止应用程序的方法
Jun 28 #Python
简单了解python高阶函数map/reduce
Jun 28 #Python
安装好Pycharm后如何配置Python解释器简易教程
Jun 28 #Python
关于 Python opencv 使用中的 ValueError: too many values to unpack
Jun 28 #Python
You might like
php读取文件内容至字符串中,同时去除换行、空行、行首行尾空格(Zjmainstay原创)
2012/07/31 PHP
php实现微信公众平台账号自定义菜单类
2014/12/02 PHP
PHP的swoole扩展安装方法详细教程
2016/05/18 PHP
php面向对象之反射功能与用法分析
2017/03/29 PHP
PHP实现在数据库百万条数据中随机获取20条记录的方法
2017/04/19 PHP
PHP后期静态绑定实例浅析
2018/12/21 PHP
CSS JavaScript 实现菜单功能 改进版
2008/12/09 Javascript
你的 mixin 真的兼容 ECMAScript 5 吗?
2013/04/11 Javascript
JS实现图片无间断滚动代码汇总
2014/07/30 Javascript
基于javascript实现tab切换特效
2016/03/29 Javascript
JS实现元素上下左右移动效果
2017/10/18 Javascript
JavaScript深入V8引擎以及编写优化代码的5个技巧
2019/06/24 Javascript
基于JavaScript实现留言板功能
2020/03/16 Javascript
vue+vant使用图片预览功能ImagePreview的问题解决
2020/04/10 Javascript
如何用JS模拟实现数组的map方法
2020/07/30 Javascript
探索浏览器页面关闭window.close()的使用详解
2020/08/21 Javascript
Python实现的查询mysql数据库并通过邮件发送信息功能
2018/05/17 Python
python简易远程控制单线程版
2018/06/20 Python
对python 判断数字是否小于0的方法详解
2019/01/26 Python
python SQLAlchemy的Mapping与Declarative详解
2019/07/04 Python
在pytorch中查看可训练参数的例子
2019/08/18 Python
python3 动态模块导入与全局变量使用实例
2019/12/22 Python
PyQt5高级界面控件之QTableWidget的具体使用方法
2020/02/23 Python
pycharm激活码快速激活及使用步骤
2020/03/12 Python
python如何遍历指定路径下所有文件(按按照时间区间检索)
2020/09/14 Python
python time()的实例用法
2020/11/03 Python
python tqdm实现进度条的示例代码
2020/11/10 Python
德国高尔夫商店:Golfshop.de
2019/06/22 全球购物
求职者应聘的自我评价
2013/10/16 职场文书
上课说话检讨书大全
2014/01/22 职场文书
开学典礼主持词
2014/03/19 职场文书
企业员工爱岗敬业演讲稿
2014/08/26 职场文书
大学本科生职业生涯规划书范文
2014/09/14 职场文书
教师学期个人总结
2015/02/11 职场文书
高中信息技术教学反思
2016/02/16 职场文书
用javascript制作qq注册动态页面
2021/04/14 Javascript