一、SD Upscale带来的对比度和色彩问题分析

image-20250204225540257

使用SD生成图像时,在运行Ultimate SD Upscale脚本(ComfyUI中为SD Upscale节点)对图像进行分块放大后,会发现放大后的图像对比度和色彩饱和度都有所变化(大部分是变强,但也可能变弱),整体效果变得不自然。

image-20250204225041585

231751482-7c6ab365-0776-4d8a-a71a-9a89fb9baffa

通过翻看大量类似问题讨论的帖子,可以知到大概得原因如下:

  1. 潜空间解码特性:VAE解码时对高频信号的放大(如xformers加速模块对潜空间数据的非均匀处理)。
  2. 迭代采样累积:多阶段upscale过程中色彩校正的误差叠加(尤其在tiled VAE处理超大分辨率图像时更明显。

一些讨论中提到,增强Controlnet强度或者更换采样器以及VAE或许能够缓解这个问题,然而这些方法都比较具有随机性,通用性也不强,一旦更换模型,可能就需要重新调整。所以这里就需要一个比较通用的,效果稳定的方法,也就是图像处理中的颜色匹配法。

SD ComfyUI中颜色匹配节点的应用说明

在SD ComfyUI中,颜色匹配节点是一种重要工具,它通过将一个图像的颜色特征转移到另一个图像上,实现颜色的一致性。这对于需要在不同图像之间保持视觉一致性的项目尤为重要,如自动化照片调色、绘画及电影序列的颜色调整等。

image111

方法分类:传统算法与深度学习方法

在处理图像颜色匹配问题时,可以将方法分为传统算法和深度学习方法两大类:

  • 传统算法

    • 小波变换(Wavelet Transform):用于多分辨率分析,可以捕捉不同频率成分,实现精细的颜色匹配。
    • 直方图匹配(Histogram Matching):通过调整目标图像的直方图来匹配参考图像的颜色分布。
    • Reinhard算法:经典的颜色转移方法,通过调整亮度、对比度和饱和度来实现颜色匹配。
  • 深度学习方法

    • 自适应实例归一化(AdaIN):通过调整特征图的均值和方差来实现风格迁移中的颜色匹配。
    • MVGD:利用均值与方差比距离进行颜色匹配,适合复杂场景下的色彩协调。

二、颜色匹配方法详细讲解

Wavelet(小波变换)

小波变换是一种强大的信号处理工具,广泛应用于图像处理中的多分辨率分析。它通过将信号分解为不同频率的成分,能够有效捕捉图像的细节和纹理信息。小波变换的关键在于其能够同时提供时间和频率的信息,这使得它在处理具有不同尺度特征的图像时非常有效。

  • 多分辨率分析:小波变换将图像分解为多个分辨率层次,使得高频信息(如边缘和细节)和低频信息(如平坦区域)可以被独立分析和处理。这种特性使得小波变换在图像压缩、去噪和特征提取等任务中表现出色。
  • 捕捉不同频率特征:通过对图像进行小波变换,可以获得不同尺度下的图像特征,从而实现更精细的颜色匹配和增强效果。例如,JPEG 2000标准就是基于小波变换的图像压缩技术,利用小波的多分辨率特性来优化图像质量和压缩比。

Histogram Matching(HM,直方图匹配)

直方图匹配是一种通过调整图像直方图,使其与目标直方图相匹配的技术。这种方法在色彩校正和图像融合中非常常见,尤其是在处理不同光照条件下拍摄的图像时。

  • 调整图像直方图:直方图匹配的基本步骤包括计算源图像和目标图像的直方图及其累积分布函数(CDF),然后通过映射每个灰度值来实现颜色分布的一致性。具体来说,对于每个灰度值,找到其在目标直方图中的对应值,从而调整源图像中的每个像素值。
  • 应用场景:这种方法常用于需要色彩一致性的场景,例如多幅图片合成、卫星影像处理等。通过直方图匹配,可以有效消除因拍摄条件不同而导致的色彩差异,提高视觉一致性。

Reinhard算法

Reinhard算法是一种经典的颜色迁移方法,通过调整源图像与目标图像在LAB颜色空间中的均值和标准差,实现色彩的迁移。

  • 算法流程:该算法首先将源图像和目标图像转换到LAB颜色空间,然后计算两者的均值和标准差。接着,通过线性变换调整源图像,使其在LAB空间中与目标图像具有相同的均值和标准差,最后再转换回RGB空间。
  • 优缺点:Reinhard算法实现简单且效率高,但对于复杂色彩内容的迁移效果可能不佳,尤其是在色彩丰富或对比强烈的场景中。

AdaIN(自适应实例归一化)

自适应实例归一化(AdaIN)是一种深度学习中的风格迁移方法,通过调整内容特征与风格特征之间的均值和方差来实现风格转移。

  • 工作原理:AdaIN接收一张内容输入和一张风格输入,通过计算内容特征的均值和标准差,并将其调整为风格特征相应的均值和标准差。这种方法允许在实时条件下进行任意风格转移,极大地提高了风格迁移的灵活性。
  • 应用场景:AdaIN被广泛应用于艺术风格迁移、视频处理等领域,能够快速生成具有艺术效果的新图像,同时保留原始内容的信息。

复合方法(HM-MVQD-HM与HM-MKL-HM)

复合方法结合了多种颜色匹配技术,以提高颜色匹配效果。

  • HM-MVQD-HM:该方法首先进行直方图匹配,然后使用均值方差比距离(MVQD)进一步优化颜色分布,最后再次进行直方图匹配,以确保最终结果具有高精度和一致性。这种方法特别适用于复杂场景中的色彩调整。
  • HM-MKL-HM:此方法结合了直方图匹配与机器学习算法(如MKL),旨在优化特定颜色区域或特定色调。通过这种方式,可以实现更灵活且针对性的颜色校正,适用于需要精细调整的应用场景,如人像摄影、品牌色彩统一等。

三、方法对比

在图像颜色匹配的研究中,选择合适的算法对于实现高质量的图像处理至关重要。以下将详细比较几种主流的颜色匹配方法,并通过表格清晰展示它们在计算效率、色彩保真度和局部细节保留等方面的表现。

量化指标对比

方法 计算效率 色彩保真度 局部细节保留 最佳应用场景
Wavelet变换 高 (多分辨率分析) 较好 (多频率成分) 非常好 (多尺度分析) 纹理丰富的图像
AdaIN 中等 (深度学习方法) 非常好 (特征图调整) 好 (深度学习特性) 风格迁移
直方图匹配 (HM) 一般 (可能丢失细节) 一般 色彩分布均衡
Reinhard 好 (亮度对比度调整) 中等 自然照片
MVGD 中等 中等 颜色梯度分析
HM-MVGD-HM 低 (复合方法) 较好 复杂颜色匹配
HM-MKL-HM 低 (复合方法) 较好 多样化颜色转换

各方法特点分析

  • Wavelet变换:此方法通过多分辨率分析能够有效捕捉图像的不同频率成分,适合处理纹理丰富的图像。其高效性和良好的细节保留能力使其在实时应用中表现优异。
  • AdaIN:适应性实例归一化是一种深度学习方法,特别适合风格迁移任务。通过调整特征图的均值和方差,AdaIN能够实现非常好的色彩保真度,但在计算效率上略逊色。
  • 直方图匹配(HM):该方法通过调整图像的直方图来实现颜色匹配,虽然计算效率高,但在某些情况下可能会导致细节丢失,适合用于色彩分布均衡的场景。
  • Reinhard算法:此经典算法通过调整亮度、对比度和饱和度来实现自然照片的颜色转移。其计算效率高,但在复杂场景中可能需要更多后处理来保持细节。
  • MVGD:均值和方差比距离(Mean and Variance Quotient Distance)方法能够较好地分析颜色梯度,适合用于需要颜色一致性的场景。
  • 复合方法(HM-MVGD-HM 和 HM-MKL-HM):这些方法结合了多种技术,以达到更好的颜色匹配效果,尤其适用于复杂的颜色转换任务,但计算效率较低。

SD中不同类型图像的颜色匹配方法建议

  1. 人像图像

    • 推荐使用 AdaINReinhard算法,以确保皮肤色调自然且细节丰富。
    • 可以结合 HM-MVGD-HM 方法,以优化整体色彩一致性。
  2. 风景图像

    • 采用 直方图匹配(HM)MVGD 方法,使不同光照条件下拍摄的同一风景照片具有相似色彩分布。
    • 此外,使用 Wavelet变换 可以增强细节表现。
  3. 艺术风格图像

    • 在艺术风格迁移任务中,建议使用 AdaIN 方法,它能够根据内容和风格特征进行精细调整,实现高质量的风格迁移。

参考资料

[1] https://www.reddit.com/r/StableDiffusion/comments/xalo78/fixing_excessive_contrastsaturation_resulting/
[2] https://www.reddit.com/r/StableDiffusion/comments/17ugemj/why_does_my_ultimate_sd_upscale_loose_contrast_so/
[3] https://www.runcomfy.com/comfyui-nodes/ComfyUI-KJNodes/ColorMatch
[4] https://www.runcomfy.com/comfyui-nodes/ComfyUI-post-processing-nodes/ColorCorrect
[6] https://github.com/comfyanonymous/ComfyUI/issues/500
[7] https://github.com/AUTOMATIC1111/stable-diffusion-webui/issues/631
[9] https://www.reddit.com/r/StableDiffusion/comments/17ugemj/why_does_my_ultimate_sd_upscale_loose_contrast_so/
[10] https://www.youtube.com/watch?v=3o91fl4hpPQ
[11] https://github.com/comfyanonymous/ComfyUI/issues/394
[12] https://perilli.com/ai/comfyui/
[13] https://chainner.app/download/
[14] https://www.facebook.com/groups/sdaitw/posts/1013812413856013/
[15] https://stableprojectorz.com
[16] https://github.com/rgthree/rgthree-comfy/activity
[17] https://www.yeschat.ai/blog-ComfyUI-35-Grouped-Nodes-Free-Workflow-Stable-Diffusion-39029
[18] https://github.com/Acly/comfyui-inpaint-nodes/activity
[19] https://comfyui-wiki.com/en/comfyui-nodes
[20] https://comfyui-wiki.com/en/comfyui-nodes/mask/image-color-to-mask
[21] https://github.com/EllangoK/ComfyUI-post-processing-nodes
[22] https://comfyui-wiki.com/en/tutorial/advanced/stable-diffusion-3-5-comfyui-workflow
[23] https://comfy.icu/node/ColorMatch
[24] https://www.youtube.com/watch?v=TI71a_XaLuI
[25] https://www.researchgate.net/publication/357432558_A_comparison_of_conventional_and_deep_learning_methods_of_image_classification
[26] https://www.mdpi.com/2673-8392/5/1/4
[27] https://www.sciencedirect.com/science/article/abs/pii/S0208521618304819
[28] https://www.researchgate.net/publication/337053558_A_Comparison_of_Traditional_Machine_Learning_and_Deep_Learning_in_Image_Recognition
[29] https://www.sciencedirect.com/science/article/pii/S2468502X22000389
[30] https://www.youtube.com/watch?v=_jO2MPrMiyA
[31] https://www.youtube.com/watch?v=t3lT_04A9j0
[32] https://www.youtube.com/watch?v=CxB47DMEyYQ
[34] https://www.youtube.com/watch?v=2EP_LIQmnHA
[35] https://www.reddit.com/r/StableDiffusion/comments/17q7rtt/comfyui_help_to_figure_out_best_workflow_to_color/
[36] https://www.reddit.com/r/comfyui/comments/1gq4baf/colour_correction_with_comfyui/
[37] https://www.runcomfy.com/comfyui-nodes/ComfyUI-Easy-Use/easy-imageColorMatch
[38] https://www.runcomfy.com/comfyui-nodes/ComfyUI-utils-nodes/ColorCorrectOfUtils
[39] https://www.youtube.com/watch?v=WEMqTKTQVOM
[40] https://github.com/city96/ComfyUI_ColorMod
[41] https://www.nature.com/articles/s41598-023-28331-7
[42] https://www.pekatvision.com/machine-vision-in-quality-inspection-traditional-vs-deep-learning-approaches/
[43] https://arxiv.org/html/2410.01366v1
[44] https://openaccess.thecvf.com/content_cvpr_2016/papers/Park_Efficient_and_Robust_CVPR_2016_paper.pdf
[45] https://openaccess.thecvf.com/content_cvpr_2014/papers/Hwang_Color_Transfer_Using_2014_CVPR_paper.pdf
[46] https://arxiv.org/html/2405.08263v1