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

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

MENU

【python】【OpenCV】ヒストグラム平坦化処理で画像のコントラストを上げる

OpenCVの標準関数であるequalizeHist()を用いてヒストグラムの平坦化処理を行い、画像のコントラストを上げる

f:id:stjun:20200209165217p:plain

左が元画像、右が平坦化後

1. 誰に向けた記事か

pythonを勉強している人

OpenCVに興味がある人

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

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

www.stjun.com

 

 

2. はじめに

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

www.stjun.com

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

www.stjun.com

第3回では、γ変換を用いて画像の明るさを調整しました。

www.stjun.com

今回、ヒストグラム平坦化処理を用いて画像のコントラストを調整します。

 

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

3.1 コード
#ヒストグラム均一化、コントラストが上がる
import cv2
#画像の読み込み
img=cv2.imread('./test1.png',0)
#画像の平坦化処理
img_flat=cv2.equalizeHist(img)
#画像を表示
cv2.imshow("original",img)
cv2.imshow("flattening",img_flat)
#何かキーが押されるまで画像を表示し続ける
cv2.waitKey(0)
#キーが押されたらウインド画面を消去する
cv2.destroyAllWindows()

今回は次の写真を使いたいと思います。

f:id:stjun:20200209165750p:plain

 

3.2 そもそもヒストグラム平坦化処理とは何か

wikiに詳しく載っているので、ここでは簡単に紹介します。

例えば元画像のヒストグラムは以下になります。

f:id:stjun:20200209170220p:plain

横軸は画素値で、画素値0が黒、画素値255が白になります。

元画像は70~120あたりにピークを持っているので、どちらかといえば黒に近い(暗い画像であることが分かります)

ヒストグラム平坦化処理とは、上記のように局所ピークを持つヒストグラムを画素値0~255で満遍なく分布するヒストグラムに変換する処理になります。

実際のヒストグラムの変化は後ほど3.4実行結果で示します。

 

 

3.3 コードの説明 :γ変換の部分
#画像の読み込み
img=cv2.imread('./test1.png',0)
#画像の平坦化処理
img_flat=cv2.equalizeHist(img)

コードは非常に簡単です。

1行目のimreadでこれまで通り元画像を読みこみ、equalizeHist()の関数を使用すればOKです。

 

3.4 実行結果

冒頭にもあったように、結果は以下になります。

ヒストグラム平坦化処理を行った右画像の方がコントラストが向上していることが分かります。

f:id:stjun:20200209165217p:plain

左が元画像、右が平坦化後

ヒストグラムを比較したのが次の図です。

青がオリジナルの、赤がヒストグラム平坦化処理後のヒストグラムです。

オリジナルは画素値100前後にピークがあるのに対し、平坦化処理を行うと50~200くらいまで満遍なく分布していることが分かります。

f:id:stjun:20200209171637p:plain

 

 

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

私は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.  最後に

equalizeHist()以外にもCLAHEと呼ばれる関数もOpenCVにはあります。

次回紹介できればと思います。