You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Numpy(Python 3)生成软圆形掩膜:计算像素被圆覆盖的面积占比

软圆形掩膜实现方案

核心思路

你需要的软边缘圆形掩膜可以通过超采样统计法实现,该方案不需要复杂的几何相交面积计算,实现逻辑简单,且精度可调,完全满足你1%误差的要求。
具体逻辑为:将每个原始像素拆分为N×N个更小的采样点,统计每个原始像素对应采样点中落在圆内的比例,该比例即为该像素的权重。当N取10时,最大误差不超过1%,刚好符合你的精度要求。

实现代码

接口完全兼容你之前使用的二值掩膜、高斯掩膜函数,可直接替换:

import numpy as np

def soft_circle(size=19, r=7, x_offset=0, y_offset=0, sample_scale=10):
    # sample_scale为超采样倍率,取值10时误差上限为1%,可按需调整
    high_res_size = size * sample_scale
    # 计算超采样网格下的圆心坐标
    x0 = y0 = (size / 2) * sample_scale
    x0 += x_offset * sample_scale
    y0 += y_offset * sample_scale
    # 生成超采样坐标网格,保持y轴方向和原有函数一致
    y, x = np.ogrid[:high_res_size, :high_res_size]
    y = y[::-1]
    
    # 生成超采样分辨率的二值圆掩膜
    high_res_mask = ((x - x0)**2 + (y - y0)**2) <= (r * sample_scale)**2
    high_res_mask = high_res_mask.astype(np.float32)
    
    # 平均池化降采样回原始尺寸,得到每个像素的覆盖比例权重
    mask = high_res_mask.reshape(size, sample_scale, size, sample_scale).mean(axis=(1, 3))
    return mask

方案优势

  • 完全匹配需求:完全落在圆内的像素权重固定为1,边缘像素权重等于实际覆盖面积占比,不会出现高斯掩膜内部权重下降的问题
  • 实现成本低:不需要处理圆形和正方形相交的复杂几何边界判断,不易出逻辑错误
  • 精度灵活可调:修改sample_scale参数即可调整精度,取值越大误差越小,10即可满足你1%的误差要求
  • 接口兼容:参数和你原有掩膜函数完全对齐,调用侧不需要修改逻辑即可替换使用

内容的提问来源于stack exchange,提问作者OM222O

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 12:45:07