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复制文件代码实现
Dec 23 Python
在Python的Django框架中加载模版的方法
Jul 16 Python
Python DataFrame设置/更改列表字段/元素类型的方法
Jun 09 Python
PyQt5图形界面播放音乐的实例
Jun 17 Python
Python学习笔记之While循环用法分析
Aug 14 Python
python retrying模块的使用方法详解
Sep 25 Python
Python自动化完成tb喵币任务的操作方法
Oct 30 Python
python 消费 kafka 数据教程
Dec 21 Python
pytorch实现从本地加载 .pth 格式模型
Feb 14 Python
基于python检查SSL证书到期情况代码实例
Apr 04 Python
利用python制作拼图小游戏的全过程
Dec 04 Python
一个非常简单好用的Python图形界面库(PysimpleGUI)
Dec 28 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版自动生成文章摘要
2008/07/23 PHP
php curl基本操作详解
2013/07/23 PHP
Codeigniter操作数据库表的优化写法总结
2014/06/12 PHP
推荐十款免费 WordPress 插件
2015/03/24 PHP
PHP数组操作类实例
2015/07/11 PHP
php array_map()函数实例用法
2021/03/03 PHP
jquery中防刷IP流量软件影响统计的一点对策
2011/07/10 Javascript
php跨域调用json的例子
2013/11/13 Javascript
jQuery的css()方法用法实例
2014/12/24 Javascript
JS面向对象(3)之Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法
2016/02/25 Javascript
js 获取经纬度的实现方法
2016/06/20 Javascript
Javascript中call,apply,bind方法的详解与总结
2016/12/12 Javascript
使用Javascript判断浏览器终端设备(PC、IOS(iphone)、Android)
2017/01/04 Javascript
js控制文本框禁止输入特殊字符详解
2017/04/07 Javascript
解决Vue2.0自带浏览器里无法打开的原因(兼容处理)
2017/07/28 Javascript
node.js连接mysql与基本用法示例
2019/01/05 Javascript
微信小程序提取公用函数到util.js及使用方法示例
2019/01/10 Javascript
vue实现设置载入动画和初始化页面动画效果
2019/10/28 Javascript
Vue 数组和对象更新,但是页面没有刷新的解决方式
2019/11/09 Javascript
js实现简单的无缝轮播效果
2020/09/05 Javascript
使用Python的PIL模块来进行图片对比
2016/02/18 Python
Python中一些不为人知的基础技巧总结
2018/05/19 Python
对Python 两大环境管理神器 pyenv 和 virtualenv详解
2018/12/31 Python
Python操作qml对象过程详解
2019/09/26 Python
Python数据存储之 h5py详解
2019/12/26 Python
python re模块匹配贪婪和非贪婪模式详解
2020/02/11 Python
Python基于类路径字符串获取静态属性
2020/03/12 Python
涂鸦板简单实现 Html5编写属于自己的画画板
2016/07/05 HTML / CSS
美国在线眼镜店:GlassesShop
2018/11/15 全球购物
芬兰设计商店美国:Finnish Design Shop US
2019/03/25 全球购物
雅虎笔试题(字符串操作)
2015/03/24 面试题
如何开启linux的ssh服务
2015/02/14 面试题
教师节促销方案
2014/03/22 职场文书
建党伟业观后感
2015/06/01 职场文书
position:sticky 粘性定位的几种巧妙应用详解
2021/04/24 HTML / CSS
使用redis实现延迟通知功能(Redis过期键通知)
2021/09/04 Redis