モルフォロジー変換

モルフォロジー処理には収縮と膨張の 2 つの基本処理がある。画像中のオブジェクトに対して、収束や膨張を行うと、オブジェクトの周りあるいはオブジェクトの中に含まれているノイズを除去することができる。

収縮処理

収縮処理は、2 値画像に対して、畳み込みレイヤーを使用して畳み込みを行なっている。収縮処理では、画像と畳み込みレイヤーの AND 演算を行なっているので、畳み込みレイヤーの構成にもよるが、オブジェクトの境界付近の情報が消えやすくなる。そのため、収縮処理が施された画像中のオブジェクトは細くなる。

kernel = np.ones((3, 3), np.unit8)
img2 = cv2.erode(img, kernel, iterations=1)
OpenCVによる収縮処理

膨張処理

膨張処理は、同じく 2 値画像に対して、畳み込みレイヤーを使用して畳み込みを行なっている。膨張処理では、画像と畳み込みレイヤーの OR 演算を行なっているので、オブジェクトの境界付近の情報が増強しやすくなる。そのため、収縮処理が施された画像中のオブジェクトは太くなる。

kernel = np.ones((3, 3), np.unit8)
img2 = cv2.dilate(img, kernel, iterations=1)
OpenCVによる膨張処理

モルフォロジー変換

収縮処理と膨張処理を組み合わせたり、差分をとったりすることで、画像中のノイズを消したりすることができる。このようなモルフォロジー変換処理を行うメソッドは morphologyEx である。このメソッドは、第 1 引数に処理対象となる画像オブジェクトを、第 2 引数にモルフォロジー変換処理のモードを指定する定数を、第 3 引数に畳み込みレイヤーを与える。

img2 = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)

モルフォロジー変換処理のモードとして、オープニング処理 MORPH_OPEN のほかに、クロージング処理 MORPH_CLOSE 、モルフォロジー勾配処理 MORPH_GRADIENT、トップハット変換処理 morphologyEx、ブラックハット変換 MORPH_BLACKHAT がある。

オープニング処理 オープニング処理は、画像中のオブジェクトを収束させたあとに膨張させる処理のことである。オープニング処理は、画像中にホワイトノイズ(オブジェクトの背景にある細かいノイズ)を除去するのに適している。
クロージング処理 クロージング処理とは、画像中のオブジェクトを膨張させたあとに収縮させる処理のことである。クロージング処理は、オブジェクトの中に含まれる細かい黒点を埋めるのに適している。
モルフォロジー勾配処理 モルフォロジー勾配処理は、膨張させた画像と収縮させた画像の差分を求める処理である。
トップハット変換処理 トップハット変換は、入力画像とオープニング処理が施された画像の差分を求める処理である。
ブラックハット変換処理 ブラックハット変換は、入力画像とクロージング処理が施された画像の差分を求める処理である。