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 相关文章推荐
wxPython事件驱动实例详解
Sep 28 Python
python批量提交沙箱问题实例
Oct 08 Python
python批量替换多文件字符串问题详解
Apr 22 Python
Selenium定时刷新网页的实现代码
Oct 31 Python
对python自动生成接口测试的示例讲解
Nov 30 Python
基于python生成器封装的协程类
Mar 20 Python
django 通过URL访问上传的文件方法
Jul 28 Python
pytorch 使用加载训练好的模型做inference
Feb 20 Python
Python实现汇率转换操作
May 03 Python
python中有帮助函数吗
Jun 19 Python
python statsmodel的使用
Dec 21 Python
利用Python函数实现一个万历表完整示例
Jan 23 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获取某个目录大小的代码
2008/09/10 PHP
PHP的SQL注入过程分析
2012/01/06 PHP
如何利用预加载优化Laravel Model查询详解
2017/08/11 PHP
PHP实现财务审核通过后返现金额到客户的功能
2019/07/04 PHP
PHP中将一个字符串部分字符用星号*替代隐藏的实现代码
2019/09/08 PHP
基于Jquery的$.cookie()实现跨越页面tabs导航实现代码
2011/03/03 Javascript
常用的JavaScript验证正则表达式汇总
2013/11/26 Javascript
jQuery及JS实现循环中暂停的方法
2015/02/02 Javascript
JavaScript Length 属性的总结
2015/11/02 Javascript
JavaScript中Number对象的toFixed() 方法详解
2016/09/02 Javascript
Vue.js组件使用开发实例教程
2016/11/01 Javascript
利用vue写todolist单页应用
2016/12/15 Javascript
Bootstrap Search Suggest使用例子
2016/12/21 Javascript
基于JavaScript实现幸运抽奖页面
2020/07/05 Javascript
对angular 实时更新模板视图的方法$apply详解
2018/10/09 Javascript
vue+element实现图片上传及裁剪功能
2020/06/29 Javascript
nodejs中的异步编程知识点详解
2021/01/17 NodeJs
[00:36]DOTA2风云人物相约完美“圣”典 12月17日不见不散
2016/11/30 DOTA
py中的目录与文件判别代码
2008/07/16 Python
用tensorflow实现弹性网络回归算法
2018/01/09 Python
python批量爬取下载抖音视频
2019/06/17 Python
python队列原理及实现方法示例
2019/11/27 Python
python读取ini配置文件过程示范
2019/12/23 Python
python matplotlib imshow热图坐标替换/映射实例
2020/03/14 Python
python 元组的使用方法
2020/06/09 Python
Melissa香港官网:MDreams
2016/07/01 全球购物
在线购买廉价折扣书籍和小说:BookOutlet.com
2018/02/19 全球购物
巴西电子、家电、智能手机购物网站:Girafa
2019/06/04 全球购物
感恩小明星事迹材料
2014/05/23 职场文书
2015元旦标语横幅
2014/12/09 职场文书
法律进社区活动总结
2015/05/07 职场文书
2015年大学辅导员工作总结
2015/05/12 职场文书
办公室年度工作总结2015
2015/05/21 职场文书
农村房屋租赁合同(范本)
2019/07/23 职场文书
数据库连接池
2021/04/06 MySQL