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

3.6 KiB

Documentation

  • Class name: SaltMaskCropRegion
  • Category: SALT/Masking/Process
  • Output node: False

SaltMaskCropRegion节点专注于根据指定标准(如主导或少数区域)裁剪掩码内的区域,并在这些区域周围应用填充。它旨在通过隔离和调整特定区域的大小来优化掩码数据,从而便于对基于掩码的数据进行有针对性的分析或操作。

Input types

Required

  • masks
    • 'masks'参数表示要裁剪的输入掩码。它对于确定每个掩码中符合指定裁剪标准的区域至关重要,直接影响输出的裁剪掩码。
    • Comfy dtype: MASK
    • Python dtype: torch.Tensor
  • padding
    • 'padding'参数指定在裁剪区域周围添加的填充量。它通过扩展裁剪区域来影响输出裁剪掩码的大小,从而使掩码的使用更加灵活。
    • Comfy dtype: INT
    • Python dtype: int
  • region_type
    • 'region_type'参数决定裁剪标准,在掩码中选择"主导"或"少数"区域。这个选择引导裁剪过程,使输出针对特定的感兴趣区域。
    • Comfy dtype: COMBO[STRING]
    • Python dtype: str

Output types

  • cropped_masks
    • 应用指定裁剪和填充后的裁剪掩码,可用于进一步处理或分析。
    • Comfy dtype: MASK
    • Python dtype: torch.Tensor
  • crop_data_batch
    • 详细说明所执行裁剪操作的数据批次,包括裁剪区域的尺寸和位置。
    • Comfy dtype: CROP_DATA_BATCH
    • Python dtype: List[Dict]
  • top_int
    • 裁剪区域的顶部边界整数值。
    • Comfy dtype: INT
    • Python dtype: int
  • left_int
    • 裁剪区域的左侧边界整数值。
    • Comfy dtype: INT
    • Python dtype: int
  • right_int
    • 裁剪区域的右侧边界整数值。
    • Comfy dtype: INT
    • Python dtype: int
  • bottom_int
    • 裁剪区域的底部边界整数值。
    • Comfy dtype: INT
    • Python dtype: int
  • width_int
    • 根据裁剪数据计算得出的裁剪区域宽度整数值。
    • Comfy dtype: INT
    • Python dtype: int
  • height_int
    • 根据裁剪数据计算得出的裁剪区域高度整数值。
    • Comfy dtype: INT
    • Python dtype: int

Usage tips

  • Infra type: GPU
  • Common nodes: unknown

Source code

class SaltMaskCropRegion:
    @classmethod
    def INPUT_TYPES(cls):
        return {
            "required": {
                "masks": ("MASK",),
                "padding": ("INT",{"default": 24, "min": 0, "max": 4096, "step": 1}),
                "region_type": (["dominant", "minority"],),
            }
        }
    
    RETURN_TYPES = ("MASK", "CROP_DATA_BATCH", "INT", "INT", "INT", "INT", "INT", "INT")
    RETURN_NAMES = ("cropped_masks", "crop_data_batch", "top_int", "left_int", "right_int", "bottom_int", "width_int", "height_int")
    
    FUNCTION = "mask_crop_region"
    CATEGORY = f"{NAME}/Masking/Process"
    
    def mask_crop_region(self, masks, padding=24, region_type="dominant"):
        N = len(masks)
        cropped_masks = []
        crop_data_list = []
        master_size = None
        
        for n in range(N):
            mask = masks[n]
            mask_pil = mask2pil(mask.unsqueeze(0))
            if not master_size:
                master_size = mask_pil.size
            region_mask, crop_data = MaskFilters.crop_region(mask_pil, region_type, padding)
            region_mask = region_mask.resize(master_size)
            region_tensor = pil2mask(region_mask)
            cropped_masks.append(region_tensor)
            crop_data_list.append(crop_data)

        cropped_masks_batch = torch.cat(cropped_masks, dim=0)

        return (cropped_masks_batch, crop_data_list)