72 lines
3.3 KiB
Markdown
72 lines
3.3 KiB
Markdown
# Documentation
|
||
- Class name: FeatherMask
|
||
- Category: mask
|
||
- Output node: False
|
||
- Repo Ref: https://github.com/comfyanonymous/ComfyUI
|
||
|
||
FeatherMask 节点旨在平滑地将给定掩码的边缘与其周围区域混合。它通过逐渐调整掩码的像素不透明度来实现这一点,从而在掩码的边界处创建一个柔和的过渡,这通常用于图像处理和编辑中。当在视觉上不希望掩码和背景之间有硬边时,此节点特别有用。
|
||
|
||
# Input types
|
||
## Required
|
||
- mask
|
||
- ‘mask’参数是一个定义图像中感兴趣区域的二进制张量。它对节点至关重要,因为它决定了图像的哪些部分将被羽化。掩码的维度及其二进制特性直接影响羽化过程和最终输出。
|
||
- Comfy dtype: torch.Tensor
|
||
- Python dtype: torch.Tensor
|
||
## Optional
|
||
- left
|
||
- ‘left’参数指定从掩码的左边开始羽化效果的像素数。它在确定掩码左侧羽化区域的宽度方面起着重要作用,因此影响整体视觉结果。
|
||
- Comfy dtype: int
|
||
- Python dtype: int
|
||
- top
|
||
- ‘top’参数规定了从掩码的顶部边缘开始羽化的像素数。它对于控制掩码顶部的羽化区域的高度至关重要,影响节点的输出。
|
||
- Comfy dtype: int
|
||
- Python dtype: int
|
||
- right
|
||
- ‘right’参数设置从掩码的右边开始羽化的像素数。它是建立掩码右侧羽化区域宽度的关键因素,影响节点的执行和最终外观。
|
||
- Comfy dtype: int
|
||
- Python dtype: int
|
||
- bottom
|
||
- ‘bottom’参数指示从掩码的底部边缘开始羽化的像素数。它对于确定掩码底部的羽化区域的高度至关重要,这显著影响节点的结果。
|
||
- Comfy dtype: int
|
||
- Python dtype: int
|
||
|
||
# Output types
|
||
- feathered_mask
|
||
- ‘feathered_mask’输出是一个表示原始掩码并带有羽化边缘的张量。它是节点操作的主要结果,为图像中掩码区域和未掩码区域之间提供了视觉上平滑的过渡。
|
||
- Comfy dtype: torch.Tensor
|
||
- Python dtype: torch.Tensor
|
||
|
||
# Usage tips
|
||
- Infra type: CPU
|
||
|
||
# Source code
|
||
```
|
||
class FeatherMask:
|
||
|
||
@classmethod
|
||
def INPUT_TYPES(cls):
|
||
return {'required': {'mask': ('MASK',), 'left': ('INT', {'default': 0, 'min': 0, 'max': MAX_RESOLUTION, 'step': 1}), 'top': ('INT', {'default': 0, 'min': 0, 'max': MAX_RESOLUTION, 'step': 1}), 'right': ('INT', {'default': 0, 'min': 0, 'max': MAX_RESOLUTION, 'step': 1}), 'bottom': ('INT', {'default': 0, 'min': 0, 'max': MAX_RESOLUTION, 'step': 1})}}
|
||
CATEGORY = 'mask'
|
||
RETURN_TYPES = ('MASK',)
|
||
FUNCTION = 'feather'
|
||
|
||
def feather(self, mask, left, top, right, bottom):
|
||
output = mask.reshape((-1, mask.shape[-2], mask.shape[-1])).clone()
|
||
left = min(left, output.shape[-1])
|
||
right = min(right, output.shape[-1])
|
||
top = min(top, output.shape[-2])
|
||
bottom = min(bottom, output.shape[-2])
|
||
for x in range(left):
|
||
feather_rate = (x + 1.0) / left
|
||
output[:, :, x] *= feather_rate
|
||
for x in range(right):
|
||
feather_rate = (x + 1) / right
|
||
output[:, :, -x] *= feather_rate
|
||
for y in range(top):
|
||
feather_rate = (y + 1) / top
|
||
output[:, y, :] *= feather_rate
|
||
for y in range(bottom):
|
||
feather_rate = (y + 1) / bottom
|
||
output[:, -y, :] *= feather_rate
|
||
return (output,)
|
||
``` |