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

3.3 KiB

Documentation

  • Class name: EnhanceDetail
  • Category: image/filters
  • Output node: False

EnhanceDetail节点旨在通过应用一系列滤镜来提高图像的视觉质量,这些滤镜可以增强细节、调整锐度,并可能降低噪声。该节点通过相对于引导滤波器输出来操作图像的细节,从而对增强过程实现精细控制。

Input types

Required

  • images
    • 需要增强的输入图像。这个参数至关重要,因为它直接影响增强过程,作为所有后续操作的基础。
    • Comfy dtype: IMAGE
    • Python dtype: torch.Tensor
  • filter_radius
    • 指定增强过程中应用的滤镜半径。较大的半径可能会导致更明显的细节增强,但也可能增加处理时间。
    • Comfy dtype: INT
    • Python dtype: int
  • sigma
    • 控制引导滤波器的sigma参数,影响平滑程度和细节保留。
    • Comfy dtype: FLOAT
    • Python dtype: float
  • denoise
    • 决定降噪滤镜的强度。较高的值可以减少噪声,但也可能减弱细节。
    • Comfy dtype: FLOAT
    • Python dtype: float
  • detail_mult
    • 细节增强的乘数。调整这个值可以微调细节增强效果的强度。
    • Comfy dtype: FLOAT
    • Python dtype: float

Output types

  • image
    • 节点的输出,即经过增强处理后的图像。这些图像预期会有更好的细节表现,并可能降低了噪声。
    • Comfy dtype: IMAGE
    • Python dtype: torch.Tensor

Usage tips

  • Infra type: GPU
  • Common nodes: unknown

Source code

class EnhanceDetail:
    def __init__(self):
        pass

    @classmethod
    def INPUT_TYPES(s):
        return {
            "required": {
                "images": ("IMAGE",),
                "filter_radius": ("INT", {
                    "default": 2,
                    "min": 1,
                    "max": 64,
                    "step": 1
                }),
                "sigma": ("FLOAT", {
                    "default": 0.1,
                    "min": 0.01,
                    "max": 100.0,
                    "step": 0.01
                }),
                "denoise": ("FLOAT", {
                    "default": 0.1,
                    "min": 0.0,
                    "max": 10.0,
                    "step": 0.01
                }),
                "detail_mult": ("FLOAT", {
                    "default": 2.0,
                    "min": 0.0,
                    "max": 100.0,
                    "step": 0.1
                }),
            },
        }

    RETURN_TYPES = ("IMAGE",)
    FUNCTION = "enhance"

    CATEGORY = "image/filters"

    def enhance(self, images: torch.Tensor, filter_radius: int, sigma: float, denoise: float, detail_mult: float):
        
        if filter_radius == 0:
            return (images,)
        
        d = filter_radius * 2 + 1
        s = sigma / 10
        n = denoise / 10
        
        dup = copy.deepcopy(images.cpu().numpy())
        
        for index, image in enumerate(dup):
            imgB = image
            if denoise>0.0:
                imgB = cv2.bilateralFilter(image, d, n, d)
            
            imgG = np.clip(guidedFilter(image, image, d, s), 0.001, 1)
            
            details = (imgB/imgG - 1) * detail_mult + 1
            dup[index] = np.clip(details*imgG - imgB + image, 0, 1)
        
        return (torch.from_numpy(dup),)