Files
CavinHuang-comfyui-nodes-docs/docs/Mask Smooth Region.md
2024-05-26 20:35:16 +08:00

3.0 KiB

Documentation

WAS_Mask_Smooth_Region 节点旨在处理输入掩码并对其区域应用平滑效果。这对于生成无缝纹理或为进一步的图像处理任务准备掩码特别有用。节点使用高斯模糊技术平滑掩码内的区域,由 'sigma' 参数控制平滑的程度。节点的功能针对单个掩码和掩码批次进行了优化,确保了在各种应用中的灵活性和效率。

Input types

Required

  • masks
    • 'masks' 参数是节点的关键输入,期望得到一个掩码或掩码批次。此输入直接影响节点的操作,因为它决定了将要平滑的区域。该参数对于节点产生期望的输出至关重要,影响最终纹理质量和平铺图像的无缝性。
    • Comfy dtype: MASK
    • Python dtype: torch.Tensor

Optional

  • sigma
    • 'sigma' 参数定义了要应用于掩码区域的平滑度。它是一个浮点数,用于调整高斯模糊的标准差,较高的值会导致更明显的平滑效果。这个参数是可选的,但对节点的输出有显著影响,允许用户控制平滑区域的外观。
    • Comfy dtype: FLOAT
    • Python dtype: float

Output types

  • MASKS
    • 'MASKS' 输出提供了通过应用 'sigma' 参数定义的高斯模糊得到的平滑掩码或掩码批次。这个输出很重要,因为它代表了节点处理后的数据,可以用于后续操作或作为纹理生成的最终输出。
    • Comfy dtype: MASK
    • Python dtype: torch.Tensor

Usage tips

  • Infra type: CPU

Source code

class WAS_Mask_Smooth_Region:

    def __init__(self):
        self.WT = WAS_Tools_Class()

    @classmethod
    def INPUT_TYPES(cls):
        return {'required': {'masks': ('MASK',), 'sigma': ('FLOAT', {'default': 5.0, 'min': 0.0, 'max': 128.0, 'step': 0.1})}}
    CATEGORY = 'WAS Suite/Image/Masking'
    RETURN_TYPES = ('MASK',)
    RETURN_NAMES = ('MASKS',)
    FUNCTION = 'smooth_region'

    def smooth_region(self, masks, sigma=128):
        if masks.ndim > 3:
            regions = []
            for mask in masks:
                mask_np = np.clip(255.0 * mask.cpu().numpy().squeeze(), 0, 255).astype(np.uint8)
                pil_image = Image.fromarray(mask_np, mode='L')
                region_mask = self.WT.Masking.smooth_region(pil_image, sigma)
                region_tensor = pil2mask(region_mask).unsqueeze(0).unsqueeze(1)
                regions.append(region_tensor)
            regions_tensor = torch.cat(regions, dim=0)
            return (regions_tensor,)
        else:
            mask_np = np.clip(255.0 * masks.cpu().numpy().squeeze(), 0, 255).astype(np.uint8)
            pil_image = Image.fromarray(mask_np, mode='L')
            region_mask = self.WT.Masking.smooth_region(pil_image, sigma)
            region_tensor = pil2mask(region_mask).unsqueeze(0).unsqueeze(1)
            return (region_tensor,)