機械系エンジニアの備忘録

20代独身社会人。仕事では機械・機構の研究開発を行っているエンジニアが、自分の専門分野ではないpythonを扱って楽しむブログです。

MENU

【python】【OpenCV】γ変換で画像の明るさを変える

画像処理ライブラリであるOpenCVを使って画像の明るさを変える

f:id:stjun:20200208172535p:plain

上が元画像、下が明るくした画像

 

1. 誰に向けた記事か

pythonを勉強している人

OpenCVに興味がある人

・画像処理に興味がある人

※初心者向けにpythonの勉強法とその手順を記事にしました。

www.stjun.com

 

 

2. はじめに

第一回では、OpenCVの基本事項として、インストール方法、OpenCVによる画像の読み込み、画像の白黒化、リサイズ(画像の縮小化)を行いました。

www.stjun.com

第二回では、OpenCVに標準で搭載されている関数を使って画像の二値化を行いました。

www.stjun.com

 今回は、γ変換を用いて画像の明るさを調整したいと思います。

 

3. コードと実行結果と説明

3.1 コード
mport numpy as np
import cv2
#画像の読み込み
img=cv2.imread('./test.jpg',0)
#γ変換の値
gamma=2
#γ変換の対応表を作る
LUT_Table=np.zeros((256,1),dtype='uint8')
for i in range(len(LUT_Table)):
    LUT_Table[i][0]=255*(float(i)/255)**(1.0/gamma)

#γ変換をする
img_gamma=cv2.LUT(img,LUT_Table)

#画像の表示
cv2.imshow('original',img)
cv2.imshow('after gamma',img_gamma)
cv2.waitKey(0)
cv2.destroyAllWindows()

今回もこのコーヒーカップのグレー画像を使いたいと思います。

f:id:stjun:20200208173738p:plain

 

3.2 そもそもγ変換とは何か

γ変換とは以下の式を用いて輝度情報を変化させる処理のことです。

f:id:stjun:20200208175047p:plain

xが元画像の輝度値、yが変更後の輝度値です。

ここで前提として、今回のようなグレースケールの画像では、画素値0が黒、画素値255が白になります。

つまり画素値が小さいほど暗い画像に、画素値が大きいほど明るい画像になります。

この式を横軸x、縦軸yとしてグラフに表したのが下の図です。

f:id:stjun:20200208180543p:plain

γ=1の場合、例えば x=100(元の画像の画素値が100)の場合、変換後の画素値yも100です。つまり明るさは変わらないということです。

γ=1.5にすると、x=100の時はy=136になります。つまり変換後の画素値 yが255(白)に近づくので画像は明るくなります。

反対にγ=0.7にすると、x=100の時、y=67となります。つまり変換後の画素値 yが0(黒)に近づくので画像は暗くなります。

このようにγの値によって画像の明暗を変化させる処理をγ変換と言います。

 

3.3 コードの説明 :γ変換の部分

上記3.1で説明したγ変換の式(対応表)を書いてるのが以下のコードです。

#γ変換の値
gamma=2
#γ変換の対応表を作る
LUT_Table=np.zeros((256,1),dtype='uint8')
for i in range(len(LUT_Table)):
    LUT_Table[i][0]=255*(float(i)/255)**(1.0/gamma)

256行1列の配列(値は全て0)を作り、for文で計算した値を一つ一つ代入しています。

 

3.4 コードの説明:画像処理部分
#γ変換をする
img_gamma=cv2.LUT(img,LUT_Table)

LUT関数を用いて行います。LUT()の引数は左から、変換したい画像、γ変換の対応表(3.2のコードで作った部分)になります。

LUT()変換を使うと、画像内の全ての画素に対して、指定したγ変換の対応表に沿って画素値を計算してくれます。

 

3.5 実行結果

γの値を変えると以下のようになります。

f:id:stjun:20200208182534p:plain

左から順に、γ=1.0、γ=1.5、γ=0.7

確認のためにヒストグラムを見てみましょう。

f:id:stjun:20200208183155p:plain

オレンジ色がオリジナルの、青色がγ=1.5で変換後のヒストグラムです。

γ変換後のヒストグラムが全体的に右に、すなわち明るい方向に移動しているのが分かります。

 

自分が使ってるお得情報の紹介

私はAmazon kindle unlimitedというサービスを1年以上利用しています。

これは月額980円で 和書12万冊以上の電子書籍を読めるサービスです。

ビジネス本、雑誌、漫画、技術本など様々な本を読むことができます。10冊まで端末にダウンロードできるのでネット環境がなくても(オフラインでも)見れます。

なおkindle unlimitedは最初の30日間無料のため、気軽に登録してみて、あまり読みたい本が無ければすぐに解約しても問題ありません。

それか30日内に気になる本を全て読破すれば実質タダです。

ぜひ気になった方はチェックしてみて下さい。

なおkindleにない本等を買う時はamazonギフト券(amazonで使えるポイント)を買い、ポイントで数冊まとめて買った方がお得です。

ギフト券(ポイント)は買ったら10年も有効で、ポイントが付きます。さらに本をまとめ買い(2冊以上同時に)買うと、ポイントがもらえます。

https://www.amazon.co.jp/b?ie=UTF8&node=5431437051

学生さんであればkindle unlimitedよりも年2450円(月210円程度)で映画見放題、音楽聞き放題、本読み放題の「prime student」がおすすめです。

 

4.  最後に

次回もOpenCVを使って簡単な画像処理を行ってみたいと思います。