86 lines
2.9 KiB
Markdown
86 lines
2.9 KiB
Markdown
|
|
# Documentation
|
|
- Class name: SaltMaskNoiseAddition
|
|
- Category: SALT/Masking/Filter
|
|
- Output node: False
|
|
- Repo Ref: https://github.com/comfyanonymous/ComfyUI
|
|
|
|
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
|
|
```python
|
|
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,)
|
|
|
|
```
|