形態(tài)學(xué)處理,除了最基本的膨脹、腐蝕、開(kāi)/閉運(yùn)算、黑/白帽處理外,還有一些更高級(jí)的運(yùn)用,如凸包,連通區(qū)域標(biāo)記,刪除小塊區(qū)域等。
1、凸包
凸包是指一個(gè)凸多邊形,這個(gè)凸多邊形將圖片中所有的白色像素點(diǎn)都包含在內(nèi)。
函數(shù)為:
skimage.morphology.convex_hull_image(image)
輸入為二值圖像,輸出一個(gè)邏輯二值圖像。在凸包內(nèi)的點(diǎn)為T(mén)rue, 否則為False
例:
import matplotlib.pyplot as pltfrom skimage import data,color,morphology#生成二值測(cè)試圖像img=color.rgb2gray(data.horse())img=(img<0.5)*1chull = morphology.convex_hull_image(img)#繪制輪廓fig, axes = plt.subplots(1,2,figsize=(8,8))ax0, ax1= axes.ravel()ax0.imshow(img,plt.cm.gray)ax0.set_title('original image')ax1.imshow(chull,plt.cm.gray)ax1.set_title('convex_hull image')
convex_hull_image()是將圖片中的所有目標(biāo)看作一個(gè)整體,因此計(jì)算出來(lái)只有一個(gè)最小凸多邊形。如果圖中有多個(gè)目標(biāo)物體,每一個(gè)物體需要計(jì)算一個(gè)最小凸多邊形,則需要使用convex_hull_object()函數(shù)。
函數(shù)格式:skimage.morphology.convex_hull_object(image,neighbors=8)
輸入?yún)?shù)image是一個(gè)二值圖像,neighbors表示是采用4連通還是8連通,默認(rèn)為8連通。
例:
import matplotlib.pyplot as pltfrom skimage import data,color,morphology,feature#生成二值測(cè)試圖像img=color.rgb2gray(data.coins())#檢測(cè)canny邊緣,得到二值圖片edgs=feature.canny(img, sigma=3, low_threshold=10, high_threshold=50) chull = morphology.convex_hull_object(edgs)#繪制輪廓fig, axes = plt.subplots(1,2,figsize=(8,8))ax0, ax1= axes.ravel()ax0.imshow(edgs,plt.cm.gray)ax0.set_title('many objects')ax1.imshow(chull,plt.cm.gray)ax1.set_title('convex_hull image')plt.show()
2、連通區(qū)域標(biāo)記
在二值圖像中,如果兩個(gè)像素點(diǎn)相鄰且值相同(同為0或同為1),那么就認(rèn)為這兩個(gè)像素點(diǎn)在一個(gè)相互連通的區(qū)域內(nèi)。而同一個(gè)連通區(qū)域的所有像素點(diǎn),都用同一個(gè)數(shù)值來(lái)進(jìn)行標(biāo)記,這個(gè)過(guò)程就叫連通區(qū)域標(biāo)記。在判斷兩個(gè)像素是否相鄰時(shí),我們通常采用4連通或8連通判斷。在圖像中,最小的單位是像素,每個(gè)像素周?chē)?個(gè)鄰接像素,常見(jiàn)的鄰接關(guān)系有2種:4鄰接與8鄰接。4鄰接一共4個(gè)點(diǎn),即上下左右,如下左圖所示。8鄰接的點(diǎn)一共有8個(gè),包括了對(duì)角線(xiàn)位置的點(diǎn),如下右圖所示。

在skimage包中,我們采用measure子模塊下的label()函數(shù)來(lái)實(shí)現(xiàn)連通區(qū)域標(biāo)記。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注