python中PS 图像调整算法原理之亮度调整

作者:Matrix_11 时间:2021-02-09 17:51:01 

亮度调整

非线性亮度调整:

对于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

标签:python,ps,图像调整,亮度调整
0
投稿

猜你喜欢

  • background-clip/origin一则运用

    2008-04-15 14:45:00
  • Python面向对象程序设计类的多态用法详解

    2021-05-28 20:21:29
  • python 获取当前目录下的文件目录和文件名实例代码详解

    2022-07-21 21:31:25
  • encodeURIComponent用法UrlEncode与URLEncode.encode()

    2009-05-11 12:40:00
  • 用Dreamweaver实现Real与网页结合

    2010-07-13 12:11:00
  • Python sklearn分类决策树方法详解

    2023-04-20 17:14:13
  • Pytorch实现LSTM和GRU示例

    2022-02-08 09:14:44
  • vue2.x el-table二次封装实现编辑修改

    2023-07-02 16:29:17
  • Python中的XML库4Suite Server的介绍

    2023-08-12 01:26:41
  • Mybatis如何自动生成数据库表结构总结

    2024-01-21 11:04:30
  • python日期相关操作实例小结

    2021-07-14 18:39:13
  • 从xml中获取城市,省份名称

    2008-09-05 15:07:00
  • PHP排序二叉树基本功能实现方法示例

    2023-07-10 04:45:53
  • python实现爬取百度图片的方法示例

    2021-11-22 00:46:04
  • 多维度导航探秘II

    2010-08-17 21:24:00
  • IE中radio 或checkbox的checked属性初始状态下不能选中显示问题

    2024-05-10 14:06:42
  • Go语言中rune方法使用详解

    2024-04-23 09:37:18
  • 使用Python解析Chrome浏览器书签的示例

    2023-03-12 01:14:34
  • vue3.0如何使用computed来获取vuex里数据

    2024-04-28 09:24:20
  • Python中bisect的使用方法

    2021-12-03 05:56:12
  • asp之家 网络编程 m.aspxhome.com