85 lines
2.8 KiB
Markdown
85 lines
2.8 KiB
Markdown
|
|
# Documentation
|
|
- Class name: ColorMatchImage
|
|
- Category: image/filters
|
|
- Output node: False
|
|
|
|
ColorMatchImage节点旨在调整图像的颜色,使其与目标色彩方案或另一张图像相匹配或协调。这一过程在图像编辑和合成工作流程中至关重要,特别是在需要确保不同元素之间颜色一致性的场景下。
|
|
|
|
# Input types
|
|
## Required
|
|
- images
|
|
- 'images'输入代表需要进行颜色调整的源图像。它是定义颜色匹配过程起点的关键。
|
|
- Comfy dtype: IMAGE
|
|
- Python dtype: torch.Tensor
|
|
- reference
|
|
- 'reference'输入指定了源图像应该匹配的目标图像或色彩方案。它对于引导颜色匹配过程朝向预期结果至关重要。
|
|
- Comfy dtype: IMAGE
|
|
- Python dtype: torch.Tensor
|
|
- blur
|
|
- 'blur'输入控制应用于参考图像的模糊程度,影响颜色匹配的柔和度。
|
|
- Comfy dtype: INT
|
|
- Python dtype: float
|
|
- factor
|
|
- 'factor'输入决定了颜色匹配效果的强度,允许对最终外观进行微调。
|
|
- Comfy dtype: FLOAT
|
|
- Python dtype: float
|
|
|
|
# Output types
|
|
- image
|
|
- 'image'输出提供了颜色调整后的结果图像,展示了颜色匹配过程的效果。
|
|
- Comfy dtype: IMAGE
|
|
- Python dtype: torch.Tensor
|
|
|
|
|
|
## Usage tips
|
|
- Infra type: `GPU`
|
|
- Common nodes: unknown
|
|
|
|
|
|
## Source code
|
|
```python
|
|
class ColorMatchImage:
|
|
@classmethod
|
|
def INPUT_TYPES(s):
|
|
return {
|
|
"required": {
|
|
"images": ("IMAGE", ),
|
|
"reference": ("IMAGE", ),
|
|
"blur": ("INT", {"default": 0, "min": 0, "max": 1023}),
|
|
"factor": ("FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01, "round": 0.01}),
|
|
},
|
|
}
|
|
|
|
RETURN_TYPES = ("IMAGE",)
|
|
FUNCTION = "batch_normalize"
|
|
|
|
CATEGORY = "image/filters"
|
|
|
|
def batch_normalize(self, images, reference, blur, factor):
|
|
t = images.detach().clone()
|
|
ref = reference.detach().clone()
|
|
if ref.shape[0] < t.shape[0]:
|
|
ref = ref[0].unsqueeze(0).repeat(t.shape[0], 1, 1, 1)
|
|
|
|
if blur == 0:
|
|
mean = torch.mean(t, (1,2), keepdim=True)
|
|
mean_ref = torch.mean(ref, (1,2), keepdim=True)
|
|
for i in range(t.shape[0]):
|
|
for c in range(3):
|
|
t[i,:,:,c] /= mean[i,0,0,c]
|
|
t[i,:,:,c] *= mean_ref[i,0,0,c]
|
|
else:
|
|
d = blur * 2 + 1
|
|
blurred = cv_blur_tensor(torch.clamp(t, 0.001, 1), d, d)
|
|
blurred_ref = cv_blur_tensor(torch.clamp(ref, 0.001, 1), d, d)
|
|
for i in range(t.shape[0]):
|
|
for c in range(3):
|
|
t[i,:,:,c] /= blurred[i,:,:,c]
|
|
t[i,:,:,c] *= blurred_ref[i,:,:,c]
|
|
|
|
t = torch.lerp(images, t, factor)
|
|
return (t,)
|
|
|
|
```
|