pythonでのPS画像調整アルゴリズム原理の明るさ調整


明るさ調整
非線形輝度調整:
R,G,Bの3つのチャネルに対して,各チャネルは同じ増分を増加させる。
線形輝度調整:
HSL色空間を利用して、そのL(輝度)部分のみを調整することで、画像輝度の線形調整が可能となる。しかし、RGBとHSLの色空間の変換は煩雑で、一般的に浮動小数点の演算が必要であり、コードの複雑度を増加するだけでなく、更に重要なのは、RGBをHSLに変換して、新しいL値を決定し、HSLをRGBに変換して、運転速度は遅くなると考えられる。画像の輝度を線形に調整する速度を上げるには、3つの観点から、まず浮動小数点演算を整数演算とし、2つはHSLのL部分だけを抽出して調整すること、3つはアセンブリコードを採用すること、DelphiではもちろんBASMです。以下はこの3つの観点から書いた画像の輝度を線形に調整するコードです。

L := (Max(R, Max(G,B)) + Min(R, Min(G, B))) div 2;
Lは通常のパーセンテージ表現ではなく、0-255の値を取るので、浮動小数点演算を行う必要はありません。
下記のコードは主に2つの機能を完成します。一つは前のL値とRGBでそれぞれその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画像调整アルゴリズムの原理の明るさ调整です。皆さんに助けを求めています。ここでも私たちのサイトを応援してくれてありがとうございます。
本文があなたのためになると思ったら、転載を歓迎します。出所を明記してください。ありがとうございます。