我有一个numpy数组ys_big_seg
,它的形状如下:(146, 128, 128).它包含像素掩码,其值可以是0 or 1.如果像素属于给定类别,则为1,否则为0.我必须将其zoom 到binary mask.所以我想遍历(128,128)矩阵,并将其拆分为(8,8)矩阵,然后基于较小的矩阵值(如果每个元素为0,则为0,如果每个元素为1,则为1,如果存在混合值,则随机为0或1)用给定值替换这些较小的矩阵,以将(128,128)矩阵减少到(16, 16).
我如何解决这个问题?
我有一个numpy数组ys_big_seg
,它的形状如下:(146, 128, 128).它包含像素掩码,其值可以是0 or 1.如果像素属于给定类别,则为1,否则为0.我必须将其zoom 到binary mask.所以我想遍历(128,128)矩阵,并将其拆分为(8,8)矩阵,然后基于较小的矩阵值(如果每个元素为0,则为0,如果每个元素为1,则为1,如果存在混合值,则随机为0或1)用给定值替换这些较小的矩阵,以将(128,128)矩阵减少到(16, 16).
我如何解决这个问题?
我想这正是你想要的:
>>> x.shape
(146, 128, 128)
>>> mask = x.reshape(-1, 16, 16, 8, 8).sum(axis=(3, 4)) >= 32
>>> mask.shape
(146, 16, 16)
如果总和为>;=32(即,一半或更多的值为1),因此它不是quite个随机 Select 的值.
显然,0的总和(8x8块中的所有元素均为0)将"不符合"该标准,且为0,64的总和(8x8块中的所有元素均为1)将"通过"并最终为1.如果矩阵稀疏得多,则可以将阈值从32
降低到32
.
由于将此数组用作掩码,因此可以将1和0保留为布尔对应项.但是如果您计划将掩码用作二进制数组,那么可以轻松地添加.astype(int)
.