105 lines
3.6 KiB
Markdown
105 lines
3.6 KiB
Markdown
|
|
# 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
|
|
```python
|
|
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)
|
|
|
|
```
|