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文档生成工具pydoc使用介绍
Jun 02 Python
Django中对通过测试的用户进行限制访问的方法
Jul 23 Python
Python利用itchat对微信中好友数据实现简单分析的方法
Nov 21 Python
python opencv设置摄像头分辨率以及各个参数的方法
Apr 02 Python
python numpy 一维数组转变为多维数组的实例
Jul 02 Python
对tf.reduce_sum tensorflow维度上的操作详解
Jul 26 Python
python 同时读取多个文件的例子
Jul 16 Python
Windows上安装tensorflow  详细教程(图文详解)
Feb 04 Python
Python实现上下文管理器的方法
Aug 07 Python
Scrapy爬虫文件批量运行的实现
Sep 30 Python
python 基于selenium实现鼠标拖拽功能
Dec 24 Python
python四种出行路线规划的实现
Jun 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
关于PHP中Object对象的笔记分享
2011/06/28 PHP
yii使用activeFileField控件实现上传文件与图片的方法
2015/12/28 PHP
php自定义函数br2nl实现将html中br换行符转换为文本输入中换行符的方法【与函数nl2br功能相反】
2017/02/17 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
2020/02/21 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
2020/02/27 PHP
[推荐]javascript 面向对象技术基础教程
2009/03/03 Javascript
AeroWindow 基于JQuery的弹出窗口插件
2011/06/27 Javascript
解析javascript 实用函数的使用详解
2013/05/10 Javascript
JS随机生成不重复数据的实例方法
2013/07/17 Javascript
jQuery点击自身以外地方关闭弹出层的简单实例
2013/12/24 Javascript
使用forever管理nodejs应用教程
2014/06/03 NodeJs
基于JavaScript实现添加到购物车效果附源码下载
2016/08/22 Javascript
JS解决IOS中拍照图片预览旋转90度BUG的问题
2017/09/13 Javascript
vue.js实现的绑定class操作示例
2018/07/06 Javascript
利用原生的JavaScript实现简单拼图游戏
2018/11/18 Javascript
vue获取验证码倒计时组件
2019/08/26 Javascript
javascript实现贪吃蛇游戏(娱乐版)
2020/08/17 Javascript
[01:14]DOTA2亚洲邀请赛 ShowOpen
2015/02/07 DOTA
使用Python的PEAK来适配协议的教程
2015/04/14 Python
实例解析Python的Twisted框架中Deferred对象的用法
2016/05/25 Python
使用PyV8在Python爬虫中执行js代码
2017/02/16 Python
python实现翻转棋游戏(othello)
2019/07/29 Python
python返回数组的索引实例
2019/11/28 Python
python 通过视频url获取视频的宽高方式
2019/12/10 Python
HTML5图片层叠的实现示例
2020/07/07 HTML / CSS
VICHY薇姿俄罗斯官方网上商店:法国护肤品牌,火山温泉水
2019/11/22 全球购物
应届生个人求职信模板
2013/11/26 职场文书
工程业务员岗位职责
2013/12/31 职场文书
大学生职业生涯规划书
2014/03/14 职场文书
员工试用期考核自我鉴定
2014/04/13 职场文书
小学语文课后反思精选
2014/04/25 职场文书
计生办班子群众路线教育实践活动个人对照检查材料思想汇报
2014/10/04 职场文书
开会通知
2015/04/20 职场文书
幼儿园园务工作总结2015
2015/05/18 职场文书
Python实现智慧校园自动评教全新版
2021/06/18 Python
MySQL窗口函数的具体使用
2021/11/17 MySQL