画像処理——輝度調整アルゴリズム(python言語)
4472 ワード
輝度調整アルゴリズムの説明(完全なpythonコードは文末):
このアルゴリズムの基本的な原理は、ピクセルポイントの統一を加算するか、または調整値を減算することで、輝度の増強または弱さに到達しました.RGB空間R、G、B値に基づく調整とHSV空間V値に基づく調整を含む.
(CSDNブログ参照:https://blog.csdn.net/maozefa/article/details/4493395)
1.RGBの空間輝度調整アルゴリズムに基づく:
主にRGB空間に対して輝度調整を行う.調整係数を算出した後、調整手段は主に2つあります.
1)現在のRGB値の大きさに基づいて調整する.即ち、R、G、Bの値が大きいほど、調整の大きさが大きくなり、 例えば、現在のピクセルポイントが(100,200,50)であり、調整係数が1.1であれば、調整後は(110,220,55)である.
2)RGB値の大きさの影響を考慮しないで、つまり常に各点R、G、B値に対して同じ調整を行います.例えば、現在のピクセルポイントは(100,200,50)で、調整係数は10/255で、調整後は(110,210,60)です.
2.HSV空間輝度調整アルゴリズムに基づく:
主にHSV空間の輝度V値を調整する.調整係数を算出した後、調整手段は主に2つあります.
1)現在のV値の大きさに基づいて調整する.すなわちV値が大きいほど、調整の大きさは大きくなる.例えば、現在の画素点V値は200であり、調整係数1.1は220である.
2)V値の大きさの影響を考慮しないで、つまり各V値に対して常に同じ調整を行い、 例えば、現在のピクセルポイントV値は200で、調整係数は10/255で、調整後は210です.
完全なpythonコードは以下の通りです.
運転方式:端末画面を開き、このpyファイルディレクトリの下で、
実行:python このファイル.py 画像のパス 輝度レベル(-1~1) 調整方式(0または1、デフォルト1)
例えば:python Lightness.py C:\Users\PDD\Desktop\p.jpg 0.3 (1)
このアルゴリズムの基本的な原理は、ピクセルポイントの統一を加算するか、または調整値を減算することで、輝度の増強または弱さに到達しました.RGB空間R、G、B値に基づく調整とHSV空間V値に基づく調整を含む.
(CSDNブログ参照:https://blog.csdn.net/maozefa/article/details/4493395)
1.RGBの空間輝度調整アルゴリズムに基づく:
主にRGB空間に対して輝度調整を行う.調整係数を算出した後、調整手段は主に2つあります.
1)現在のRGB値の大きさに基づいて調整する.即ち、R、G、Bの値が大きいほど、調整の大きさが大きくなり、 例えば、現在のピクセルポイントが(100,200,50)であり、調整係数が1.1であれば、調整後は(110,220,55)である.
2)RGB値の大きさの影響を考慮しないで、つまり常に各点R、G、B値に対して同じ調整を行います.例えば、現在のピクセルポイントは(100,200,50)で、調整係数は10/255で、調整後は(110,210,60)です.
2.HSV空間輝度調整アルゴリズムに基づく:
主にHSV空間の輝度V値を調整する.調整係数を算出した後、調整手段は主に2つあります.
1)現在のV値の大きさに基づいて調整する.すなわちV値が大きいほど、調整の大きさは大きくなる.例えば、現在の画素点V値は200であり、調整係数1.1は220である.
2)V値の大きさの影響を考慮しないで、つまり各V値に対して常に同じ調整を行い、 例えば、現在のピクセルポイントV値は200で、調整係数は10/255で、調整後は210です.
完全なpythonコードは以下の通りです.
運転方式:端末画面を開き、このpyファイルディレクトリの下で、
実行:python このファイル.py 画像のパス 輝度レベル(-1~1) 調整方式(0または1、デフォルト1)
例えば:python Lightness.py C:\Users\PDD\Desktop\p.jpg 0.3 (1)
import cv2
import sys
import numpy as np
import matplotlib.pyplot as plt
"""
RGB :
RGB 。 , :
1) RGB , R、G、B , ,
: (100,200,50), 1.1, (110,220,55);
2) RGB , R、G、B ,
: (100,200,50), 10/255, (110,210,60)。
"""
def RGBAlgorithm(rgb_img, value=0.5, basedOnCurrentValue=True):
img = rgb_img * 1.0
img_out = img
# RGB (RGB*alpha)
if basedOnCurrentValue:
# 0,
if value >= 0 :
alpha = 1 - value
alpha = 1/alpha
# 0,
else:
alpha = value + 1
img_out[:, :, 0] = img[:, :, 0] * alpha
img_out[:, :, 1] = img[:, :, 1] * alpha
img_out[:, :, 2] = img[:, :, 2] * alpha
# RGB (RGB+alpha*255)
else:
alpha = value
img_out[:, :, 0] = img[:, :, 0] + 255.0 * alpha
img_out[:, :, 1] = img[:, :, 1] + 255.0 * alpha
img_out[:, :, 2] = img[:, :, 2] + 255.0 * alpha
img_out = img_out/255.0
# RGB ( 0 0, 1 1)
mask_3 = img_out < 0
mask_4 = img_out > 1
img_out = img_out * (1-mask_3)
img_out = img_out * (1-mask_4) + mask_4
return img_out
"""
HSV :
HSV V 。 , :
1) V , V , ,
: V 200, 1.1, 220;
2) V , V ,
: V 200, 10/255, 210。
"""
def HSVAlgorithm(rgb_img, value=0.5, basedOnCurrentValue=True):
hsv_img = cv2.cvtColor(rgb_img, cv2.COLOR_RGB2HSV)
img = hsv_img * 1.0
img_out = img
# (V*alpha)
if basedOnCurrentValue:
# 0,
if value >= 0 :
alpha = 1 - value
alpha = 1/alpha
# 0,
else:
alpha = value + 1
img_out[:, :, 2] = img[:, :, 2] * alpha
else :
alpha = value
img_out[:, :, 2] = img[:, :, 2] + 255.0 * alpha
# HSV ( 0 0, 1 1)
img_out = img_out/255.0
mask_1 = img_out < 0
mask_2 = img_out > 1
img_out = img_out * (1-mask_1)
img_out = img_out * (1-mask_2) + mask_2
img_out = img_out * 255.0
# HSV RGB
img_out = np.round(img_out).astype(np.uint8)
img_out = cv2.cvtColor(img_out, cv2.COLOR_HSV2RGB)
img_out = img_out/255.0
return img_out
path = './resource/fruit.bmp'
value = 0.3 # -1 1
basedOnCurrentValue = True # 0 1
# run : python Lightness.py (path) (value) (basedOnCurrentValue)
if __name__ == "__main__":
len = len(sys.argv)
if len >= 2 :
path = sys.argv[1]
if len >= 3 :
value = float(sys.argv[2])
if len >= 4 :
basedOnCurrentValue = bool(int(sys.argv[3]))
img = cv2.imread(path)
img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
img_rgb = RGBAlgorithm(img, value, basedOnCurrentValue)
img_hsv = HSVAlgorithm(img, value, basedOnCurrentValue)
plt.figure("img_original")
plt.imshow(img/255.0)
plt.axis('off')
plt.figure("img_light_rgb")
plt.imshow(img_rgb)
plt.axis('off')
plt.figure("img_light_hsv")
plt.imshow(img_hsv)
plt.axis('off')
plt.show()