Opencv-python画像階調変換


階調変換は画像前処理技術として画像の品質を著しく改善することができ、以下にいくつかの階調変換方法を紹介する
1.gamma変換
  Gamma変換は、入力画像の階調値を非線形に操作し、出力画像の階調値と入力画像の階調値とを指数関数的に関係させる.
s = c r λ s = cr^{\lambda} s=crλ
この指数はGammaである.
Gamma変換は画像増強に用いられ、暗部の細部を向上させ、簡単に言えば非線形変換により、暴光強度の線形応答から人の目に近い応答に画像を近づけ、漂白(カメラ露光)や暗すぎる(露光不足)画像を矯正する.
Gamma変換後の入出力画像の階調値関係は、図1に示すように、横座標は入力階調値、縦座標は出力階調値、青曲線はgamma値が1未満の場合の入出力関係、赤曲線はgamma値が1より大きい場合の入出力関係である.gamma値が1未満(青色曲線)の場合、画像全体の輝度は向上する価値があり、低階調でのコントラストが増加し、低階調値での画像の詳細を弁解するのに有利であることが観察された.
1.1実装コード
次はpython 2です.7とopencvの実装
def gamma_trans(img,gamma):
	#         1,  gamma               
	gamma_table = [np.power(x/255.0,gamma)*255.0 for x in range(256)]
	gamma_table = np.round(np.array(gamma_table)).astype(np.uint8)
	#       Opencv     
	return cv2.LUT(img0,gamma_table)

指数の計算の複雑さが高いため、毎回指数を計算していないのを見ました.ここでは計算結果を格納し、計算時間を節約するためにテーブルを調べる方法を使用します.しかし、上記のコードは、パラメータが呼び出されるたびにクエリーが必要なテーブルを計算するため、最適化を続行することもできます.λ\lambda λ 変わらない場合は、まず調べる必要があるテーブルを計算し、各画像を調べることができます.
リファレンス
[1]CSDN京局京段ブルーイノシシ『Python-OpenCVにおけるGamma変換(補正)』
s