🧵背景
在做AI绘图的时候,经常有一些图像的细节需要保留原始图像内容,比如说衣服的细节,商品的文字标签等等,如果这些地方发生了变化,就会导致生成的结果无法直接商用,而让生成的图像完全保留原图中的某些细节,基于diffusion的算法,不太可能直接实现,而基于图像蒙版,又容易让图像本身的接缝或者光影产生很多问题。
最近了解到一种基于图像高频信息保留的方式,可以比较好的保留图像中的细节。
呈现出来大概是这样:
这种方式可以很好的保留图像中的细节,那么这几个节点是怎么实现保留图像细节的呢?
🎄算法来源
如果大家做过设计或者摄影修图,应该都了解过利用高反差保留来实现人像摄影中,皮肤磨皮的前提下实现毛孔等细节的保留,后来也有一些磨皮方法是将图像中高频信息和低频信息分离后,对低频信息的图层进行修正而保留图像的细节。
网络上内容很多,可以搜索“photoshop 高频信息 修图”,这里贴一篇案例,有兴趣的可以在ps中尝试手动实现:
https://www.cnblogs.com/caihongmin/p/17629109.html
那么,这个过程到底做了什么呢,简单来说就是高频信息和低频信息的分离。
高频信息是什么?
在图像处理中,高频信息通常指的是图像中变化剧烈的区域,比如边缘、纹理和细节。这些高频信息对于图像的清晰度和细节表现至关重要。以下是一些关于高频信息的要点:
-
定义:高频信息是图像中局部变化快速的部分,与低频信息(图像中的平滑区域)相对。
-
重要性:高频信息对于图像的清晰度、边缘的锐度和纹理的细节至关重要。
-
应用:
- 图像锐化:通过增强图像的高频部分来提高图像的清晰度。
- 边缘检测:高频信息有助于识别图像中的边缘。
- 纹理分析:高频信息有助于识别和分析图像中的纹理特征。
-
影响因素:
- 噪声:噪声通常表现为图像中的高频随机变化,可能会影响图像质量。
- 模糊:图像模糊通常与高频信息的丢失有关。
-
处理技术:
- 高通滤波器:用于提取图像中的高频信息,如拉普拉斯滤波器、高通Sobel滤波器等。
- 频域分析:在频域中,高频信息可以通过对图像进行傅里叶变换来分析。
-
图像质量:高频信息的保留对于保持图像的视觉质量非常重要,但过多的高频噪声可能会导致图像看起来粗糙或模糊。
-
压缩:在图像压缩中,高频信息通常被压缩得更多,因为人眼对高频细节的敏感度较低。
-
计算机视觉:在计算机视觉中,高频信息对于物体识别、场景理解等任务至关重要。
那低频信息又是什么?
图像中的低频信息指的是图像中变化较慢或较为平滑的区域,通常包括大面积的均匀颜色或渐变色。低频信息在图像处理和分析中扮演着重要角色,以下是一些关于低频信息的关键点:
-
定义:低频信息是指图像中变化不大或相对平滑的区域,与高频信息(快速变化的区域)相对。
-
重要性:低频信息有助于理解图像的整体结构和布局,对于图像的平滑度和背景有重要影响。
-
应用:
- 图像平滑:通过减少或去除高频信息来平滑图像,常用于去除噪声。
- 图像缩放:在图像缩放过程中,低频信息有助于保持图像的整体结构。
-
影响因素:
- 模糊:图像模糊可能由低频信息的增强和高频信息的减少造成。
- 光照变化:光照的不均匀性可能在图像中表现为低频信息的变化。
-
处理技术:
- 低通滤波器:用于提取图像中的低频信息,如高斯滤波器、平均滤波器等。
- 频域分析:在频域中,低频信息可以通过对图像进行傅里叶变换来分析。
-
图像质量:低频信息有助于保持图像的整体视觉效果,但过度强调低频信息可能会导致图像细节的丢失。
-
压缩:在图像压缩中,低频信息通常被保留得更多,因为人眼对低频信息的敏感度较高。
-
计算机视觉:在计算机视觉中,低频信息有助于场景的总体理解,但可能不足以进行精确的物体识别。
-
图像分割:在图像分割任务中,低频信息有助于识别图像中的大块区域。
-
艺术效果:在艺术和设计中,低频信息的调整可以创造出不同的视觉效果,如梦幻效果或抽象画。
不严谨的来理解的话,高频信息就是图像中的各种文字、边缘等变化强烈的部分,而低频信息就是光影等变化不强烈的部分。
拿这个啤酒瓶为例:
高频信息提取后就是这样:
低频信息提取后(高斯模糊10个像素)
那么高频信息和低频信息分别是如何提取的呢?
先说低频信息,这个很简单,直接通过ps中的高斯模糊,模糊一定的数值就行,如果是人像磨皮,可能5个像素的高斯模糊就差不多了,而如果是保留商品中的文字之类的,可以考虑高一些,比如说20~50像素(当然,这个跟你图像本身尺寸也有关系);
然后是高频信息,这个需要用到ps中的图像-应用图像,来进行计算;
用原始图像,减去 低频图像,同时设定缩放为2,补偿为128,那么就可以得到这张模糊的低频图像对应的高频图像,也就是图像的细节部分。
那么这里的2和128到底是什么意思呢?
其实查一下资料就可以知道:
就是图像的rgb值经过这个计算进行得到的。
带入刚才的2和128,也就是:(B-A)/2-128=result
这个操作,等价于:
(原图像 先反色 * 50% 透明度 + 原图像 高斯模糊 *50%透明度)再反色
注意,这里的叠加模式add,跟ps中的add并不是同一个概念,这里的add仅仅是图像透明度叠上去,ps中的add是相加模式,算法非常不同;
好,到这里仅仅是把高频噪声提取了出来,如何还原图像呢?
对,线性光叠加就好了。
ps里边实现还是很简单的,毕竟东西都很齐全。
但是问题是,comfyui中没有线性光。
那么线性光的计算公式是个啥?
根据百度百科:公式:基色+2混合色-255=结果色。
不过根据实测,这个公式并不是很完整,从ps中试验下来应该是这样的公式:
result= 原色+ 2*混合色 - 256,同时如果结果超过255,那么结果就是255,如果结果小于0,结果就是0
大家可以在ps中自行尝试。
用A代表原色,B代表混合色,那就是 result=A+2B-256,同时如果结果超过255,那么结果就是255,如果结果小于0,结果就是0。
那么,如果comfyui中没有现成的线性光,有没有别的方法可以实现这个类似的公式呢?
有人想到了。
高频图像,也就是B,用66.6%(2/3)的透明度,叠加在高斯模糊后的图像A上,然后通过色阶调整,将结果图像再映射到0~255的图像空间上。
这里涉及到一点色阶的计算公式:
引用:PS 色阶调整之算法公式原理详解及 Python 实现(色阶原理)_photoshop色阶开发-CSDN博客
那么前边的描述:高频图像,也就是B,用66.6%(2/3)的透明度,叠加在高斯模糊后的图像A上,然后通过色阶调整,将结果图像再映射到0~255的图像空间上。
也就是:[(2/3*B+1/3*A-1/3*255)/(1/3*255)]*255=result
同时:
稍微计算下,完全等价于线性光的公式:
用A代表原色,B代表混合色,那就是 result=A+2B-256,同时如果结果超过255,那么结果就是255,如果结果小于0,结果就是0。
emm,发现这个公式的人的确很强😄
如果这些内容懒得看,只需要知道:
左边的箭头其实就是2/3,所以用66%或者67%都可以,右边的色阶是255*1/3,1,255*2/3,就可以了。
没有什么玄学。
在ps中试验下,也可以看到经过前边的操作,色阶被压缩在中间1/3处,反向映射回去就跟原图看起来没有太大差别了。
如果大家觉得有帮助,还请点赞收藏哦。
这里是聚梦小课堂~
✨写在最后
如果对comfyui还不熟悉的话,最近面向ComfyUI的新手,开了一门图文课程,现在已经更新完成了,如果大家在学习过程中遇到什么问题,也可以直接文章下留言,会持续更新相关答疑内容哈。欢迎订阅哦~
https://blog.csdn.net/jumengxiaoketang/category_12683612.html
感谢大家的支持~