行走的蓑衣客

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
统计
 
复制代码
#Python计算矩阵8邻域之和
Neighbors = [(1, 1), (1, -1), (1, 0), (-1, 0), (-1, 1), (-1, -1), (0, 1), (0, -1)]
 
def get_neighbors_sum(array_of_arrays, row, col):
    sum_neighbors = 0
    for neighbor in Neighbors:
        dr, dc = neighbor
        try:
            sum_neighbors += array_of_arrays[row+dr][col+dc]
        except IndexError:
            pass
    return sum_neighbors
 
array_of_arrays = #"Matrix"
rows = len(array_of_arrays)
cols = len(array_of_arrays[0])
 
for row in range(rows):
    for col in range(cols):
        sum_neighbors = get_neighbors_sum(array_of_arrays, row, c
复制代码

图像连通区域标记

复制代码
def countRegion(img):
    [high,width] = np.shape(img)
    mask  = np.zeros_like(img)
    mark  = 0
    union = {}
    for i in range (high):
        for j in range(width):
            if i==0 and j==0:
                if img[i][j]==255:
                    mark=mark+1
                    mask[i][j]=mark
                    union[mark]=mark
            if i==0 and j!=0:
                if img[i][j]==255:
                    left = mask[i][j-1]
                    if left!=0:
                        mask[i][j]=left
                    else:
                        mark = mark +1
                        mask[i][j]=mark
                        union[mark]=mark
            if  j==0 and i!=0:
                if img[i][j]==255:
                    up  = mask[i-1][j]
                    up_right = mask[i-1][j+1]
                    if up==0 and up_right==0:
                        mark = mark+1
                        mask[i][j]=mark
                        union[mark]=mark
                    if up==0 and up_right!=0:
                        mask[i][j]=up_right
                    if up_right==0 and up!=0:
                        mask[i][j]=up
                    if up!=0 and up_right!=0:
                        if up==up_right:
                            mask[i][j]=up
                        else:
                            mi = min(up,up_right)
                            mask[i][j]=mi
                            if up<up_right:
                                union[up_right]=up
                            else:
                                union[up]=up_right
            if i!=0 and j!=0:
                if img[i][j]==255:
                    up = mask[i-1][j]
                    up_left = mask[i-1][j-1]
                    left = mask[i][j-1]
                    up_right = 0
                    if j+1<width:
                        up_right = mask[i-1][j+1]
                    ma = max(max(max(up,up_left),up_right),left)
                    if ma==0:
                        mark = mark+1
                        mask[i][j]=mark
                        union[mark]=mark
                    else:
                        if up==up_right and up_right==up_left and up==left:
                            mask[i][j]=up
                        else:
                            mi = min(min(min(up, up_left), up_right), left)
                            if mi!=0:
                                mask[i][j]=mi
                                if up!=mi:
                                    union[up]=mi
                                if up_right!=mi:
                                    union[up_right]=mi
                                if up_left!=mi:
                                    union[up_left]=mi
                                if left!=mi:
                                    union[left]=mi
                            else:
                                n_zero = []
                                if up!=0:
                                    n_zero.append(up)
                                if up_left!=0:
                                    n_zero.append(up_left)
                                if up_right!=0:
                                    n_zero.append(up_right)
                                if left!=0:
                                    n_zero.append(left)
                                mi1 = min(n_zero)
                                mask[i][j]=mi1
                                for it in n_zero:
                                    if it!=mi1:
                                        union[it]=mi1
    for i in range(high):
        for j in range(width):
            key = mask[i][j]
            if key!=0:
                while union[key]!=key:
                    key = union[key]
                mask[i][j]=key
    return mask
复制代码

 

posted on   行走的蓑衣客  阅读(873)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
 
点击右上角即可分享
微信分享提示