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的web.py框架实现类似Django的ORM查询的教程
May 02 Python
利用python操作SQLite数据库及文件操作详解
Sep 22 Python
使用python获取(宜宾市地震信息)地震信息
Jun 20 Python
Python使用正则表达式分割字符串的实现方法
Jul 16 Python
基于python分析你的上网行为 看看你平时上网都在干嘛
Aug 13 Python
Python 私有化操作实例分析
Nov 21 Python
python 命名规范知识点汇总
Feb 14 Python
python GUI库图形界面开发之PyQt5打印控件QPrinter详细使用方法与实例
Feb 28 Python
使用keras根据层名称来初始化网络
May 21 Python
Python用类实现扑克牌发牌的示例代码
Jun 01 Python
在pytorch中动态调整优化器的学习率方式
Jun 24 Python
python 利用matplotlib在3D空间绘制二次抛物面的案例
Feb 06 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使用GIFEncoder类生成gif动态滚动字幕
2014/07/01 PHP
php之curl设置超时实例
2014/11/03 PHP
PHP积分兑换接口实例
2015/02/09 PHP
php数组合并与拆分实例分析
2015/06/12 PHP
分享10段PHP常用代码
2015/11/11 PHP
php-fpm服务启动脚本的方法
2018/04/27 PHP
解决windows上php xdebug 无法调试的问题
2020/02/19 PHP
laravel7学习之无限级分类的最新实现方法
2020/09/30 PHP
js中arguments,caller,callee,apply的用法小结
2014/01/28 Javascript
JS实现选项卡实例详解
2015/11/17 Javascript
学习JavaScript设计模式之迭代器模式
2016/01/19 Javascript
实例讲解使用原生JavaScript处理AJAX请求的方法
2016/05/10 Javascript
JavaScript必知必会(三) String .的方法来自何方
2016/06/08 Javascript
常用Javascript函数与原型功能收藏(必看篇)
2016/10/09 Javascript
微信小程序 Toast自定义实例详解
2017/01/20 Javascript
微信小程序 检查接口状态实例详解
2017/06/23 Javascript
JS简单实现查看文档创建日期、修改日期和文档大小的方法示例
2018/04/08 Javascript
JavaScript继承定义与用法实践分析
2018/05/28 Javascript
详解Nodejs mongoose
2018/06/10 NodeJs
简述JS浏览器的三种弹窗
2018/07/15 Javascript
JS栈stack类的实现与使用方法示例
2019/01/31 Javascript
vue实现element表格里表头信息提示功能(推荐)
2019/11/20 Javascript
es6函数之尾调用优化实例分析
2020/04/25 Javascript
解决vue scoped html样式无效的问题
2020/10/24 Javascript
[38:38]完美世界DOTA2联赛PWL S3 access vs Rebirth 第二场 12.17
2020/12/18 DOTA
Python通过属性手段实现只允许调用一次的示例讲解
2018/04/21 Python
python爬取基于m3u8协议的ts文件并合并
2019/04/26 Python
django框架forms组件用法实例详解
2019/12/10 Python
PyQt5的相对布局管理的实现
2020/08/07 Python
python 窃取摄像头照片的实现示例
2021/01/08 Python
使用html5 canvas创建太空游戏的示例
2014/05/08 HTML / CSS
国际旅客访问北美最大的汽车租赁提供商:Alamo Rent A Car
2018/06/13 全球购物
大学生职业生涯规划书前言
2014/01/09 职场文书
实习计划书范文
2015/01/16 职场文书
前端学习——JavaScript原生实现购物车案例
2021/03/31 Javascript
python中出现invalid syntax报错的几种原因分析
2022/02/12 Python