二维阵列边缘截断的圆形掩模切口

2024-10-03 15:30:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个2dnumpy数组,我想屏蔽一些特定元素周围的圆形区域。对于不靠近边缘的元素,这很容易。但是当磁盘在接近阵列边缘的位置被截断时,掩蔽操作抛出一个异常。在

有什么方法可以屏蔽这些边缘源?定期填充。。?谢谢!在

下面是一些代码:

import numpy as np

x_count = 20000
y_count = 20000

a = np.arange(y_count * x_count).reshape(y_count, x_count) # data
master_mask=np.zeros(a.shape).astype(bool)

coords=([10,50],[500,400])
nsrc=len(coords)
mask_radius=100 # 10, 20, etc.

for isrc in range(nsrc):
    xc=coords[isrc][0]; yc=coords[isrc][1]
    x,y = np.ogrid[-mask_radius:mask_radius+1,-mask_radius:mask_radius+1]
    minimask = x*x + y*y <= mask_radius*mask_radius
    box=master_mask[xc-mask_radius:xc+mask_radius+1,yc-mask_radius:yc+mask_radius+1]
    assert(minimask.shape==box.shape), 'This assertion should fail for discs touching the edge'
    master_mask[xc-mask_radius:xc+mask_radius+1,yc-mask_radius:yc+mask_radius+1] += minimask

print master_mask

Tags: master元素countnpmaskcoords边缘屏蔽
1条回答
网友
1楼 · 发布于 2024-10-03 15:30:05

这里有一个可能的答案(行人),尽管我希望有一个更像裸体的方式。在

import numpy as np

x_count = 20000
y_count = 20000

a = np.arange(y_count * x_count).reshape(y_count, x_count) # data
master_mask=np.zeros(a.shape).astype(bool)

coords=([10,50],[500,400])
nsrc=len(coords)
mask_radius=100 # 10, 20, etc.

for isrc in range(nsrc):
    xc=coords[isrc][0]; yc=coords[isrc][1]
    # Truncate the postage-stamp mask here
    xmin=max(xc-mask_radius,0); xmax=min(xc+mask_radius+1,x_count)
    ymin=max(yc-mask_radius,0); ymax=min(yc+mask_radius+1,y_count)
    x,y = np.ogrid[xmin:xmax,ymin:ymax]

    minimask = x*x + y*y <= mask_radius*mask_radius
    box=master_mask[xmin:xmax,ymin:ymax]
    #assert(minimask.shape==box.shape), 'This assertion should fail for discs near the edge'
    master_mask[xmin:xmax,ymin:ymax] += minimask

print master_mask

相关问题 更多 >