我在python中创建一个圆形掩码,如下所示:
import numpy as np
def make_mask(image, radius, center=(0, 0)):
r, c, d = image.shape
y, x = np.ogrid[-center[0]:r-center[0], -center[1]:r-center[1]]
mask = x*x + y*y <= radius*radius
array = np.zeros((r, c))
array[mask] = 1
return array
返回形状(r,c)的掩码。我想要做的是有一个加权蒙版,其中权重在图像中心为1(由中心参数给出),并朝图像边缘线性减小。因此,他应该是在行中0到1(0不包括)之间计算的附加权重。我认为这应该是这样的:
distance = (center[0] - x)**2 + (center[1] - y)**2
# weigh it inversely to distance from center
mask = (x*x + y*y) * 1.0/distance
但是,这将导致除以0,并且掩码也不会介于0和1之间。
答案 0 :(得分:1)
首先,如果你想要加权线性,你需要取你所拥有的距离的平方根(即你所谓的“距离”不是距离从中心但是它的方块,所以你应该将它重命名为R_squared
)。所以:
R_squared = (center[0] - x)**2 + (center[1] - y)**2 # what you have for distance
r = sqrt(R_squared)
然后,因为它始于0
,您希望它1
,所以添加1
;但是现在您已添加1
缩放值,因此它是1
,您希望结果为0
。假设您希望0
距离中心L
,那么您的等式是:
weight = 1 - r/L
此处1
位于r==0
,0
位于r==L
。