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 采集中文乱码问题的完美解决方法
Sep 27 Python
Python字符串处理实例详解
May 18 Python
python中numpy的矩阵、多维数组的用法
Feb 05 Python
python画一个玫瑰和一个爱心
Aug 18 Python
Python文件读写保存操作的示例代码
Sep 14 Python
如何利用Python分析出微信朋友男女统计图
Jan 25 Python
对Python之gzip文件读写的方法详解
Feb 08 Python
Python redis操作实例分析【连接、管道、发布和订阅等】
May 16 Python
pow在python中的含义及用法
Jul 11 Python
教你如何编写、保存与运行Python程序的方法
Jul 12 Python
Python turtle绘画象棋棋盘
Aug 21 Python
Python web如何在IIS发布应用过程解析
May 27 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 中的输出缓冲
2006/12/21 PHP
mysql总结之explain
2012/02/27 PHP
PHP中3种生成XML文件方法的速度效率比较
2012/10/06 PHP
php实现的css文件背景图片下载器代码
2014/11/11 PHP
WordPress后台中实现图片上传功能的实例讲解
2016/01/11 PHP
PHP+redis实现的限制抢购防止商品超发功能详解
2019/09/19 PHP
JavaScript 替换Html标签实现代码
2009/10/14 Javascript
js实现上传图片之上传前预览图片
2013/03/25 Javascript
JS 模态对话框和非模态对话框操作技巧汇总
2013/04/15 Javascript
详解jquery uploadify 上传文件
2013/11/09 Javascript
jQuery实现瀑布流布局
2014/12/12 Javascript
jQuery及JS实现循环中暂停的方法
2015/02/02 Javascript
JavaScript中的lastIndexOf()方法使用详解
2015/06/06 Javascript
JavaScript实现可拖拽的拖动层Div实例
2015/08/05 Javascript
JavaScript类型系统之正则表达式
2016/01/05 Javascript
js的函数的按值传递参数(实例讲解)
2017/11/16 Javascript
Vue2.0 ES6语法降级ES5的操作
2020/10/30 Javascript
[05:07]DOTA2英雄梦之声_第14期_暗影恶魔
2014/06/20 DOTA
python批量修改文件名的实现代码
2014/09/01 Python
Python实现矩阵加法和乘法的方法分析
2017/12/19 Python
Python实现RGB与HSI颜色空间的互换方式
2019/11/27 Python
tensorflow入门:tfrecord 和tf.data.TFRecordDataset的使用
2020/01/20 Python
tensorflow 分类损失函数使用小记
2020/02/18 Python
keras输出预测值和真实值方式
2020/06/27 Python
Bench加拿大官方网站:英国城市服装品牌
2017/11/03 全球购物
Spongelle官网:美国的创意护肤洗护品牌
2019/05/15 全球购物
荷兰美妆护肤品海淘网站:Beautinow(中文)
2020/11/22 全球购物
北京泡泡网网络有限公司.net面试题
2012/07/17 面试题
办公室文秘岗位职责
2013/11/15 职场文书
前台接待岗位职责
2013/12/03 职场文书
植树节口号
2014/06/21 职场文书
大学社团招新的通讯稿
2014/09/10 职场文书
农村老人去世追悼词
2015/06/23 职场文书
干部作风纪律整顿心得体会
2016/01/23 职场文书
如何使用Maxwell实时同步mysql数据
2021/04/08 MySQL
关于redisson缓存序列化几枚大坑说明
2021/08/04 Redis