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 相关文章推荐
在win和Linux系统中python命令行运行的不同
Jul 03 Python
Python基于正则表达式实现检查文件内容的方法【文件检索】
Aug 30 Python
基于python进行桶排序与基数排序的总结
May 29 Python
使用PM2+nginx部署python项目的方法示例
Nov 07 Python
Python 中Django验证码功能的实现代码
Jun 20 Python
Python读写文件模式和文件对象方法实例详解
Sep 17 Python
python框架flask表单实现详解
Nov 04 Python
已安装tensorflow-gpu,但keras无法使用GPU加速的解决
Feb 07 Python
python如何实现单链表的反转
Feb 10 Python
python实现猜拳游戏
Mar 04 Python
Python flask路由间传递变量实例详解
Jun 03 Python
python opencv角点检测连线功能的实现代码
Nov 24 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格式输出文件var_export函数实例
2014/11/15 PHP
PHP实现检测客户端是否使用代理服务器及其匿名级别
2015/01/07 PHP
php文件上传的两种实现方法
2016/04/04 PHP
php从数据库中获取数据用ajax传送到前台的方法
2018/08/20 PHP
PHP预定义接口――Iterator用法示例
2020/06/05 PHP
IE6中使用position导致页面变形的解决方案(js代码)
2011/01/09 Javascript
JavaScript中一个奇葩的IE浏览器判断方法
2014/04/16 Javascript
jQuery插件实现无缝滚动特效
2015/11/24 Javascript
深入浅析JavaScript中的3DES
2016/08/24 Javascript
详解nodejs 文本操作模块-fs模块(二)
2016/12/22 NodeJs
利用ES6语法重构React组件详解
2017/03/02 Javascript
JavaScript体验异步更好的解决办法
2018/01/08 Javascript
vue生命周期实例小结
2018/08/15 Javascript
json解析大全 双引号、键值对不在一起的情况
2019/12/06 Javascript
JS实现页面数据懒加载
2020/02/13 Javascript
Vue自定义组件双向绑定实现原理及方法详解
2020/09/03 Javascript
如何封装Vue Element的table表格组件
2021/02/06 Vue.js
python基于右递归解决八皇后问题的方法
2015/05/25 Python
Python编程使用*解包和itertools.product()求笛卡尔积的方法
2017/12/18 Python
浅谈pandas中DataFrame关于显示值省略的解决方法
2018/04/08 Python
基于python 爬虫爬到含空格的url的处理方法
2018/05/11 Python
Python 读取某个目录下所有的文件实例
2018/06/23 Python
python实现顺序表的简单代码
2018/09/28 Python
多个版本的python共存时使用pip的正确做法
2020/10/26 Python
python在地图上画比例的实例详解
2020/11/13 Python
Html5页面在微信端的分享的实现方法
2018/08/30 HTML / CSS
澳大利亚排名第一的狂热牛仔品牌:ONETEASPOON
2018/11/20 全球购物
澳大利亚宠物食品和用品商店:PETstock
2020/01/02 全球购物
终止合同协议书
2014/04/17 职场文书
中学生秋季运动会广播稿
2014/09/21 职场文书
实习生矿工检讨书
2014/10/13 职场文书
2014年护理部工作总结
2014/11/14 职场文书
开业庆典致辞
2015/08/01 职场文书
读《解忧杂货店》有感:请相信一切都是最好的安排
2019/11/07 职场文书
Django debug为True时,css加载失败的解决方案
2021/04/24 Python
Java8 Stream API 提供了一种高效且易于使用的处理数据的方式
2022/04/13 Java/Android