數學形態學(mathematical morphology),簡稱形態學。專門用來處理、分析影像中的形狀。平移與反射這兩個方法高中已經學過了,接下來要介紹的是膨脹(dilation)與侵蝕(erosion)。
參考網站
或是可以看底下youtube一分鐘教學,動畫相信很容易了解~
接下來練習一下範例:
先看一下原始圖
%matplotlib inline
import os
import matplotlib.pyplot as plt
from skimage.data import data_dir
from skimage.util import img_as_ubyte
from skimage import io
orig_phantom = img_as_ubyte(io.imread(os.path.join(data_dir, "phantom.png"),
as_gray=True))
fig, ax = plt.subplots()
ax.imshow(orig_phantom, cmap=plt.cm.gray)
定義一個方便檢視差別的繪圖函數
def plot_comparison(original, filtered, filter_name):
fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(8, 4), sharex=True,
sharey=True)
ax1.imshow(original, cmap=plt.cm.gray)
ax1.set_title('original')
ax1.axis('off')
ax2.imshow(filtered, cmap=plt.cm.gray)
ax2.set_title(filter_name)
ax2.axis('off')
from skimage.morphology import dilation
from skimage.morphology import disk
selem = disk(6)
dilated = dilation(orig_phantom, selem)
plot_comparison(orig_phantom, dilated, 'dilation')
可發現較亮的灰階開始膨脹
eroded = erosion(orig_phantom, selem)
plot_comparison(orig_phantom, eroded, 'erosion')
可發現白色部分縮小了~
morphology還有其他功能的演算法像是Opening、Closing、Skeletonize、Convex hull等等,以後有需要再來找熟悉一下~