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使用新浪微博API发送微博的例子
Apr 10 Python
python返回昨天日期的方法
May 13 Python
在Python中处理字符串之isdecimal()方法的使用
May 20 Python
Python实现的RSS阅读器实例
Jul 25 Python
Python全局变量用法实例分析
Jul 19 Python
浅谈Python peewee 使用经验
Oct 20 Python
使用Python制作微信跳一跳辅助
Jan 31 Python
TensorFlow索引与切片的实现方法
Nov 20 Python
django-xadmin根据当前登录用户动态设置表单字段默认值方式
Mar 13 Python
matlab中二维插值函数interp2的使用详解
Apr 22 Python
python实现发送带附件的邮件代码分享
Sep 22 Python
python 自定义异常和主动抛出异常(raise)的操作
Dec 11 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
如何做到多笔资料的同步
2006/10/09 PHP
用PHP+java实现自动新闻滚动窗口
2006/10/09 PHP
php天翼开放平台短信发送接口实现方法
2014/12/22 PHP
PHP简单处理表单输入的特殊字符的方法
2016/02/03 PHP
thinkphp 框架数据库切换实现方法分析
2020/05/18 PHP
用JavaScript隐藏控件的方法
2009/09/21 Javascript
Jquery中增加参数与Json转换代码
2009/11/20 Javascript
JavaScript实现自己的DOM选择器原理及代码
2013/03/04 Javascript
浅析return false的正确使用
2013/11/04 Javascript
JavaScript中用toString()方法返回时间为字符串
2015/06/12 Javascript
基于Javascript实现返回顶部按钮
2016/02/29 Javascript
把普通对象转换成json格式的对象的简单实例
2016/07/04 Javascript
老生常谈JQuery data方法的使用
2016/09/09 Javascript
js手机号4位显示空格,银行卡每4位显示空格效果
2017/03/23 Javascript
Angularjs 与 bower安装和使用详解
2017/05/11 Javascript
Javascript实现找不同色块的游戏
2017/07/17 Javascript
JS实现json对象数组按对象属性排序操作示例
2018/05/18 Javascript
基于JavaScript获取url参数2种方法
2020/04/17 Javascript
最全vue的vue-amap使用高德地图插件画多边形范围的示例代码
2020/07/17 Javascript
用Python写的图片蜘蛛人代码
2012/08/27 Python
Python机器学习之决策树算法
2017/12/22 Python
Python多线程:主线程等待所有子线程结束代码
2020/04/25 Python
Python实现爬取并分析电商评论
2020/06/19 Python
马克华菲官方商城:Mark Fairwhale
2016/09/04 全球购物
学生实习自我鉴定
2013/10/11 职场文书
2014年党员整改措施范文
2014/09/21 职场文书
2014年审计工作总结
2014/11/17 职场文书
考研英语复习计划
2015/01/19 职场文书
小学毕业感言200字
2015/07/30 职场文书
防溺水安全教育主题班会
2015/08/12 职场文书
《风娃娃》教学反思
2016/02/18 职场文书
2019企业文化管理制度范本!
2019/08/06 职场文书
Python使用MapReduce进行简单的销售统计
2022/04/22 Python
分享node.js实现简单登录注册的具体代码
2022/04/26 NodeJs
MySQL数据库中的锁、解锁以及删除事务
2022/05/06 MySQL
利用Python实现翻译HTML中的文本字符串
2022/06/21 Python