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基类函数的重载与调用实例分析
Jan 12 Python
python决策树之CART分类回归树详解
Dec 20 Python
pandas数据清洗,排序,索引设置,数据选取方法
May 18 Python
Django处理文件上传File Uploads的实例
May 28 Python
Python运维开发之psutil库的使用详解
Oct 18 Python
解决Python中pandas读取*.csv文件出现编码问题
Jul 12 Python
Python 使用 Pillow 模块给图片添加文字水印的方法
Aug 30 Python
Python 可变类型和不可变类型及引用过程解析
Sep 27 Python
Python实现图片批量加入水印代码实例
Nov 30 Python
keras小技巧——获取某一个网络层的输出方式
May 23 Python
python中字典增加和删除使用方法
Sep 30 Python
Python读取ini配置文件传参的简单示例
Jan 05 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 foreach 参数强制类型转换的问题
2010/12/10 PHP
简单谈谈PHP vs Node.js
2015/07/17 PHP
PHP 与 UTF-8 的最佳实践详细介绍
2017/01/04 PHP
php关联数组与索引数组及其显示方法
2018/03/12 PHP
javascript 异常处理使用总结
2009/06/21 Javascript
jquery数组封装使用方法分享(jquery数组遍历)
2014/03/25 Javascript
IE中图片的onload事件无效问题和解决方法
2014/06/06 Javascript
js实现动画特效的文字链接鼠标悬停提示的方法
2015/03/02 Javascript
JavaScript中字符串拼接的基本方法
2015/07/07 Javascript
浅析jquery unbind()方法移除元素绑定的事件
2016/05/24 Javascript
jQuery树控件zTree使用方法详解(一)
2017/02/28 Javascript
3分钟掌握常用的JS操作JSON方法总结
2017/04/25 Javascript
xmlplus组件设计系列之路由(ViewStack)(7)
2017/05/02 Javascript
javascript将url解析为json格式的两种方法
2017/08/18 Javascript
微信小程序radio组件使用详解
2018/01/31 Javascript
Vue实现移动端左右滑动效果的方法
2018/11/27 Javascript
javascript 原型与原型链的理解及实例分析
2019/11/23 Javascript
Python的多态性实例分析
2015/07/07 Python
python 环境变量和import模块导入方法(详解)
2017/07/11 Python
Python使用pip安装pySerial串口通讯模块
2018/04/20 Python
基于python指定包的安装路径方法
2018/10/27 Python
Python数据可视化教程之Matplotlib实现各种图表实例
2019/01/13 Python
Django中间件基础用法详解
2019/07/18 Python
python每天定时运行某程序代码
2019/08/16 Python
详解Django-channels 实现WebSocket实例
2019/08/22 Python
python 实现兔子生兔子示例
2019/11/21 Python
python学生管理系统的实现
2020/04/05 Python
Python脚本实现监听服务器的思路代码详解
2020/05/28 Python
加拿大女装网上购物:Reitmans
2016/10/20 全球购物
质量工程师岗位职责
2013/11/16 职场文书
机关领导干部作风整顿整改措施
2014/09/19 职场文书
2015年房产销售工作总结范文
2015/05/22 职场文书
天那边观后感
2015/06/09 职场文书
分析SQL窗口函数之取值窗口函数
2022/04/21 Oracle
详解Anyscript开发指南绕过typescript类型检查
2022/09/23 Javascript
ubuntu端向日葵键盘输入卡顿问题及解决
2022/12/24 Servers