使用线性渐变创建图像蒙版

时间:2015-01-27 12:32:03

标签: python image-processing numpy

我在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之间。

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==00位于r==L