Python で OpenCV を使用した画像の侵食と膨張

Python で OpenCV を使用した画像の侵食と膨張

形態学的操作は、ピクセルの構造と配置に基づいて画像を変更します。入力画像にカーネルを適用し、隣接するピクセルの配置に応じてその特徴を変更します。侵食や膨張などの形態学的操作は、特にバイナリ画像やグレースケール画像に対する画像処理の手法です。これらは、形状を分析してノイズを除去し、オブジェクトの境界を調整するのに役立ちます。

侵食

画像処理におけるエロージョンは、オブジェクトのエッジにあるピクセルを削除してオブジェクトを効果的に小さくし、小さなホワイト ノイズを除去することにより、画像内のオブジェクトの境界を縮小および薄くする形態学的操作です。

目的

  • 前景オブジェクト (通常は白いピクセル) の境界を縮小または侵食します。
  • 微細なホワイトノイズを除去し、接触している物体を分離します。

仕組み

  • カーネル (通常は 3×3、5×5、または 7×7 の 1 の行列) が画像上をスライドします。
  • カーネルの下のすべてのピクセルが白である場合にのみ、ピクセルは白のままになります (1)。それ以外の場合は黒 (0) になります。
  • このプロセスにより、オブジェクトのサイズが縮小され、エッジが侵食されます。

拡張

膨張は、オブジェクトの端にピクセルを追加してオブジェクトを大きく見せ、小さなギャップや穴を埋めることによって、画像内のオブジェクトの境界を拡張する形態学的操作です。

目的:

  • 前景オブジェクトの境界を拡張します。
  • 特徴を強調または拡大し、小さな隙間を埋めます。

仕組み:

  • カーネルも同様に画像上で畳み込まれます。
  • 次の場合、ピクセルは白 (1) に設定されます。  少なくとも1つ  カーネルの下の対応するピクセルは白です。
  • その結果、白い領域が成長し、小さな穴が結合したり、壊れた部品が結合したりします。

エロージョンとディレーションの実装

PythonのOpenCVでErosionとDilationを実装してみよう

ステップ 1: ライブラリをインポートする

必要なライブラリをインポートします

  • CV2 : 画像処理用のOpenCVライブラリ。
  • しこり : 数値演算とカーネルの作成用。
  • matplotlib.pyplot : ノートブックに画像を表示します。

ステップ 2: 入力画像をロードし、構造化要素 (カーネル) を定義する

カーネルは、操作の近傍を定義します。一般的な選択肢は長方形または円板です。

使用画像は以下からダウンロードできます ここ

Python
   img   =   cv2  .  imread  (  'input.webp'     0  )   plt  .  imshow  (  img     cmap  =  'gray'  )   plt  .  title  (  'Original Image'  )   plt  .  axis  (  'off'  )   plt  .  show  ()   kernel   =   np  .  ones  ((  5     5  )   np  .  uint8  )   

出力:

オリジナル猫オリジナル

ステップ 3: 侵食を適用する

エロージョンは、画像上でカーネルをスライドさせることによって機能します。カーネルの下のすべてのピクセルが白の場合にのみピクセルは白 (255) のままで、それ以外の場合は黒 (0) になります。これにより、オブジェクトの境界が減り、小さなホワイト ノイズが除去されます。

Python
   img_erosion   =   cv2  .  erode  (  img     kernel     iterations  =  1  )   plt  .  imshow  (  img_erosion     cmap  =  'gray'  )   plt  .  title  (  'After Erosion'  )   plt  .  axis  (  'off'  )   plt  .  show  ()   

出力:

浸食侵食後

ステップ 4: 拡張を適用する

膨張によりカーネルが画像上でスライドし、カーネルの下の少なくとも 1 つのピクセルが白であれば、ピクセルが白になります。これにより、白い領域またはオブジェクトが厚くなり、小さな穴が埋められます。

Python
   img_dilation   =   cv2  .  dilate  (  img     kernel     iterations  =  1  )   plt  .  imshow  (  img_dilation     cmap  =  'gray'  )   plt  .  title  (  'After Dilation'  )   plt  .  axis  (  'off'  )   plt  .  show  ()   

出力:

拡張拡張後

アプリケーション

侵食

  • 画像から孤立したホワイト ノイズを除去します。
  • 結合または接触しているオブジェクトを分離する。
  • オブジェクトのサイズを縮小してオブジェクトの境界を見つけます。

拡張

  • 物体の小さな穴や隙間を埋めること。
  • 同じオブジェクトの壊れた部分または切断された部分を結合すること。
  • 侵食後に(「オープニング」操作の一部として)ノイズを除去したままオブジェクトのサイズを復元するために使用されます。

浸食と膨張は、画像処理における基本的な形態学的操作であり、これにより画像内の形状をきれいに調整したり操作したりすることができます。単純な構造要素を使用することで、これらのテクニックは、ノイズを除去してオブジェクトを分離したり接続したり、画像の特徴を強化したりするのに役立ち、OpenCV と Python を使用したコンピューター ビジョン タスクにおける効果的な前処理と分析に不可欠なツールになります。

クイズの作成