OpenCV-Pythonが腐食と膨張を実現した例


形態学とは何か
腐食を知る前に、我々は一つの概念を理解する必要があります。形態学。
形態学は、また、数学形態学(Mathematical Morphology)とも呼ばれ、画像処理において非常に重要な研究方向である。形態学は主に画像内から成分情報を抽出し、この成分情報は一般的に画像の形状を表現して描くことに重要な意味を持ち、通常は画像理解時に使用される最も本質的な形状特徴である。
例えば、手書き数字を識別する際には、形態学的演算によりその骨格情報を得ることができ、具体的な識別の際には、その骨格だけを演算すればよい。形態学的処理は視覚検査、文字認識、医学画像処理、画像圧縮符号化などの分野で非常に重要な応用がある。
形態学的操作は主に腐食、膨張、演算、閉算、形態学勾配演算、トップハット演算、ブラックハット演算などの操作を含む。腐食操作と膨張操作は形態学の演算基盤であり、腐食と膨張を組み合わせて演算、開閉演算、形態学的勾配などの異なる形の演算が可能である。
だから、このブログは腐食と膨張について重点的に説明します。
腐食
腐食は最も基本的な形態動作の一つであり、画像の境界点を除去し、境界に沿って画像を内部に収縮させることができ、また指定された構造体要素より小さい部分を除去することができる。腐食は主に「収縮」または「微細化」の二値画像における見通しに用いられ、これにより騒音除去、元素分割などの機能を実現する。
腐食の過程では、通常、1つの構造要素を用いて、腐食する画像を1画素ずつ走査し、構造要素と腐食される画像の関係に基づいて腐食結果を決定する。
まず、腐食処理図を見ます。
腐蚀矩阵
(1)腐食するイメージを示す
(2)構造要素
(3)オレンジ色の数字は、構造要素が画像を遍歴する時、構造要素が完全に前景オブジェクトの内部に位置している時の3つのすべての可能な位置である。このとき、構造要素はそれぞれimg[2,1]に位置し、[2,2]に位置する。
(4)腐食結果resultとは、構造要素が完全に前景画像に位置する場合、心点に対応するreultの画素点の値を1とする。構造要素が前景画像に完全に位置していない場合、その中心点に対応するreultの画素点は0となる(位別と)
OpenCVでは、関数cv 2.erode()を使用して腐食操作を実現し、その完全な定義は以下の通りである。

def erode(src, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None):
src:オリジナル画像
ケネル:構造元は、カスタマイズできます。また、関数cv 2.get StructuringElement()によって生成されます。
iterations:腐食操作の繰り返しの回数は、デフォルトでは1、つまり一回だけの操作です。
他のパラメータや取得値については、前のブログで紹介されていますが、ここでは詳しく説明しません。
以下、この関数を使って腐食の操作をテストします。

import cv2
import numpy as np

img = cv2.imread("8.jpg",cv2.IMREAD_UNCHANGED)
kernel = np.ones((9,9), np.float32)
result = cv2.erode(img,kernel)
cv2.imshow("img", img)
cv2.imshow("result", result)
cv2.waitKey()
cv2.destroyAllWindows()
運行後、私達が得た効果の比較図は以下の通りです。
腐蚀
腐食操作が元の画像内のバリを腐食させてしまうことが見られますが、より深刻な腐食を望むなら、iterationsパラメータの値を設定することができます。
膨張する
膨張は腐食と正反対で,膨張は画像の境界を拡張することができる。膨張動作は、現在のオブジェクト(前景)に接触する背景点を現在のオブジェクトに統合し、画像の境界点を外側に拡大することを実現する。画像内の2つのオブジェクトの距離が近い場合は、膨張後に接続することがあります。
膨張操作は、画像分割後の画像内に存在する空白を埋めるのに役立つ。同様に,膨張も構造要素一つで動作する必要がある。次に、膨脹の原理をマトリクスで説明します。
膨胀
(1)膨張する原図
(2)構造要素
(3)オレンジ部分が構造元の図を巡る場合、構造元の中心画素点が[1,1]に位置し、[3,3]に位置する場合、前景色と重なる画素点がある場合、実際には9つのこのような前景オブジェクトと重なる可能性のある位置があります。構造要素センターはそれぞれ、[img]1,1]にあり、[img]1,3]にあり、[img]2,1[img]にあり、[img]2,2[img]にあり、[img]3,1]にあり、[img]3,2]にあります。
(4)膨張後の結果画像resultは、構造要素内で、いずれかの画素点が前景オブジェクトと重なる場合、心点に対応する膨張結果画像内の画素点の値が1である。構造要素が前景オブジェクトと完全に一致しない場合、心点に対応する膨張結果画像内の画素点の値は0となる(位または位で
OpenCVでは,cv 2.dilate()を提供して画像の膨張動作を実現した。その完全な定義は以下の通りである。

def dilate(src, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None): 
src:オリジナル画像
ケネル:構造元
他のパラメータは上記と一致しており、詳細には記載されていません。次に、この関数を使って膨張の効果をテストします。具体的なコードは以下の通りです。

import cv2
import numpy as np

img = cv2.imread("8.jpg",cv2.IMREAD_UNCHANGED)
kernel = np.ones((9,9), np.float32)
result = cv2.dilate(img,kernel)
cv2.imshow("img", img)
cv2.imshow("result", result)
cv2.waitKey()
cv2.destroyAllWindows()
運転後の効果は以下の通りです。
膨胀
画像のアイコンが膨らんで体とつながっているのと、隣のラインが太くなっているのが見えます。もっと膨張したいなら、iterationsパラメータの値を変更できます。
ここで、OpenCV-Pythonの腐食と膨張を実現する実例についての記事を紹介します。OpenCVの腐食と膨張に関する詳細については、以前の文章を検索してください。また、下記の関連記事をご覧ください。これからもよろしくお願いします。