【必見】Pythonで画像の特徴を極める!欠陥検出モデルへの第一歩

PR表記

※アフィリエイト広告を利用しています

どうもニコイチです。第三回の本記事では、画像認識モデルの精度向上のために、画像の特徴を理解しやすくするさまざまな加工(データオーギュメンテーション)の手法を紹介します。
具体的には、画像の反転コントラスト調整・モザイク・ぼかし、そしてエッジ検出の3つの手法に焦点を当てます。
これらの処理を通じて、モデルが学習する際に多様なパターンを取り込めるよう、元の画像から新たな特徴を抽出できる方法を実践的に学んでいきましょう。
「必ず前進・成長していける」と信じ、一歩ずつ着実にステップアップしていきましょう!

目次

画像の反転

画像を反転することで、同じ画像でも左右や上下が変わった別のパターンとして扱えます。
この手法は、データオーギュメンテーションの一環として、学習データを増やすために非常に有効です。

実例:左右反転

以下のコードは、画像ファイル cast_def_0_105.jpeg を読み込み、左右反転させて表示する例です。

import matplotlib.pyplot as plt
from PIL import Image

# 画像の読み込み
im = Image.open('cast_def_0_105.jpeg')

# 左右反転(FLIP_LEFT_RIGHT)を適用
flipped_im = im.transpose(Image.FLIP_LEFT_RIGHT)

# 反転画像の表示
plt.imshow(flipped_im)
plt.show()

【課題】
読み込んだ画像データを左右反転させ、表示してください。
ヒント:transpose メソッドの引数に Image.FLIP_LEFT_RIGHT を指定しましょう。


画像のコントラスト調節、モザイク、ぼかし(ガウス)

画像の特徴をより明確にするため、以下のような加工を行います。

コントラスト調節

画像のピクセル値を変更することで、明るさやコントラストを調整できます。
ここでは、point() メソッドと lambda 式を使い、画像全体のピクセル値を1.9倍に変換してみます。

import matplotlib.pyplot as plt
from PIL import Image

# 画像の読み込み
im = Image.open('cast_def_0_105.jpeg')

# コントラスト調節:全ピクセル値を1.9倍に変更
contrast_im = im.point(lambda x: x * 1.9)

# 調整後の画像表示
plt.imshow(contrast_im)
plt.show()

モザイク処理

モザイク処理は、画像を一度縮小し、再度拡大することで実現できます。
これにより、画像のディテールがぼやけ、モザイクがかかったような効果が得られます。

import matplotlib.pyplot as plt
from PIL import Image

# 画像の読み込み
im = Image.open('cast_def_0_105.jpeg')

# 画像を一度縮小(例:60×60)、その後拡大(例:300×300)してモザイク効果を実現
mosaic_im = im.resize((60, 60)).resize((300, 300))

# モザイク処理後の画像表示
plt.imshow(mosaic_im)
plt.show()

ぼかし(ガウス)

ぼかし処理は、画像のディテールを柔らかくし、エッジや細かい部分を滑らかにします。
Pillow の filter() メソッドと ImageFilter.GaussianBlur() を利用し、強度を指定して適用します。
ここでは、強度9のぼかしをかけます。

import matplotlib.pyplot as plt
from PIL import Image, ImageFilter

# 画像の読み込み
im = Image.open('cast_def_0_131.jpeg')

# ガウスぼかしを適用(強度9)
blurred_im = im.filter(ImageFilter.GaussianBlur(9))

# ぼかし処理後の画像表示
plt.imshow(blurred_im)
plt.show()

【課題】
読み込んだ画像データに対して、以下の処理を連続して行い、結果を表示してください。

  • 【処理1】画像のピクセル値を全て1.9倍にしてコントラストを調整
  • 【処理2】その後、強度9のガウスぼかしを適用

参考コード:

import matplotlib.pyplot as plt
from PIL import Image, ImageFilter

# 画像の読み込み
im = Image.open('cast_def_0_131.jpeg')

# 【処理1】コントラスト調節
temp_im = im.point(lambda x: x * 1.9)

# 【処理2】ガウスぼかし(強度9)
final_im = temp_im.filter(ImageFilter.GaussianBlur(9))

# 結果の画像表示
plt.imshow(final_im)
plt.show()

画像のエッジ検出

エッジ検出は、画像の輪郭や境界線を強調することで、特徴的な部分を抽出する手法です。
Pillow では、ImageFilter.FIND_EDGES を使うことで簡単にエッジ検出が可能です。

import matplotlib.pyplot as plt
from PIL import Image, ImageFilter

# 画像の読み込み
im = Image.open('cast_def_0_1056.jpeg')

# エッジ検出フィルターの適用
edge_im = im.filter(ImageFilter.FIND_EDGES)

# エッジ検出後の画像表示
plt.imshow(edge_im)
plt.show()

【課題】
読み込んだ画像データに対して、エッジ検出を実施し、画像を表示してください。
ヒント:ImageFilter.FIND_EDGES を使用します。


まとめ

今回の記事では、画像の特徴を理解するためのさまざまな画像処理手法を学びました。
各手法のポイントは以下の通りです。

  • 画像の反転:
    • 同じ画像から左右(または上下)を反転することで、データセットの多様性を増やす。
  • コントラスト調整・モザイク・ぼかし:
    • コントラスト調整で画像の明暗を変え、モザイクやぼかしでディテールを変化させる。
    • これらの加工により、学習時に多様な入力パターンをモデルに提供できる。
  • エッジ検出:
    • エッジ検出は、画像中の重要な境界や特徴を抽出し、欠陥箇所などの識別に役立つ可能性がある。

これらの技術は、実際の画像認識モデルの学習前処理やデータオーギュメンテーションとして、非常に有用です。
どの処理もシンプルながら効果的なテクニックですので、実際に手を動かしながら理解を深め、ぜひ前進・成長していってください!


【理解度チェック】

  • 画像反転の際、左右反転と上下反転ではどのような違いがあるか説明できますか?
  • コントラスト調整でピクセル値を変更すると、どのような効果が期待できるでしょうか?
  • モザイク処理はなぜ画像を縮小してから拡大することで実現できるのでしょうか?
  • エッジ検出を行うことで、どのような特徴が抽出できるでしょうか?

【練習課題】
上記の各手法を組み合わせ、元の画像と加工後の画像をsubplotで並べて比較してみましょう。
これにより、処理前後でどのような変化が生じるのかを視覚的に確認できます。

以上で「3.画像の特徴理解」の記事は終了です。
次回は「4.集めたデータの確認」として、実際に収集した画像データを解析し、学習に適した形に整える方法について解説します。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次