Python實(shí)現(xiàn)統(tǒng)計(jì)圖像連通域的示例詳解
數(shù)組統(tǒng)計(jì)函數(shù)
ndimage提供一系列函數(shù),可以計(jì)算標(biāo)注后的數(shù)組的相關(guān)特征,比如最值、均值、均方根等。
下列函數(shù),如果未作其他說(shuō)明,那么就有3個(gè)參數(shù),分別是(input, labels=None, index=None),其中input為輸入數(shù)組;labels為input的標(biāo)簽,形狀和input相同;index為整數(shù)或者整數(shù)數(shù)列,為用于計(jì)算的label。
函數(shù) | 物理量 | 函數(shù) | 物理量 |
---|---|---|---|
mean | 平均值 | center_of_mass | 質(zhì)心 |
maximum | 最大值 | maximum_position | 最大值位置 |
minimum | 最小值 | minimum_position | 最小值位置 |
median | 中位數(shù) | extrema | 最大值、最小值,及其位置 |
sum_labels | 求和 | ||
variance | 方差 | standard_deviation | 標(biāo)準(zhǔn)差 |
示例如下
import numpy as np import scipy.ndimage as sn x = np.random.randint(10, size=(3,3)) print(x) ''' [[0 3 5] [9 3 1] [1 5 7]] ''' sn.center_of_mass(x) # (1.1470588235294117, 1.088235294117647) sn.extrema(x) # (0, 9, (0, 0), (1, 0))
連通域標(biāo)記
通過(guò)label函數(shù),可以對(duì)數(shù)組中的連通區(qū)域進(jìn)行標(biāo)注,效果如下
from scipy.ndimage import label import numpy as np a = np.array([[0,0,1,1,0,0], [0,0,0,1,0,0], [1,1,0,0,1,0], [0,0,0,1,0,0]]) labels, N = label(a) print(labels) ''' [[0 0 1 1 0 0] [0 0 0 1 0 0] [2 2 0 0 3 0] [0 0 0 4 0 0]] ''' print(N) 4
在label函數(shù)中,還有一個(gè)用于規(guī)范何為“連通”的參數(shù),即structure,其數(shù)據(jù)類型為二值數(shù)組,其維度與輸入的input相同。
在上面的示例中,連通域1,3,4盡管沒(méi)有上下左右的聯(lián)系,但在對(duì)角線上是有交集的,通過(guò)調(diào)整structure參數(shù),可以提供一種將這三個(gè)區(qū)域連在一起的連通域方案。
stru = np.ones([3,3]) bLab, bN = label(a, stru) print(bLab) ‘'‘ [[0 0 1 1 0 0] [0 0 0 1 0 0] [2 2 0 0 1 0] [0 0 0 1 0 0]] '‘'
可見(jiàn),這次只選出了兩組連通域。
連通域統(tǒng)計(jì)
前面提到的所有統(tǒng)計(jì)函數(shù),形參都有三個(gè),分別是input, labels, index,其中input為輸入數(shù)組,labels為將要處理的連通域,index為準(zhǔn)備處理的連通域序號(hào)。
np.random.seed(42) test = np.random.rand(5,5) test[test<0.8] = 0 labels, N = sn.label(test) print(N) # 2 print(labels) # ‘'‘ [[0 1 0 0 0] [0 0 2 0 0] [0 2 2 0 0] [0 0 0 0 0] [0 0 0 0 0]] '‘' print(test) ‘'‘ [[0. 0.95071431 0. 0. 0. ] [0. 0. 0.86617615 0. 0. ] [0. 0.96990985 0.83244264 0. 0. ] [0. 0. 0. 0. 0. ] [0. 0. 0. 0. 0. ]] '‘'
接下來(lái)通過(guò)連通域統(tǒng)計(jì)函數(shù),針對(duì)某個(gè)連通域進(jìn)行計(jì)算
>>> sn.mean(test, labels, 1) 0.9507143064099162 >>> sn.mean(test, labels, 2) 0.8895095462457837 >>> sn.mean(test, labels, 0) 0.0
當(dāng)index=1時(shí),會(huì)找出labels中為1的位置,然后把test中這些位置的元素求平均。
到此這篇關(guān)于Python實(shí)現(xiàn)統(tǒng)計(jì)圖像連通域的示例詳解的文章就介紹到這了,更多相關(guān)Python統(tǒng)計(jì)圖像連通域內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python引入多個(gè)模塊及包的概念過(guò)程解析
這篇文章主要介紹了Python引入多個(gè)模塊及包的概念過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09基于Python實(shí)現(xiàn)全自動(dòng)下載抖音視頻
這篇文章主要介紹了基于Python實(shí)現(xiàn)全自動(dòng)下載抖音視頻,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11numpy 中l(wèi)inspace函數(shù)的使用
本文主要介紹了numpy 中l(wèi)inspace函數(shù)的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03淺談Python實(shí)現(xiàn)Apriori算法介紹
這篇文章主要介紹了淺談Python實(shí)現(xiàn)Apriori算法介紹,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-12-12Python使用shelve模塊實(shí)現(xiàn)簡(jiǎn)單數(shù)據(jù)存儲(chǔ)的方法
這篇文章主要介紹了Python使用shelve模塊實(shí)現(xiàn)簡(jiǎn)單數(shù)據(jù)存儲(chǔ)的方法,涉及shelve模塊實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)的技巧,需要的朋友可以參考下2015-05-05