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

skimage添加高斯噪声做数据增强时如何排除白色背景区域

高斯噪声添加排除白色背景的实现方法

核心逻辑很简单:random_noise默认会对传入图像的所有像素叠加噪声,不需要修改噪声生成逻辑,只要提前识别出白色背景的区域,加噪后把这部分区域的像素还原为原始值即可。

具体操作分三步:

  • 识别白色背景区域:random_noise处理的是0~1范围的归一化图像值,纯白色像素三通道值均为1,设置合理阈值(比如0.99,可根据数据集实际情况调整),筛选出所有三通道值都大于阈值的像素,生成布尔型的背景掩码。
  • 按照原有逻辑对全图叠加高斯噪声。
  • 用之前生成的背景掩码做索引,把加噪结果中对应背景位置的像素替换为原始图像的白色像素值,即可保证背景区域完全不受噪声影响。

修改后的完整代码如下:

def save_noisy_image(img, name):
    img = img.view(img.size(0), 3, 180, 180)
    save_image(img, name)

def gaussian_noise():
    for data in dataloader:
        newuuid = str(uuid.uuid4())
        img, _ = data['image'], data['labels']
        
        # 生成白色背景掩码,三通道值均高于阈值判定为背景
        bg_mask = (img[:, 0, :, :] > 0.99) & (img[:, 1, :, :] > 0.99) & (img[:, 2, :, :] > 0.99)
        # 扩展掩码维度匹配图像的通道数,方便批量索引
        bg_mask = bg_mask.unsqueeze(1).repeat(1, 3, 1, 1)
        
        # 原有加噪逻辑
        gauss_img = torch.tensor(random_noise(img, mode='gaussian', mean=0, var=0.05, clip=True))
        
        # 还原背景区域像素
        gauss_img[bg_mask] = img[bg_mask]
        
        save_noisy_image(gauss_img, "/tmp/tests/"+newuuid+".png")  
        break

gaussian_noise()

补充说明:如果你的数据集存在图像压缩导致的背景不是严格纯白,可以适当调低阈值到0.97左右,避免漏判背景;如果数据集自带前景/背景的分割标注,直接用标注生成掩码会比颜色阈值判断的准确率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 09:06:20