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网络爬虫功能的基本写法
Jan 28 Python
django中模板的html自动转意方法
May 27 Python
Python图片转换成矩阵,矩阵数据转换成图片的实例
Jul 02 Python
在Python中给Nan值更改为0的方法
Oct 30 Python
对Python3+gdal 读取tiff格式数据的实例讲解
Dec 04 Python
python区块及区块链的开发详解
Jul 03 Python
详解Python 4.0 预计推出的新功能
Jul 26 Python
Django中的静态文件管理过程解析
Aug 01 Python
基于python plotly交互式图表大全
Dec 07 Python
Pytest参数化parametrize使用代码实例
Feb 22 Python
学会用Python实现滑雪小游戏,再也不用去北海道啦
May 20 Python
python树莓派通过队列实现进程交互的程序分析
Jul 04 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
收音机发烧友应当熟知的100条知识
2021/03/02 无线电
PHP 中检查或过滤IP地址的实现代码
2011/11/27 PHP
iOS10推送通知开发教程
2016/09/19 PHP
详解php伪造Referer请求反盗链资源
2019/01/24 PHP
JavaScript具有类似Lambda表达式编程能力的代码(改进版)
2010/09/14 Javascript
到处都是jQuery选择器的年代 不了解它们的性能,行吗
2012/06/18 Javascript
jquery.cookie.js使用指南
2015/01/05 Javascript
jquery加载图片时以淡入方式显示的方法
2015/01/14 Javascript
Javascript中使用A标签获取当前目录的绝对路径方法
2015/03/02 Javascript
NodeJS的Promise的用法解析
2016/05/05 NodeJs
如何使用jquery实现文字上下滚动效果
2016/10/12 Javascript
js入门之Function函数的使用方法【新手必看】
2016/11/22 Javascript
基于Angular.js实现的触摸滑动动画实例代码
2017/02/19 Javascript
js简易版购物车功能
2017/06/17 Javascript
JavaScript实现多态和继承的封装操作示例
2018/08/20 Javascript
微信小程序用户授权,以及判断登录是否过期的方法
2019/05/10 Javascript
vue自定义指令实现仅支持输入数字和浮点型的示例
2019/10/30 Javascript
基于JavaScript实现简单的轮播图
2021/03/03 Javascript
24式加速你的Python(小结)
2019/06/13 Python
Python 获取windows桌面路径的5种方法小结
2019/07/15 Python
python基于gevent实现并发下载器代码实例
2019/11/01 Python
基于Python生成个性二维码过程详解
2020/03/05 Python
Marc O’Polo俄罗斯官方在线商店:德国高端时尚品牌
2019/12/26 全球购物
军训生自我鉴定范文
2013/12/27 职场文书
我们的节日清明节活动总结
2014/04/30 职场文书
学校工作推荐信范文
2014/07/11 职场文书
中华魂放飞梦想演讲稿
2014/08/26 职场文书
2014年小学数学工作总结
2014/12/12 职场文书
长城英文导游词
2015/01/30 职场文书
2015年优质护理服务工作总结
2015/04/08 职场文书
军事理论课感想
2015/08/11 职场文书
早上好问候语大全
2015/11/10 职场文书
导游词之茶卡盐湖
2019/11/26 职场文书
python 如何在 Matplotlib 中绘制垂直线
2021/04/02 Python
MySQL 如何设计统计数据表
2021/06/15 MySQL
Redis集群新增、删除节点以及动态增加内存的方法
2021/09/04 Redis