最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python進(jìn)行常見圖像形態(tài)學(xué)處理操作的示例代碼

 更新時(shí)間:2024年03月01日 10:02:42   作者:微小冷  
這篇文章主要為大家詳細(xì)介紹了如何使用Python進(jìn)行常見的圖像形態(tài)學(xué)處理,例如腐蝕、膨脹、禮帽、黑帽等,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

最基礎(chǔ)的形態(tài)學(xué)操作有四個(gè),分別是腐蝕、膨脹、開計(jì)算和閉計(jì)算,【scipy.ndimage】分別實(shí)現(xiàn)了二值數(shù)組和灰度數(shù)組的這四種運(yùn)算。而針對灰度圖像,【scipy.ndimage】還提供了禮帽、黑帽、形態(tài)學(xué)梯度和拉普拉斯梯度等操作。

二值形態(tài)學(xué)

二值圖像中只有0和1兩種元素,故而可將其表示為元素值為1的元素位置集合A={(i,j)∣Aij?=1},則腐蝕和膨脹可表示為

A?B={(i,j)∣Bij?⊆A}

A⊕B?={(i,j)∣Bij?∪A≠∅}?

其中Bij表示當(dāng)B的原點(diǎn)在(i,j)處時(shí),B中所有為1的值的集合。

用結(jié)構(gòu)B腐蝕A,當(dāng)B的原點(diǎn)平移到圖像A的像元(i,j)時(shí),若B完全被二者的重疊區(qū)域所包圍,則賦值為1,否則賦值為0。更直觀的例子是,如果B中為1的元素位置上,對應(yīng)的A的像素值也都為1,則(i,j)處為1。膨脹則與之相反。

開運(yùn)算和閉運(yùn)算則是腐蝕、膨脹的疊加,開運(yùn)算是先腐蝕后膨脹;閉運(yùn)算是先膨脹后腐蝕。這四種運(yùn)算的差別如下

二值圖像的腐蝕、膨脹、開、閉運(yùn)算分別由函數(shù)binary_erosion, binary_dilation, binary_opening, binary_closing來是實(shí)現(xiàn),上述繪圖代碼如下。

import numpy as np
import matplotlib.pyplot as plt
import scipy.ndimage as sn

x = np.zeros([20,20])
x[5:15, 5:15] = 1
x[10:12,10:12] = 0
x[2:4, 2:4] = 1

func = {
    "origin": lambda x : x,
    "erosion": sn.binary_erosion,
    "dilation": sn.binary_dilation,
    "opening": sn.binary_opening,
    "closing": sn.binary_closing
}

fig = plt.figure()
for i,key in enumerate(func):
    ax = fig.add_subplot(2,3,i+1)
    ax.imshow(func[key](x))
    plt.title(key)

plt.show()

灰度形態(tài)學(xué)

【ndimage】中為灰度圖像也提供了腐蝕、膨脹、開、閉運(yùn)算,只需將二值函數(shù)中的binary替換為grey即可。此外,針對灰度圖像,【ndimage】還額外提供了四種運(yùn)算,如下表所示

函數(shù)名稱備注
morphological_gradient形態(tài)學(xué)梯度膨脹圖減去腐蝕圖
white_tophat禮帽(頂帽)運(yùn)算原圖減去開運(yùn)算
black_tophat黑帽(底帽)運(yùn)算原圖減去閉運(yùn)算
morphological_laplace拉普拉斯變換

這些方法的差異如下

繪圖代碼如下。

from scipy.misc import ascent
img = ascent()

funcs = {
    "original": lambda x, tmp:x,
    "erosion" : sn.grey_erosion,
    "dilation" : sn.grey_dilation,
    "opening" : sn.grey_opening,
    "closing" : sn.grey_closing
}

fig = plt.figure()
for i, key in enumerate(funcs):
    ax = fig.add_subplot(2,5,i+1)
    plt.imshow(funcs[key](img, (10,10)), cmap=plt.cm.gray)
    plt.axis('off')
    plt.title(key)


ori = img[350:500, 400:500]
funcs = {
    "ori": lambda x, tmp:x,
    "white" : sn.white_tophat,
    "black" : sn.black_tophat,
    "gradient" : sn.morphological_gradient,
    "laplace" : sn.morphological_laplace,
}

for i, key in enumerate(funcs):
    ax = fig.add_subplot(2,5,i+6)
    plt.imshow(funcs[key](ori, (5,5)), cmap=plt.cm.gray)
    plt.title(key)
    plt.axis('off')

plt.show()

參數(shù)列表

二值函數(shù)和灰度函數(shù)的參數(shù)并不相同,下面以closing運(yùn)算為例,二值和灰度函數(shù)的所有參數(shù),除了輸入input之外,二者共有的參數(shù)有

structure 為數(shù)組類型,表示構(gòu)造元素,可以理解為是卷積模板

output 與輸入相同維度的數(shù)組,可以存下結(jié)果

orgin 過濾器設(shè)置,默認(rèn)為0

二值形態(tài)學(xué)濾波的其他參數(shù)如下

binary_closing(input, iterations=1, mask=None, border_value=0, brute_force=False)

其中

iterations 執(zhí)行次數(shù)

mask 掩模數(shù)組,為bool類型的數(shù)組,對應(yīng)False的位置將不會(huì)改變

border_value 邊緣處的值

brute_force 如果為False,則只有上次迭代中發(fā)生變化的值才會(huì)更新

grey_closing(input, size=None, footprint=None, mode='reflect', cval=0.0)

size 為濾波模板

mode 可選reflect,constant,nearest,mirror, wrap,邊緣填充方式

cval 邊緣填充值

到此這篇關(guān)于Python進(jìn)行常見圖像形態(tài)學(xué)處理操作的示例代碼的文章就介紹到這了,更多相關(guān)Python圖像形態(tài)學(xué)處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

安丘市| 房产| 潞西市| 阿合奇县| 武川县| 罗平县| 巴彦淖尔市| 牟定县| 区。| 调兵山市| 东兰县| 共和县| 永靖县| 韩城市| 龙川县| 西平县| 茶陵县| 衡阳县| 宝鸡市| 长乐市| 长子县| 萨嘎县| 城口县| 平舆县| 奇台县| 巩义市| 登封市| 西和县| 遂平县| 中西区| 新巴尔虎左旗| 鄯善县| 南平市| 丰宁| 金昌市| 长垣县| 高阳县| 根河市| 东乡| 平邑县| 育儿|