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

  • 2020年7月19日
  • 2022年10月22日
  • opencv, Python
  • 5460view
Kaggleのコンペで戦っている人
今、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未満の値を設定して調整します。

 

\プログラミング経験がある方も必見!/

スキルをお金にしよう

以下のような悩みにお答えします 副業・案件受注を目的としたおすすめのプログラミングスクールはどこ? 私は、プログラミングやったことあるけど、それでも行く意味ある?   このような悩みに、[…]

 

 

全体的な実装例

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

 

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

 

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

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

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

 

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

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

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

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

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

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

関連記事

いますぐにでもAI(機械学習)が学べるプログラミングスクールを検討している方へ! [afTag id=2402]   筆者について 筆者は、AIプログラミングスクールに通っていたことがある、現役エンジニアです。 筆者は、[…]

 

まとめ

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

 

 

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

付録:kaggleってなに?

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

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

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

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

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

 

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

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

 

しかし

・英語を読むのが億劫だ

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

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

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

 

機械学習の入門!どこから学ぶと良いの?プログラミングスクールやセミナーは効果的?

 

WEBプログラマが、なぜAIジョブカレの機械学習講座を受講中なのか解説します

 

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

AI(機械学習)が学べるスクールを講座ごとに一覧表示!

さらに、比較表を活用することにより、細かい特徴が違いが一発でわかります。

AIスキルを身に付けて、市場価値が高いエンジニアを目指しましょう!

 

AIスクールの検索、比較ができるペン太ブル本家

最新情報をチェックしよう!
>プログラミングスクール検索・比較表サイト

プログラミングスクール検索・比較表サイト

ワンクリック、さらに詳細に条件を指定してプログラミングスクールの検索ができます。さらに比較表により特徴を細かく比較できる!

CTR IMG