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

2.4 KiB

Documentation

  • Class name: DistanceTransform
  • Category: Bmad/CV/Thresholding
  • Output node: False

DistanceTransform节点用于对二值图像应用距离变换。它将二值图像转换为灰度图像,其中每个像素的亮度与其到最近的二值前景像素的距离成比例。该节点支持不同的距离类型和掩码大小,以便根据需求定制变换效果。

Input types

Required

  • binary_image
    • 需要进行距离变换的二值图像。它作为计算到最近前景像素距离的输入。
    • Comfy dtype: IMAGE
    • Python dtype: torch.Tensor
  • distance_type
    • 指定要使用的距离计算类型,允许自定义距离变换效果。
    • Comfy dtype: COMBO[STRING]
    • Python dtype: str
  • mask_size
    • 确定距离变换中使用的掩码大小,影响距离计算的精细程度。
    • Comfy dtype: COMBO[STRING]
    • Python dtype: str

Output types

  • image
    • 距离变换后的结果图像。这是一个灰度图像,其中每个像素的亮度反映了它到最近前景像素的距离。
    • Comfy dtype: IMAGE
    • Python dtype: torch.Tensor

Usage tips

  • Infra type: GPU
  • Common nodes: unknown

Source code

class DistanceTransform:
    distance_types_map = {
        "DIST_L2": cv.DIST_L2,
        "DIST_L1": cv.DIST_L1,
        "DIST_C": cv.DIST_C,
    }
    distance_types = list(distance_types_map.keys())

    mask_sizes_map = {
        "DIST_MASK_3": cv.DIST_MASK_3,
        "DIST_MASK_5": cv.DIST_MASK_5,
        "DIST_MASK_PRECISE": cv.DIST_MASK_PRECISE
    }
    mask_sizes = list(mask_sizes_map.keys())

    @classmethod
    def INPUT_TYPES(s):
        return {
            "required": {
                "binary_image": ("IMAGE",),
                "distance_type": (s.distance_types, {"default": s.distance_types[0]}),
                "mask_size": (s.mask_sizes, {"default": s.mask_sizes[0]}),
            }
        }

    RETURN_TYPES = ("IMAGE",)
    FUNCTION = "apply"
    CATEGORY = "Bmad/CV/Thresholding"

    def apply(self, binary_image, distance_type, mask_size):
        binary_image = tensor2opencv(binary_image, 1)
        distance_transform = cv.distanceTransform(
            binary_image,
            self.distance_types_map[distance_type],
            self.mask_sizes_map[mask_size])
        distance_transform = opencv2tensor(distance_transform)
        return (distance_transform,)