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之用while来循环
Oct 02 Python
Python三元运算实现方法
Jan 12 Python
Python自动化测试ConfigParser模块读写配置文件
Aug 15 Python
深入理解Python对Json的解析
Feb 14 Python
python3使用flask编写注册post接口的方法
Dec 28 Python
pandas dataframe添加表格框线输出的方法
Feb 08 Python
深入解析Python小白学习【操作列表】
Mar 23 Python
Python代码使用 Pyftpdlib实现FTP服务器功能
Jul 22 Python
python 字典 setdefault()和get()方法比较详解
Aug 07 Python
PyQt+socket实现远程操作服务器的方法示例
Aug 22 Python
感知器基础原理及python实现过程详解
Sep 30 Python
Python unittest discover批量执行代码实例
Sep 08 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 ajax 静态分页过程形式
2011/09/02 PHP
基于在生产环境中使用php性能测试工具xhprof的详解
2013/06/03 PHP
遭遇php的in_array低性能问题
2013/09/17 PHP
PHP设计模式之组合模式定义与应用示例
2020/02/01 PHP
Thinkphp 框架扩展之数据库驱动常用方法小结
2020/04/23 PHP
picChange 图片切换特效的函数代码
2010/05/06 Javascript
jquery对象和DOM对象的区别介绍
2013/08/09 Javascript
jQuery实现的个性化返回底部与返回顶部特效代码
2015/10/30 Javascript
js密码强度实时检测代码
2016/03/02 Javascript
学习使用bootstrap3栅格系统
2016/04/12 Javascript
Summernote实现图片上传功能的简单方法
2016/07/11 Javascript
Javascript从数组中随机取出不同元素的两种方法
2016/09/22 Javascript
JavaScript中定时控制Throttle、Debounce和Immediate详解
2016/11/17 Javascript
浅析 NodeJs 的几种文件路径
2017/06/07 NodeJs
node中modules.exports与exports导出的区别
2018/06/08 Javascript
解决Vue+Electron下Vuex的Dispatch没有效果问题
2019/05/20 Javascript
使用layui日期控件laydate对开始和结束时间进行联动控制的方法
2019/09/06 Javascript
Vue实现星级评价效果实例详解
2019/12/30 Javascript
javascript实现搜索筛选功能实例代码
2020/11/12 Javascript
wxPython之解决闪烁的问题
2018/01/15 Python
Python中list的交、并、差集获取方法示例
2019/08/01 Python
Python3.7 pyodbc完美配置访问access数据库
2019/10/03 Python
Python 制作查询商品历史价格的小工具
2020/10/20 Python
python爬虫今日热榜数据到txt文件的源码
2021/02/23 Python
解锁canvas导出图片跨域的N种姿势小结
2019/01/24 HTML / CSS
审核会计岗位职责
2013/11/08 职场文书
最新创业融资计划书
2014/01/19 职场文书
《明天,我们毕业》教学反思
2014/04/24 职场文书
纪念九一八事变演讲稿:勿忘国耻
2014/09/14 职场文书
2014年安置帮教工作总结
2014/12/11 职场文书
2015年师德师风自我评价范文
2015/03/05 职场文书
销售开票员岗位职责
2015/04/15 职场文书
合同纠纷调解书
2015/05/20 职场文书
医院中层管理人员培训心得体会
2016/01/11 职场文书
2019最新版劳务派遣管理制度
2019/08/16 职场文书
浅谈MySql update会锁定哪些范围的数据
2022/06/25 MySQL