• トップ
  • ブログ一覧
  • 【後編】Pythonでカンタン画像解析~錆の面積はどれくらい?~
  • 【後編】Pythonでカンタン画像解析~錆の面積はどれくらい?~

    広告メディア事業部広告メディア事業部
    2020.10.08

    IT技術

    python で画像解析してみよう!

    業務の効率化や不明確値の定量化に大きく貢献してくれる「画像解析」。

    前回に引き続き、python の特色である「モジュール」と「プログラミング技術」を活用して、仕事の効率化をはかりましょう!

    今回は、錆の面積を算出していきたいと思います。

    前回の記事を読んでいない方は、まずはこちらをお読みください。

    featureImg2020.10.06【前編】Pythonでカンタン画像解析~タピオカはいくつ?~python で画像解析してみよう!業務の効率化や不明確値の定量化に大きく貢献してくれる「画像解析」。難しそうに思うか...

    異物検知アルゴリズムの応用

    今回紹介した「異物検知アルゴリズム」の構築は、産業的にも様々な応用が可能です。

    Deep learning のインプットにするも良し、アルゴリズム単体でも応用が可能でしょう。

    画像解析で錆の面積を算出しよう

    たとえば、配管の腐食を検知するにあたって「錆」の検出は非常に重要です。

    今度は応用編として、以下の画像を解析し、錆の面積率を算出してみましょう。

    錆画像

    色の明暗で判定

    タピオカでも最初に試した、一定の敷居値より「暗い」箇所を切り出すコードです。

    1## もっとも単純な方法 ##
    2img_bw = imread('PEI85_sabitakabe_TP_V.jpg', 2)
    3hit, wid = img_bw.shape
    4
    5## 一定の敷居値(今回は120)より暗い箇所のみ表示 ##
    6from numpy import sum
    7img_bw_m = where(img_bw < 120, 1, 0)
    8pyplot.imshow(img_bw_m)
    9print("Rust ratio is :", sum(img_bw_m) / (hit * wid) * 100, '%')

    結果はいまいち…

    40%ほどが、錆の領域だと判定されましたね。

    この方法はやはり、タピオカの実験と同じような欠点があります。

    画像に影があった場合は?

    では、例えば、この画像に影がさしかかっていたらどうなるでしょうか?

    1## 画像の上半分を暗くする(影がかかっていることをイメージ) ##
    2img_bw = imread('PEI85_sabitakabe_TP_V.jpg', 2)
    3hit, wid = img_bw.shape
    4for i in range(int(hit / 2)):    img_bw[i] = img_bw[i] / 2
    5
    6## 先ほどと同様暗い箇所を抽出
    7img_bw_m = where(img_bw < 120, 1, 0)
    8pyplot.imshow(img_bw_m)
    9print("Rust ratio is :", sum(img_bw_m) / (hit * wid) * 100, '%')

    影=錆になってしまった

    案の定、影の部分も錆として検知されてしまいました。

    HSV を使って検知してみよう

    では、先ほどと同様に、HSV 空間に射影してから「赤っぽいところ」を検知させてみましょう。

    1## カラーで読み込む ##
    2img_bgr = imread('PEI85_sabitakabe_TP_V.jpg', 6)
    3for i in range(int(hit / 2)):    img_bgr[i] = img_bgr[i] / 2
    4img_hsv = cvtColor(img_bgr, COLOR_BGR2HSV)
    5
    6## 赤色の範囲を定義 ##
    7hsv_min = array([0,   64,   0])
    8hsv_max = array([15, 255, 255])
    9
    10## 赤色 ≒ さび色をマスクとして定義する ##   
    11mask = inRange(img_hsv, hsv_min, hsv_max)
    12
    13## マスクの面積率を算出(マスクは0 or 255なので255で割る必要)) ##
    14pyplot.imshow(mask)
    15print("Rust ratio is :", sum(mask) / 255 / hit / wid * 100, '%')

    検知成功!

    今度こそ成功です!

    多少の誤差はありますが、影がかかっていても、ほぼ完璧に検知できていますね。

    さいごに

    今回は、HSV 空間への射影を用いた「opencv」の基本的な使い方を紹介しました。

    画像解析の技術そのものは、産業的にも医療的にも応用先が無限に存在します。

    ぜひ、皆さんの作業効率化やソフト開発にも活用してみてくださいね!

    こちらの記事もオススメ!

    featureImg2020.07.28機械学習 特集知識編人工知能・機械学習でよく使われるワード徹底まとめ!機械学習の元祖「パーセプトロン」とは?【人工知能】ニューラルネ...
    featureImg2020.07.30Python 特集実装編※最新記事順Responder + Firestore でモダンかつサーバーレスなブログシステムを作ってみた!P...

    featureImg2020.07.17ライトコード的「やってみた!」シリーズ「やってみた!」を集めました!(株)ライトコードが今まで作ってきた「やってみた!」記事を集めてみました!※作成日が新し...

    ライトコードでは、エンジニアを積極採用中!

    ライトコードでは、エンジニアを積極採用しています!社長と一杯しながらお話しする機会もご用意しております。そのほかカジュアル面談等もございますので、くわしくは採用情報をご確認ください。

    採用情報へ

    広告メディア事業部

    広告メディア事業部

    おすすめ記事

    エンジニア大募集中!

    ライトコードでは、エンジニアを積極採用中です。

    特に、WEBエンジニアとモバイルエンジニアは是非ご応募お待ちしております!

    また、フリーランスエンジニア様も大募集中です。

    background