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

  • 2020年7月19日
  • 2024年5月23日
  • opencv, Python
  • 10297view
Kaggleのコンペで戦っている人
今、kaggle(AIコンペ)で画像処理系のコンペを戦っているんだ。極端に明るさがおかしい画像があるかもしれないから、何千枚もある画像から暗い画像だけ抽出して、補正したいだ。そんなことはできるかな?
問題解決娘
ありますよ。今回は、ポートレートモデルの翡翠さんにご協力を頂いて暗い画像の検出、暗い画像を明るくする例で解説します。

 

\IT未経験者からのサポートあり!転職サービス3選!!/

サービス名
未経験 未経験OK 未経験の転職専用 経験者向け
公開の求人数 ITエンジニア全体で1万件以上
ITエンジニア未経験で600件以上
未公開 5,000件以上
利用対象 全職種 IT特化 IT特化
特徴 ✓誰もが知る転職サービス
✓経歴を登録しておくとオファーが来る
✓企業担当者と条件交渉
✓スキルの身につく企業を紹介
✓IT専門のエージェントが対応
✓転職成功すると年収200万円以上の大幅アップがある
転職サポート内容
  • 求人検索
  • 企業担当者と交渉
  • 求人紹介
  • ライフプランのサポート
  • キャリア相談
  • 求人紹介
  • 提出書類の添削
  • 面接対策
公式サイト リクナビネクスト テックゲート レバテックキャリア

 

簡単な処理概要を説明

原画像を読み込む

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

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

 

#原画像はこんな感じ(ここでは意味を理解しなくても大丈夫です)
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未満の値を設定して調整します。

 

\IT未経験者からのサポートあり!転職サービス3選!!/

サービス名
未経験 未経験OK 未経験の転職専用 経験者向け
公開の求人数 ITエンジニア全体で1万件以上
ITエンジニア未経験で600件以上
未公開 5,000件以上
利用対象 全職種 IT特化 IT特化
特徴 ✓誰もが知る転職サービス
✓経歴を登録しておくとオファーが来る
✓企業担当者と条件交渉
✓スキルの身につく企業を紹介
✓IT専門のエージェントが対応
✓転職成功すると年収200万円以上の大幅アップがある
転職サポート内容
  • 求人検索
  • 企業担当者と交渉
  • 求人紹介
  • ライフプランのサポート
  • キャリア相談
  • 求人紹介
  • 提出書類の添削
  • 面接対策
公式サイト リクナビネクスト テックゲート レバテックキャリア

 

全体的な実装例

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

 

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

 

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

独学で挫折した人向け・AI(機械学習)を短期間で学ぶ方法

独学で挫折してしまった
本買ったり、YoutubeでAIを勉強していたんだけど、結局から何を勉強してよいかわからず挫折してしまったんだ。どうしたら解消できる?

 

独学で挫折してしまった人向けに、PythonとAI(機械学習)について、短期間で効率的に学ぶ方法を紹介します。

それは、プログラミングスクールを利用することです。

プログラミングができる人でも機械学習の習得は、難しいため、プロに教えてもらったほうが遥かに最短経路で身につけることができます。

筆者は、ITエンジニアでプログラミングは得意です。

しかし、AIについては、AIの考え方を学ぶところで挫折したためAIスクールに4ヶ月ほど通いました。

だから、現役のエンジニアがAIスクールに行くことは恥ずかしくありません!

関連記事

いますぐにでもAI(機械学習)が学べるプログラミングスクールを検討している方へ! [afTag id=2402] [template id="10277"]   筆者について 筆者は、AIプログラミン[…]

 

まとめ

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

 

 

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

付録:kaggleってなに?

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

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

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

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

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

 

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

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

 

しかし

・英語を読むのが億劫だ

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

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

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

 

 

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

最新情報をチェックしよう!