使用线性渐变创建图像遮罩

2024-03-29 12:15:34 发布

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

我正在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

这将返回一个shape(r,c)的掩码。我想做的是有一个加权掩模,在图像的中心(由中心参数给定)的权重为1,并向图像的边缘线性递减。因此,his应该是行中0到1(不包括0)之间的附加权重。我想这应该是:

^{pr2}$

但是,这将导致除以0,并且遮罩也不会介于0和1之间。在


Tags: 图像imageimportnumpydefasnpmask
1条回答
网友
1楼 · 发布于 2024-03-29 12:15:34

首先,如果你想把权重设为线性的,你需要取距离的平方根(也就是说,你所说的“距离”不是到中心的距离,而是它的平方,所以你应该把它重命名为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缩放该值,所以它是{},您希望结果是0。假设你想让它与中心相距0,那么你的方程是:

^{pr2}$

这里是1,其中r==0和{},其中{}。在

相关问题 更多 >