python中PS 图像调整算法原理之亮度调整
作者:Matrix_11 发布时间:2021-02-09 17:51:01
标签:python,ps,图像调整,亮度调整
亮度调整
非线性亮度调整:
对于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 图像调整算法原理之亮度调整 ,网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
来源:https://blog.csdn.net/matrix_space/article/details/22991683


猜你喜欢
- JavaScript中,可以使用delete操作符来删除对象中的property:var t = {a:42, b:26};console.
- Python实现微信表情包炸群效果,具体代码如下所示;# -*- coding = utf-8 -*-# @Time : 2021/1/26
- 作为一名程序员,调试(debug)程序是一项必会的事情,在利用pycharm这个pythonIDE时,不好好利用其调试功能真的是太可惜了。借
- 核心思想在defer出现的地方插入了指令CALL runtime.deferproc,在函数返回的地方插入了CALL runtime.def
- mysql的字符集设置有多个层级,在mysql中存储中文,如果不能正确设置字符集,很容易出现数据乱码。今天就有一个用户反馈他数据库中的数据下
- 目录一.定义二.命名方法2.1小驼峰命名法2.2大驼峰命名法2.3下划线命名法三.命名规则3.1标识符3.2关键字四.使用方法4.1单变量赋
- 前言用 HTML5 的 Canvas 元素实现一个带有跳动效果的粒子动画。会用到 Canvas 的2D渲染上下文,通过 JavaScript
- 01 实现背景1、PHPdict.txt,一个文本文件,包含可能的敏感目录后缀2、HackRequests模块,安全测试人员专用的类Requ
- 1. 什么是数据不平衡所谓的数据不平衡(imbalanced data)是指数据集中各个类别的数量分布不均衡;不平衡数据在现实任务中十分的常
- 当然,这些并非真正的定律,而只是一些有益的忠告,使你免陷于使用层时可能的困顿中。原来有九条定律的,我们精简掉一条,还有下面的八条:1. 如果
- 如何制作K线图?也不难,代码和说明见下:<%@ Language=VBScript %><%Respo
- google找到这样一个解决方法: 在上传控件中插入了值,就只能通过form的reset功能来清空了,但是form里面其他的值也被reset
- 优化算法时间复杂度算法的时间复杂度对程序的执行效率影响最大,在Python中可以通过选择合适的数据结构来优化时间复杂度,如list和set查
- 这个框架主要还是思想,之后,,,还是创建项目好了,1.新建一个项目新建一个maven,并且选择webapp类型。2.点击next选项这里面的
- folium是python的一个用来绘制地图,并在地图上打点,画圈,做颜色标记的工具类。简单易学,和pandas可以很好的融合,是居家必备良
- 直接上图,图文并茂,相信你很快就知道要干什么。A文件:B文件:可以发现,A文件中“汉字井号”这一列和B文件中“WELL”这一列的属性相同,以
- docutils 的官方工具地址为:https://docutils.sourceforge.io/目前的更新主要是在版本和使用手册的更新上
- 1、安装所需工具pip install pipreqs2、进入到python项目主目录pipreqs ./3、完成上面命令会生成requir
- Python中创建线程有两种方式:函数或者用类来创建线程对象。函数式:调用 _thread 模块中的start_new_thread()函数
- 前言:工作中遇到以下小问题,解决方法如下,可能比较暴力,暂时留档,再进行优化。要求:将列表中json的 ‘id&