一般的な基本的なモルフォロジー操作は次のとおりです。
- scikit-image ライブラリのskimage.morphologyには、多くの画像形態学関連の API があります。モルフォロジー フィルタリングは、スキイメージに基本的なモルフォロジー フィルタリングを導入します。
- opencv ライブラリ関連の API はあまり多くありません.Expanded, erosion, Opening, Closing, Gradient, Black Hat, White Hat の7 つの操作しかないようです.
skimage には、0 ~ 1 のバイナリ イメージ用に最適化されたモルフォロジー演算が含まれており、より高速に実装できます。
骨抽出(画像間引き・画像間引き)
これはモルフォロジー処理の一種で、手書きの骨を抽出するときに使用しました。骨の抽出は、構造的な接続性を確保するという前提の下で画像を洗練します。
API 呼び出し
パッケージにはscikit-image
2 つの実装があり、使用方法は次のとおりです。
skimage.morphology.skeletonize
: 2D、3D、ndarray画像の骨抽出に使用可能skimage.morphology.thin
: バイナリ イメージのみskimage.morphology.medial_axis
: バイナリ イメージ。オブジェクトの境界に最も近い点が 1 つ以上ある点のコレクションです。多くの場合、トポロジー ボーンと呼ばれます。
from skimage import morphology
import cv2
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 转成灰度图
_, img_bin = cv2.threshold(img_gray, 100, 255, cv2.THRESH_BINARY_INV) # 二值化处理
img_bin[img_bin == 255] = 1 # 将值变成0-1,骨骼提取函数必须要输入01的二值化图象
# 方法一 skeletonize
img_skeleton = morphology.skeletonize(img_bin) # 骨骼提取
img = img_skeleton.astype(np.uint8) * 255 # 值从01重新映射回0-255
# 方法二 thin
img_thin = thin(img_bin)
img = img_thin.astype(np.uint8)
# 方法三 medial_axis
img_
応用
- 手書きの洗練: 数式を認識するとき、プラス記号と除算記号を混同して認識することがよくあるため、除算記号の 2 点ができるだけ離れているように数式イメージを洗練して、それらがとして認識されないようにします。プラス記号 . それは機能しますが、それほど多くはありません。
拡張する
腐食(浸食)
オープン操作→白いシルクハット変身
白いシルクハット:
構造化要素よりも小さい画像内の明るいスポットを返します
クローズドオペレーション→黒シルクハット変身
0 ~ 1 のバイナリ イメージの場合、閉じる操作が速くなります。skimage.morphology.binary_closing
Black Top Hat: Closed Operation - 元の画像
skimage.morphology.black_tophat
構造化要素よりも小さい画像内の黒い点を返します