中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python怎么實現標記數組的連通域

發布時間:2023-04-20 11:25:57 來源:億速云 閱讀:107 作者:iii 欄目:開發技術

本篇內容介紹了“Python怎么實現標記數組的連通域”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

連通域標記

通過label函數,可以對數組中的連通區域進行標注,效果如下

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

其中,a是一個二值矩陣,經過label標記后,其相連通的部分分別被標上了序號。可以更直觀地用圖像顯示一下

import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(121)
plt.imshow(a)
ax = fig.add_subplot(122)
plt.imshow(labels)
plt.show()

Python怎么實現標記數組的連通域

structure參數

在label函數中,還有一個用于規范何為“連通”的參數,即structure,其數據類型為二值數組,其維度與輸入的input相同。

在上面的示例中,連通域1,3,4盡管沒有上下左右的聯系,但在對角線上是有交集的,通過調整structure參數,可以提供一種將這三個區域連在一起的連通域方案。

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]]
'‘'

可見,這次只選出了兩組連通域。

操作連通域

scipy.ndimage提供了labeled_comprehension函數,其功能大致相當于[func(input[labels == i]) for i in index],即從已經做好連。通域標記的數組中,取出序號為index所在區域的值,參數如下

labeled_comprehension(input, labels, index, func, out_dtype, default, pass_positions=False)

其中input為輸入數組;labels是已經做好的連通域標記;index為將要挑選進行操作的連通域序號;func為具體的操作函數;out_dtype為輸出數據類型;default表示,當index不存在于連通域標記中時的輸出值,下面做一個示例

from scipy.ndimage import labeled_comprehension
labeled_comprehension(a, labels, [1,2,3,4], sum, int, 0)
# array([3, 2, 1, 1])

連通域序號為1,2,3,4的區域,分別有3,2,1,1個元素,而且所有元素都是1,所以求和之后的值為[3, 2, 1, 1]。

定位連通域

scipy.ndimage中的find_objects函數可以返回連通域的切片范圍。

from scipy.ndimage import find_objects
axis = find_objects(labels)
for x,y in axis:
    print(x, y)

'''
slice(0, 2, None) slice(2, 4, None)
slice(2, 3, None) slice(0, 2, None)
slice(2, 3, None) slice(4, 5, None)
slice(3, 4, None) slice(3, 4, None)
''''

如果根據這個對原數組進行切片,就可以得到其對應的標記區域

for x,y in axis:
    print(labels[x,y])
    print("--------")
'''
[[1 1]
 [0 1]]
--------
[[2 2]]
--------
[[3]]
--------
[[4]]
--------
'''

“Python怎么實現標記數組的連通域”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

孝感市| 岳阳县| 青海省| 榆社县| 临沂市| 黄浦区| 正蓝旗| 临武县| 锡林浩特市| 土默特左旗| 阜平县| 乃东县| 如皋市| 城口县| 深州市| 望都县| 绥滨县| 长顺县| 澎湖县| 北安市| 高安市| 民县| 榕江县| 黑龙江省| 长沙县| 刚察县| 南涧| 化州市| 上饶市| 同江市| 黄陵县| 来宾市| 集安市| 河池市| 依兰县| 桑日县| 长丰县| 宜宾县| 呼伦贝尔市| 始兴县| 乐都县|