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之再深点,更懂list
Sep 20 Python
python多重继承新算法C3介绍
Sep 28 Python
python持久性管理pickle模块详细介绍
Feb 18 Python
利用Python中的输入和输出功能进行读取和写入的教程
Apr 14 Python
在windows下快速搭建web.py开发框架方法
Apr 22 Python
python 中if else 语句的作用及示例代码
Mar 05 Python
django使用admin站点上传图片的实例
Jul 28 Python
Python的bit_length函数来二进制的位数方法
Aug 27 Python
python+selenium+PhantomJS抓取网页动态加载内容
Feb 25 Python
解决jupyter notebook import error但是命令提示符import正常的问题
Apr 15 Python
Python Merge函数原理及用法解析
Sep 16 Python
python Polars库的使用简介
Apr 21 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模板引擎SMARTY
2006/10/09 PHP
php简单实现数组分页的方法
2016/04/30 PHP
php魔术方法功能与用法实例分析
2016/10/19 PHP
PHP模拟http请求的方法详解
2016/11/09 PHP
PHP+MySQL使用mysql_num_rows实现模糊查询图书信息功能
2018/05/31 PHP
JavaScript使用prototype定义对象类型(转)[
2006/12/22 Javascript
Extjs学习笔记之一 初识Extjs之MessageBox
2010/01/07 Javascript
js继承的实现代码
2010/08/05 Javascript
jquery实现的仿天猫侧导航tab切换效果
2015/08/24 Javascript
js实现iframe框架取值的方法(兼容IE,firefox,chrome等)
2015/11/26 Javascript
jQuery DateTimePicker 日期和时间插件示例
2017/01/22 Javascript
浅谈angularJS的$watch失效问题的解决方案
2017/08/11 Javascript
vue的状态管理模式vuex
2017/11/30 Javascript
js中bool值的转换及“&&”、“||”、 “!!”详解
2017/12/21 Javascript
100行代码实现一个vue分页组功能
2018/11/06 Javascript
Vuex 使用 v-model 配合 state的方法
2018/11/13 Javascript
JavaScript静态作用域和动态作用域实例详解
2019/06/17 Javascript
vue项目中实现缓存的最佳方案详解
2019/07/11 Javascript
js实现图片无缝循环轮播
2019/10/28 Javascript
原生js实现文件上传、下载、封装等实例方法
2020/01/05 Javascript
Python字符串格式化的方法(两种)
2017/09/19 Python
Python 在字符串中加入变量的实例讲解
2018/05/02 Python
对python append 与浅拷贝的实例讲解
2018/05/04 Python
使用 Visual Studio Code(VSCode)搭建简单的Python+Django开发环境的方法步骤
2018/12/17 Python
Python Matplotlib库安装与基本作图示例
2019/01/09 Python
如何在Win10系统使用Python3连接Hive
2020/10/15 Python
海量信息软件测试笔试题
2015/08/08 面试题
新领导上任欢迎词
2014/01/13 职场文书
理工类毕业自我鉴定
2014/02/20 职场文书
项目合作意向书范本
2014/04/01 职场文书
公司总经理助理岗位职责
2014/07/09 职场文书
2014政府领导班子对照检查材料思想汇报(3篇)
2014/09/26 职场文书
钱塘江大潮导游词
2015/02/03 职场文书
2016年感恩节寄语
2015/12/07 职场文书
2016读书月活动心得体会
2016/01/14 职场文书
MySQL 视图(View)原理解析
2021/05/19 MySQL