Files
CavinHuang-comfyui-nodes-docs/docs/SaltMaskNoiseAddition.md
2024-07-04 08:39:03 +08:00

2.9 KiB

Documentation

SaltMaskNoiseAddition节点专门设计用于向蒙版区域引入噪声,模拟真实场景中可能出现的变化和不完美之处。它允许通过诸如均值和标准差等参数来自定义噪声特征,从而实现广泛的噪声效果。

Input types

Required

  • masks
    • masks输入是一组将被添加噪声的蒙版区域。这个参数对于定义噪声效果将应用的区域至关重要,直接影响节点的执行和噪声添加的视觉效果。
    • Comfy dtype: MASK
    • Python dtype: torch.Tensor

Optional

  • mean
    • mean参数指定了噪声分布的平均值。调整这个值可以控制所添加噪声的整体亮度或暗度,从而影响蒙版的视觉表现。
    • Comfy dtype: FLOAT
    • Python dtype: float
  • stddev
    • stddev参数决定了噪声分布的标准差。这影响了添加到蒙版中的噪声的变化程度和强度,使得可以微调噪声效果以达到预期的结果。
    • Comfy dtype: FLOAT
    • Python dtype: float

Output types

  • MASKS
    • 输出的MASKS包含了添加了噪声的原始蒙版区域,反映了指定的均值和标准差参数。这组修改后的蒙版可用于进一步处理或可视化。
    • Comfy dtype: MASK
    • Python dtype: torch.Tensor

Usage tips

  • Infra type: GPU
  • Common nodes: unknown

Source code

class SaltMaskNoiseAddition:
    @classmethod
    def INPUT_TYPES(cls):
        return {
            "required": {
                "masks": ("MASK",),
            },
            "optional": {
                "mean": ("FLOAT", {"default": 0.0, "min": -255.0, "max": 255.0, "step": 0.1}),
                "stddev": ("FLOAT", {"default": 25.0, "min": 0.0, "max": 100.0, "step": 0.1}),
            }
        }

    CATEGORY = f"{NAME}/Masking/Filter"

    RETURN_TYPES = ("MASK",)
    RETURN_NAMES = ("MASKS",)

    FUNCTION = "noise_addition"

    def noise_addition(self, masks, mean=0.0, stddev=25.0):
        if not isinstance(mean, list):
            mean = [mean]
        if not isinstance(stddev, list):
            stddev = [stddev]

        regions = []
        for i, mask in enumerate(masks):
            pil_image = ImageOps.invert(mask2pil(mask.unsqueeze(0)))
            image_array = np.array(pil_image)

            current_mean = mean[i if i < len(mean) else -1]
            current_stddev = stddev[i if i < len(stddev) else -1]

            noise = np.random.normal(current_mean, current_stddev, image_array.shape)
            noisy_image = image_array + noise
            noisy_image = np.clip(noisy_image, 0, 255).astype(np.uint8)

            noisy_pil = Image.fromarray(noisy_image)
            region_tensor = pil2mask(noisy_pil)
            regions.append(region_tensor)

        regions_tensor = torch.cat(regions, dim=0)
        return (regions_tensor,)