3.1 KiB
3.1 KiB
Documentation
- Class name: HSVThresholdMask
- Category: postprocessing/Masks
- Output node: False
- Repo Ref: https://github.com/EllangoK/ComfyUI-post-processing-nodes
该节点类封装了HSV颜色空间内的阈值操作功能,能够基于特定的色调、饱和度或亮度范围创建二值掩码。这对于图像中分割和隔离感兴趣区域至关重要,促进了对象识别和降噪等多种图像处理任务的进行。
Input types
Required
- image
- 图像参数对于HSV阈值处理过程至关重要,因为它提供了进行阈值分割的源数据。它通过决定图像的哪些区域将受到掩码标准的处理,从而影响整个操作。
- Comfy dtype: IMAGE
- Python dtype: torch.Tensor
- low_threshold
- 低阈值参数设置了HSV通道值的下限,对于定义将被考虑用于掩码的像素值范围起着至关重要的作用。
- Comfy dtype: FLOAT
- Python dtype: float
- high_threshold
- 高阈值参数建立了HSV通道值的上限,与低阈值一起决定了最终的掩码。
- Comfy dtype: FLOAT
- Python dtype: float
- hsv_channel
- hsv_channel参数指示在HSV颜色空间中将使用哪个通道进行阈值处理,这对生成的掩码及其在手头图像处理任务中的适用性有着重大影响。
- Comfy dtype: COMBO['hue', 'saturation', 'value']
- Python dtype: str
Output types
- result
- 结果参数代表通过应用HSV阈值标准生成的二值掩码,是进一步图像分析和操作的重要工具。
- Comfy dtype: IMAGE
- Python dtype: torch.Tensor
Usage tips
- Infra type: CPU
Source code
class HSVThresholdMask:
def __init__(self):
pass
@classmethod
def INPUT_TYPES(s):
return {'required': {'image': ('IMAGE',), 'low_threshold': ('FLOAT', {'default': 0.2, 'min': 0, 'max': 1, 'step': 0.1}), 'high_threshold': ('FLOAT', {'default': 0.7, 'min': 0, 'max': 1, 'step': 0.1}), 'hsv_channel': (['hue', 'saturation', 'value'],)}}
RETURN_TYPES = ('IMAGE',)
FUNCTION = 'hsv_threshold'
CATEGORY = 'postprocessing/Masks'
def hsv_threshold(self, image: torch.Tensor, low_threshold: float, high_threshold: float, hsv_channel: str):
(batch_size, height, width, _) = image.shape
result = torch.zeros(batch_size, height, width)
if hsv_channel == 'hue':
channel = 0
(low_threshold, high_threshold) = (int(low_threshold * 180), int(high_threshold * 180))
elif hsv_channel == 'saturation':
channel = 1
(low_threshold, high_threshold) = (int(low_threshold * 255), int(high_threshold * 255))
elif hsv_channel == 'value':
channel = 2
(low_threshold, high_threshold) = (int(low_threshold * 255), int(high_threshold * 255))
for b in range(batch_size):
tensor_image = (image[b].numpy().copy() * 255).astype(np.uint8)
hsv_image = cv2.cvtColor(tensor_image, cv2.COLOR_RGB2HSV)
mask = cv2.inRange(hsv_image[:, :, channel], low_threshold, high_threshold)
tensor = torch.from_numpy(mask).float() / 255.0
result[b] = tensor
return (result,)