2.9 KiB
2.9 KiB
Documentation
- Class name: Sharpen
- Category: image/postprocessing
- Output node: False
- Repo Ref: https://github.com/comfyanonymous/ComfyUI
Sharpen节点旨在通过应用锐化滤波器来增强图像的细节。它使用高斯核生成一个锐化掩模,以突出图像中的边缘和细节。在图像清晰度和定义至关重要的后处理任务中,该节点的功能至关重要。
Input types
Required
- image
- 输入图像是Sharpen节点处理的主要数据。它是应用锐化效果的基础,其质量直接影响最终输出。
- Comfy dtype: IMAGE
- Python dtype: torch.Tensor
Optional
- sharpen_radius
- sharpen_radius参数决定了锐化效果的范围。较大的半径会导致更明显的锐化效果,而较小的半径则提供更微妙的增强。
- Comfy dtype: INT
- Python dtype: int
- sigma
- sigma参数控制用于锐化的高斯核的标准差。它影响锐化过渡的平滑度和核影响的扩散。
- Comfy dtype: FLOAT
- Python dtype: float
- alpha
- alpha参数调整锐化效果的强度。alpha的值越高,锐化效果越强烈,而值越低,效果越温和。
- Comfy dtype: FLOAT
- Python dtype: float
Output types
- sharpened_image
- sharpened_image输出是将锐化过程应用于输入图像的结果。它展示了增强的细节和边缘,提供了更清晰和更明确的视觉表现。
- Comfy dtype: IMAGE
- Python dtype: torch.Tensor
Usage tips
- Infra type: CPU
Source code
class Sharpen:
def __init__(self):
pass
@classmethod
def INPUT_TYPES(s):
return {'required': {'image': ('IMAGE',), 'sharpen_radius': ('INT', {'default': 1, 'min': 1, 'max': 31, 'step': 1}), 'sigma': ('FLOAT', {'default': 1.0, 'min': 0.1, 'max': 10.0, 'step': 0.01}), 'alpha': ('FLOAT', {'default': 1.0, 'min': 0.0, 'max': 5.0, 'step': 0.01})}}
RETURN_TYPES = ('IMAGE',)
FUNCTION = 'sharpen'
CATEGORY = 'image/postprocessing'
def sharpen(self, image: torch.Tensor, sharpen_radius: int, sigma: float, alpha: float):
if sharpen_radius == 0:
return (image,)
(batch_size, height, width, channels) = image.shape
kernel_size = sharpen_radius * 2 + 1
kernel = gaussian_kernel(kernel_size, sigma, device=image.device) * -(alpha * 10)
center = kernel_size // 2
kernel[center, center] = kernel[center, center] - kernel.sum() + 1.0
kernel = kernel.repeat(channels, 1, 1).unsqueeze(1)
tensor_image = image.permute(0, 3, 1, 2)
tensor_image = F.pad(tensor_image, (sharpen_radius, sharpen_radius, sharpen_radius, sharpen_radius), 'reflect')
sharpened = F.conv2d(tensor_image, kernel, padding=center, groups=channels)[:, :, sharpen_radius:-sharpen_radius, sharpen_radius:-sharpen_radius]
sharpened = sharpened.permute(0, 2, 3, 1)
result = torch.clamp(sharpened, 0, 1)
return (result,)