OpenCVで明るさ(輝度),色相,彩度をグラフに描画・さらに明るさ調整

今、kaggle(AIコンペ)で画像処理系のコンペを戦っているんだ。
極端に明るさがおかしい画像があるかもしれないから、何千枚もある画像から暗い画像だけ抽出して、補正したいだ。そんなことはできるかな?

ありますよ。
今回は、ポートレートモデルの翡翠さんにご協力を頂いて
暗い画像の検出、暗い画像を明るくする例で解説します。

簡単な処理概要を説明

元画像を読み込む

まずは、元画像がどの様になっているか確認します。

全体的なコードは、最後の方で掲載します。

#元画像はこんな感じ(ここでは意味を理解しなくても大丈夫です)
img = cv2.imread('DSC_0948.jpg')
plt.figure(figsize=(10, 8))

#imageの形状確認
print(img.shape)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(img)

■元画像

HSV色座標系の情報をヒストグラム出してみる

明るさ(輝度)、色相、彩度の分布が分かる、HSV色座標系のヒストグラムを表示します。

処理の流れは以下の通り

・画像を読み込む

・OpenCVはBGR画像のためRGB画像に変換する

・hsv票色系に変換

hsv = cv2.cvtColor(rgb_image, cv2.COLOR_BGR2HSV) # hsv票色系に変換

・輝度、色相、彩度ごとの色情報を取得する

・パーセントタイルを求める。

このプログの実装例として、パーセントタイルは5%、50%、95%で取得しています。

以下のヒストグラムとパーセントタイルを比較します。

{'h_per_5': 68.0,
 'h_per_50': 110.0,
 'h_per_95': 134.0,
 's_per_5': 68.0,
 's_per_50': 110.0,
 's_per_95': 134.0,
 'v_per_5': 42.0,
 'v_per_50': 172.0,
 'v_per_95': 221.0}

上図を見ると明るさ(Value)の値が全体的に分布しています。

明るさのパーセンタイル95パーセントの値(v_per_95)が221.0(明るさの最大は、255)なので明るめの画像と言える

もう一度、ヒストグラムの画像を表示します。

プログラムコードなど、詳細な情報が知りたい場合は、最後の方に掲載しています。

暗い画像でHSV色座標系のヒストグラムを検証する

「HSV色座標系の情報を出してみる」のところでは、以下の画像について

HSV色座標系のヒストグラムを表示しました。

今度は、暗めの画像を表示します。

あ!今度は輝度(Value)が、左側に寄ったね。
輝度のパーセントタイルの95%(v_per_95)を見ると、150.0になっているから、全体的に暗いといえるね

{'h_per_5': 0.0, 'h_per_50': 100.0, 'h_per_95': 175.0, 
's_per_5': 0.0, 's_per_50': 100.0, 's_per_95': 175.0, 
'v_per_5': 58.0, 'v_per_50': 113.0, 'v_per_95': 150.0}

明るさを検出するためのパラメータの調整は、パーセントタイルの値を変更します。

このようにして、プログラムで暗い画像なのか判定できるようになります。

暗い画像を明るくしてみる

暗いことがわかっただけでは、意味がありません。

暗かったら明るめに補正したと思うものです。

ここでは、暗い画像を明るくする方法を記載します。

ガンマ補正をして明るくしたり暗くしたりします。

くわしい実装方法は、このあと紹介するソースコードをみてください。

ガンマ値を1以上の数字にした結果、明るくすることができました。

■補正前の画像

■ガンマ値2.0で補正して明るくした画像

ガンマ値を上げるほど明るくなると言えます。

逆に暗くしたい場合は、ガンマ値を1未満の値を設定して調整します。

>>Udemy・Pythonで学ぶOpenCVでの画像処理入門

全体的な実装例

これまで解説してきたことを実装します。

ぶっちゃけ、いままでの解説必要なくねぇ?
この章だけあればよかったんじゃねぇ?(笑)

それ言われてしまうと元も子もないないですが・・・

まとめ

以上、OpenCVを使って暗い画像の検出、明るさの調整、さらに、輝度、色相、彩度のヒストグラムに表示する方法まで解説しました。

→VAE、GAN、DCGANも学べるAIジョブカレ!ジュブカレの紹介で転職成功で授業料無料!

付録:kaggleってなに?

冒頭に「kaggle」という言葉が出てきました。

kaggleとは、AI技術者のためコミュニティサイトです。

世界中のAIの技術者が交流をしています。

kaggleでは、コンペがあり、AI技術を競い合っています。コンペで入賞すると100万円くらいの賞金がもらえるため世界中の人達が挑戦しています。

入賞できなくても、上位に入るとメダルという称号を得ることができるため、転職、AI関連の仕事を受注するのに有効です。

AIの知識なんてまったくないよ?

そんな人は、初心者向けにkaggleのチュートリアルがあるのでそれを学んでも良いです。

しかし

・英語を読むのが億劫だ

・pythonの基礎から勉強したい

・AIの基礎の基礎から入りたい

そんな人は、以下の記事がおすすめです。

https://programming-info.dream-target.jp/ml-study-info

https://programming-info.dream-target.jp/aijobcolle-study

>>サイバーエージェントが運営! 小学生向けプログラミング教室【テックキッズスクール】

スポンサーリンク
PR




PR




シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
PR