🎆背景
ic-light是一个能重绘画面光影的节点,但是在重绘的过程中,难免会将图像本身的细节进行重绘,尤其是在电商的场景中,文字和商品的细节很多时候会被重绘的乱七八糟。
针对这种情况,Comfyui-IC-Light节点得作者新添加了一个node,detail transfer,通过高反差保留得方式来还原画面的细节;
🎇原理及测试
高反差保留的原理,相信大家都明白,如果不明白的话,可以问一下百度,相信有其他热心的小朋友会给大家做科普。
大家如果对代码本身感兴趣,可以翻翻节点中的代码,也就是从这里开始的一段:
这个节点有三个可以修改的参数,分别是:
mode:叠加模式
blur_sigma:高斯模糊的标准差,范围是 0.1~100
blend_factor:混合因子,范围从-10到10,不过最好设定为0~1之间,否则有可能会过曝光。
那每种叠加模式都是什么意思呢?这里结合图片示例和测试解释一下:
接下来用的测试原图:
-
Add (加法混合):
- 效果:将源图像和目标图像的像素值相加。
- 公式:
result = source + target
- 注意:如果相加的结果超过最大值(通常是1或255),可能会发生溢出,导致图像过曝。
- 左边是通过ic-light直接生成的图像,add之后可以很好的还原图像细节,并且光影与背景光源更好的柔和,但带来的问题是,商品本身会有些变色;
-
Multiply (乘法混合):
- 效果:将源图像和目标图像的像素值相乘。
- 公式:
result = source * target
- 特点:混合模式在暗部区域产生更暗的效果,而在亮部区域增强对比度。
- 左边ic-light直出,右边是multiply的效果,整体偏灰暗了;(当然这个仅限测试图,其他图片的视觉效果会有不同,更多还是看像素操作的公式,图片仅供参考)
-
Screen (屏幕混合):
- 效果:与乘法混合相反,它将图像的补色相乘,然后从1中减去结果。
- 公式:
result = 1 - (1 - source) * (1 - target)
- 特点:在亮部区域产生更亮的效果,而在暗部区域保持细节。
- 效果测试,整体变亮了。
-
Overlay (叠加混合):
- 效果:结合了乘法和屏幕混合的效果,根据目标图像的亮度来选择使用哪种混合方式。
- 公式:
result = (target < 0.5) ? (2 * source * target) : (1 - 2 * (1 - source) * (1 - target))
- 特点:当目标图像较暗时,使用乘法混合,当目标图像较亮时,使用屏幕混合。
- 效果图:这个正常一些,就是跟背景色有点不融合了;
-
Soft Light (柔光混合):
- 效果:类似于将源图像以柔光的方式照射到目标图像上。
- 公式:
result = (1 - 2 * target) * source^2 + 2 * target * source
- 特点:如果源图像较亮,则目标图像变亮;如果源图像较暗,则目标图像变暗。
- 效果图:粗看的话,跟overlay有点类似,这个也是在还原细节中常用的方案之一。可以适当调整factor,带一点环境色;
-
Hard Light (强光混合):
- 效果:类似于叠加混合,但是更加强烈。
- 公式:
result = (source < 0.5) ? (2 * source * target) : (1 - 2 * (1 - source) * (1 - target))
- 特点:如果源图像较亮,则目标图像变亮;如果源图像较暗,则目标图像变暗,但效果更明显。
-
Color Dodge (色彩减淡):
- 效果:通过提高目标图像的亮度来模拟源图像的光照。
- 公式:
result = target / (1 - source)
- 注意:如果源图像的像素值接近1,可能会导致结果超过最大值。
- 嗯,一般不用
-
Color Burn (色彩加深):
- 效果:通过降低目标图像的亮度来模拟源图像的阴影。
- 公式:
result = 1 - (1 - target) / source
- 注意:如果源图像的像素值接近0,可能会导致结果低于最小值。
-
Difference (差异混合):
- 效果:计算源图像和目标图像的像素值差。
- 公式:
result = abs(target - source)
- 特点:可以突出两个图像之间的差异。
-
Exclusion (排除混合):
- 效果:类似于差异混合,但是效果更加柔和。
- 公式:
result = 0.5 - 2 * (target - 0.5) * (source - 0.5)
- 特点:混合后的颜色会倾向于中性。
- 反色咯
-
Divide (除法混合):
- 效果:将源图像的像素值除以目标图像的像素值。
- 公式:
result = (source / target) * target
- 注意:如果目标图像的像素值接近0,可能会导致除以零的错误。
实际使用中,add和overlay,以及soft light都可以尝试下。相对效果还可以。
那么,blue_sigma有什么用?
粗糙的理解,这个值越小,画面中变化越明显的地方,越被保留,而画面中变化相对柔和的地方,就会被抛弃。
结合例子,比如说这个字母边缘是明显的黑色和灰色的对比,就会被保留,但是保留的是这个边缘,而不是整个字母。
像这种字母比较小,边缘也变化锐利,就可以在blue_sigma比较小的情况下保留下来;
所以当设置为1的时候,画面锐利的边缘会保留下来
但是瓶子上半部分的文字,文字内部的细节就保留的比较差了,这个时候我们要适当的提升sigma的值,画面的细节明显回来了很多。
当然了,这个值也不是越高越好,因为太高,会让画面变得模糊。
下边的factor就好理解了,可以简单理解为透明度,1就是100%,0就是0%,比如说设置为50%:
那么,设置超过1会如何呢?画面可能会过曝,因为本身他不是透明度,是一种计算因子【手动狗头】,适当调整一点,或许可以起到一点锐化的效果,这里就留给高级选手自己玩儿了。
好了,记得点赞收藏加关注啊~
✨写在最后
如果对comfyui还不熟悉的话,最近面向ComfyUI的新手,写了一门系统性入门图文课程,现在已经更新完成了,内容主要包括如何下载软件、如何搭建自己的工作流、关键基础节点讲解、遇到报错怎么解决等等,如果大家在学习过程中遇到什么问题,也可以直接对应的文章下留言,会持续更新相关答疑内容哈。欢迎订阅哦~
https://blog.csdn.net/jumengxiaoketang/category_12683612.html
感谢大家的支持~