【ComfyUI插件】ComfyUI Essentials插件(三)
前言:
该插件由cubiq大佬进行开发出来的(这个大佬也是Ipadapter和InstandID和Pulid的Comfyui插件的开发作者),此插件主要在图片处理、蒙版处理、采样器、文本编码器等多个方面提供了辅助节点帮助我们更好解决一些问题。(本节中主要是针对图片色彩控制的节点,以及蒙版mask处理操作,如阈值分割、平滑、翻转等)
目录
先行:安装方法
一、Image Apply LUT节点
二、Pixelize节点
三、Image Color Match节点
四、Image Color Match Adobe节点
五、Image Histogram Match节点
六、Image Smart Sharpen节点
七、Mask Blur/Mask Preview节点
八、Mask Bounding Box节点
九、Mask Fix节点
十、Mask From RGB/CMY/BW节点
十一、Mask Flip节点
十二、Mask From Color节点
十三、Mask From List节点
十四、Mask Smooth节点
十五、Mask From Segmentation节点
__ComfyUI Essentials插件(一): __https://articles.zsxq.com/essentials/1.html
__ComfyUI Essentials插件(二): __https://articles.zsxq.com/essentials/2.html
__ComfyUI Essentials插件(四): __https://articles.zsxq.com/essentials/4.html
__ComfyUI Essentials插件(五): __https://articles.zsxq.com/essentials/5.html
__ComfyUI Essentials插件(六): __https://articles.zsxq.com/essentials/6.html
本期使用的示例工作流在网盘:小黄瓜知识星球资料分享/插件节点讲解视频/Essentials/第三期文件夹中。
本文大量使用了Range(Int)/Range(Float)节点来设置不同的参数对图片进行对比,感觉比较好用。关于这两个节点的细节使用,大家可跳转ComfyUI Easy Use插件(四)中Range(Int)节点进行查看。
安装方法
安装方法,一共有2种
1、在manager里搜索ComfyUI Essentials,然后点击安装第一个即可
__2、在custom_nodes目录下调用cmd,然后输入git clone __https://github.com/cubiq/ComfyUI_essentials.git
项目地址:https://github.com/cubiq/ComfyUI_essentials.git
一、Image Apply LUT节点
节点功能:该节点是将输入图片通过LUT文件的颜色映射输出新的效果图片(注:lut文件放在comfyui_essentials/luts目录里)
输入:
image -> 输入图片
参数:
lut_file -> lut是Look up Table的缩写,中文直译颜色查找表,即将图片原有颜色的rgb通过lut文件中设置的颜色映射关系输出形成一张新的颜色的图片,简单来说可以看成给原有图片加上一种滤镜效果,一般选择自己需要的lut文件即可
gamma_correction -> 伽马校正,这个是对于相机或显示器拍摄呈现的视觉效果的校正,使之更接近我们肉眼观察到的景色的视觉效果,根据需要选择即可
clip_values -> 通过设置true或false条件判断是否对LUT中的值进行裁剪,并且根据LUT的不同维度(1D或3D)采取不同的裁剪策略。一般默认true即可
strength -> 设置lut文件作用强度,1代表最强,0代表无效,根据需要设置即可
输出:
IMAGE -> 输出颜色映射后的新图片
这里推荐个lut_file下载网址https://shutterstock.com/zh-Hant/blog/free-luts-for-log-footage,有48种色彩
放到该文件夹。
这是不同__strength__下图片色彩效果
二、Pixelize节点
节点功能:该节点是将输入图片进行像素化处理并输出新的图片
输入:
image -> 输入图片
参数:
downscale_mode -> 分为contrast, bicubic, nearest, center, k-centroid 五种模式,根据需要选择即可
target_size -> 设置目标大小,这个参数设置影响缩放下形成图像的大小,一般默认即可,但注意这不是最终目标图像的大小,一般默认即可
patch_size -> 定义每个像素块大小, 值越大,值越大,像素化效果越明显,一般默认即可
thickness -> 处理图片轮廓扩展的厚度,影响最终输出图像的像素块的多少,定义块之间的分隔线厚度,用于增强块状感。一般默认即可
color_matching -> 图片颜色匹配,使生成图片与原始图片颜色更接近,一般默认true即可
upscale -> 是否最终输出的图像扩大到和原图大小一致,一般默认true
输出:
image -> 输出像素化后的图片
缩放模式对比:
默认参数下5种__downscale_mode__下的效果,其中__nearest__效果较好,__contrast__效果最差。但都有点糊。
将__target_size__调大后,图片效果较好,但计算的时间比较长。
以下分别对应__patch_size__为8、16、24、32的效果图,值越大,像素风越明显。
以下分别对应__thickness__为4、8、12、16的效果图,值越大,块状越明显。
三、Image Color Match节点
节点功能:将输入图片与参考图片进行颜色匹配从而输出颜色校正后的图片,通常用在重绘或者放大后图片颜色出现变换需要进行颜色矫正的场景
输入:
image -> 输入图片
reference -> 参考图片
reference_mask -> 参考图片的蒙版,这样颜色匹配参考只参考蒙版区域部分
参数:
color_space -> 选择使用的颜色空间,分为LAB、YcbCr、RGB、LUV、YUV、XYZ,按需选择即可
factor -> 调节颜色匹配权重,1为完全匹配,0为不进行颜色匹配,选择合适即可
device -> 选择合适设备,一般选择auto,让系统自动选择即可
batch_size -> 设置批量图片大小,用来批量图片处理时使用,对于单张图片默认即可
以下为不同__color_space__的效果图,基于参考图对原图进行颜色匹配。
如下图,可以看出,__factor__越大,颜色匹配越强烈。
如下图,根据蒙版区域的颜色进行匹配。
四、Image Color Match Adobe节点
节点功能: 将输入图片与参考图片进行颜色匹配从而输出颜色校正后的图片,与前者不同的是增加了更多参数更好地调节颜色匹配
输入:
image -> 输入图片
reference -> 参考图片
reference_mask -> 参考图片的蒙版,这样颜色匹配参考只参考蒙版区域部分
参数:
color_space -> 选择使用的颜色空间,分为LAB、RGB,按需选择即可
luminance_factor -> 亮度调节,取值范围从0到2,其中0最暗,2最亮,一般默认即可
color_intensity_factor -> 颜色强度调节,取值范围从0到2,其中0接近黑白照片,2图片颜色最艳丽,按需选择即可
fade_factor -> 颜色变换效果作用比例,0代表前面设置的所有色彩调节不生效,直接输出原图,1代表100%作用强度
neutralization_factor -> 中和色偏,调节中和色偏差,0是无偏差,1为最大
device -> 选择合适设备,一般选择auto,让系统自动选择即可
输出:
IMAGE -> 输出颜色调节后的图片
__luminance_factor__为0、0.4、0.8、1.2、1.6、2.0的效果图。可以看出,值越大,图片亮度越高。
以下为不同__color_intensity_factor__的效果图,值越大,色彩越艳丽。
以下则分别为__fade_factor__和__neutralization_factor__不同值的效果,都是值越大,色彩变化越强烈。
五、Image Histogram Match节点
节点功能: 将原图片匹配参考图片的直方图,并生成调整过直方图后的原图片
输入:
image -> 输入图片
reference -> 参考图片
参数:
method -> 方法分为pytorch和skimage,skimage方法会按彩色调进行直方图匹配,速度更快,而pytorch方法会按明暗色调进行直方图匹配,速度慢
factor -> 调节直方图匹配权重,1为完全匹配,0为不进行颜色匹配,选择合适即可
device -> 选择合适设备,一般选择auto,让系统自动选择即可
以下分别为__pytorch__和__skimage__方法进行匹配的效果图。
以下为不同__factor__的效果图,值越大,颜色匹配风格更强
六、Image Smart Sharpen节点
节点功能:图片智能锐化节点,更好的调节图片锐化效果
输入:
image -> 输入图片
参数:
noise_radius -> 噪声半径,取值范围从1到25,这个控制的是对图片处理中适当增加的模糊,一般默认即可
preserve_edges -> 保存边缘参数,取值范围从0到1,这个在处理降噪保存边缘函数中使用,一般默认即可
sharpen -> 图片锐化,取值范围从0到25,值越大锐化效果越强
ratio -> 图片智能锐化效果比例,取值范围从0到1,0无效,1最强,按需选择
输出:
IMAGE -> 输出智能锐化后的图片
以下分别为__noise_radius__和__preserve_edges__不同值的效果,目测看不出有什么区别,但从头发处可以看出还是有锐化影响的。
以下为__sharpen__不同值的效果,可以看出,值越大,锐化痕迹越重。
以下为__ratio__不同值的效果,可以看出,值越大,锐化效果越明显。
七、Mask Blur/Mask Preview节点
节点功能:对输入蒙版进行模糊处理/对输入蒙版进行预览
输入:
mask -> 输入蒙版
参数:
amount -> 蒙版模糊程度,取值范围从0到255,值越大越模糊
device -> 选择合适设备,一般选择auto,让系统自动选择即可
输出:
mask -> 输出模糊处理后的蒙版
不同__amount__下的蒙版效果如下,值越大越模糊。
八、Mask Bounding Box节点
节点功能:提取图片中的蒙版,并输出蒙版位置、大小等信息
输入:
mask -> 输入蒙版
image_optional -> 输入图片,可选项
参数:
padding -> 设置填充像素,此设置会使裁切的蒙版的4边都填充此数值
blur -> 设置模糊像素,此设置会使裁切的蒙版的4边都扩大模糊像素的一半,并对裁切蒙版施加模糊效果
输出:
mask -> 裁切得到的蒙版
IMAGE -> 如果image_optional有输入,则会输出裁切图片,否则输出裁切蒙版
x -> 输出蒙版位于原图的x坐标
y -> 输出蒙版位于原图的y坐标
width -> 输出裁切蒙版的宽度
height -> 输出裁切蒙版的高度
mask在进行pad后,x,y都减少了pad数,而width和height都增加了2*pad数,因为是两边进行填充。但是,当超出图片大小后,mask大小只会到原图的宽和高大小,如下面右边,其中的height增加了40,而witdh只增加了30 ,因为width已经到了图片的宽度了。
九、Mask Fix节点
节点功能:该节点主要用于对 二值化掩膜(mask)进行各种形态学和模糊处理,以增强或修正掩膜的质量。该节点提供了一系列可调参数,允许用户通过形态学操作(如膨胀、腐蚀、填充孔洞、去除孤立像素等)以及模糊处理来修正掩膜的形态。
输入:
mask -> 输入蒙版
参数:
erode_dilate -> 设置蒙版侵蚀扩展像素,设置大于0,则蒙版膨胀,小于0,则蒙版腐蚀,等于0,则蒙版不变
fill_holes -> 设置填充蒙版空洞的像素值,值越大,蒙版中空洞填充越完整
remove_isolated_pixels -> 去除蒙版中的独立像素,值越大,去除蒙版中独立像素越多
smooth -> 设置蒙版平滑度,值越大,蒙版过渡越平滑
blur -> 设置蒙版模糊,值越大,蒙版模糊程度越大
输出:
MASK -> 输出的蒙版
以下__erode_dilate__分别为-5、0、5的效果,0也就是中间是原图,对比左边腐蚀图和右边膨胀图。腐蚀变瘦变小,膨胀变胖变大。
以下为__fill_holes__不同值的效果图,__fill_holes__值越大,空洞的数量越少,但是__fill_holes__不是越大越好,过大会使得数字粘连。(比如第六张图的数字5)
以下为__remove_isolated_pixels__不同值的效果图,值越大,被处理的孤立像素越多,但过大,容易把全部的像素都清除。
从下图可以看到,__smooth__越大,边缘过渡越平滑,但细节丢失越多。
以下为__blur__不同值的效果图,值越大,模糊效果越明显。
十、Mask From RGB/CMY/BW节点
节点功能:通过设置的rgb阈值提取图片中各个颜色的蒙版
输入:
image -> 输入图片
参数:
threshold_r -> 设置的red阈值,一般默认即可
threshold_g -> 设置的green阈值,一般默认即可
threshold_b -> 设置的blue阈值,一般默认即可
输出:
red -> 图片中的红色部分的蒙版
green -> 图片中的绿色部分的蒙版
blue -> 图片中的蓝色部分的蒙版
cyan -> 图片中的青色部分的蒙版
magenta -> 图片中的品红色部分的蒙版
yellow -> 图片中的黄色部分的蒙版
black -> 图片中的黑色部分的蒙版
white -> 图片中的白色部分的蒙版
如果是__纯色__,使用默认值,然后连接对应的颜色输出是没问题。
难点在于不是纯色的时候该如何设置阈值。如下图,该红色不是纯色,使用默认值检测不到了。这是官方的计算代码。
red = ((image[..., 0] >= 1-threshold_r) & (image[..., 1] < threshold_g) & (image[..., 2] < threshold_b)).float()
green = ((image[..., 0] < threshold_r) & (image[..., 1] >= 1-threshold_g) & (image[..., 2] < threshold_b)).float()
blue = ((image[..., 0] < threshold_r) & (image[..., 1] < threshold_g) & (image[..., 2] >= 1-threshold_b)).float()
cyan = ((image[..., 0] < threshold_r) & (image[..., 1] >= 1-threshold_g) & (image[..., 2] >= 1-threshold_b)).float()
magenta = ((image[..., 0] >= 1-threshold_r) & (image[..., 1] < threshold_g) & (image[..., 2] > 1-threshold_b)).float()
yellow = ((image[..., 0] >= 1-threshold_r) & (image[..., 1] >= 1-threshold_g) & (image[..., 2] < threshold_b)).float()
black = ((image[..., 0] <= threshold_r) & (image[..., 1] <= threshold_g) & (image[..., 2] <= threshold_b)).float()
white = ((image[..., 0] >= 1-threshold_r) & (image[..., 1] >= 1-threshold_g) & (image[..., 2] >= 1-threshold_b)).float()
这里以__red__为例,首先使用244/255=0.95,image[..., 0]=0.95,然后1-0.95=0.05,然后将threshod_r稍微调大一些,因为image[..., 0] >= 1-threshold_r,然后53/255=0.20,image[..., 1]=0.20,image[..., 1] < threshold_g,默认的0.15<0.2,所以就取不到了,故取了0.25, threshold_b的计算过程也是一样。(当然,这是针对8bitRGB图,所以是除以255,进行归一化)
十一、Mask Flip节点
节点功能:将输入的蒙版根据对称轴进行翻转
参数:
axis -> 分为x、y、xy对称轴,选择合适对称轴进行蒙版翻转
以下是不同对称轴翻转效果图
十二、Mask From Color节点
节点功能:从输入图片设置的rgb和阈值获取对应的蒙版
输入:
image -> 输入图片
参数:
red -> 设置的red的值,取值范围0-255
green -> 设置的green的值,取值范围0-255
blue -> 设置的blue的值,取值范围0-255
threshold -> 设置的阈值,取值范围0-127,会将前面设置的rgb范围变成从min((0,0,0),(rgb-threshold))到max((255,255,255),(rgb+threshold))
低阈值(例如 10-20):这将允许与目标颜色有小的偏差。蒙版将仅包含非常接近目标的像素。
中等阈值(例如 30-50):此范围允许适度的颜色变化。如果您尝试捕捉更大范围的相似颜色,这将非常有用。
高阈值(例如 100 或更高):这将允许颜色有更大的变化,如果您尝试匹配目标周围更广泛的颜色光谱,这将很有用。
输出:
MASK -> 获取处理后的蒙版
如下图,使用一些吸取颜色的工具对某一颜色进行吸取,然后读取像素值,输入到__Mask From Color节点__中,再设置__threshold。__
如果实在不会选择__threshold,在输入完RGB值后,使用实时运行来选择恰当的__threshold。
十三、Mask From List节点
节点功能:通过预设值批量输出蒙版
输入:
values -> 这个没有找到可以连接的点
参数:
width -> 设置输出蒙版的宽度
height -> 设置输出蒙版的高度
输入框 -> 输入数字字符串,最好输入0到1.0之间,如果要批量输入,使用,进行分隔,这个输入数字会调节输出蒙版的黑白程度,0是黑,1是白
输出:
MASK -> 输出预设的蒙版
需要注意,数字之间要有逗号,否则报错。
也可以外部导入__values__进行输出。
十四、Mask Smooth节点
节点功能:将输入蒙版进行平滑处理
参数:
amount -> 设置蒙版平滑度值,值越大,蒙版越平滑
可以看到,__amount__值越大,蒙版边缘越平滑。
十五、Mask From Segmentation节点
节点功能:将输入图根据颜色进行划分输出蒙版
输入:
image -> 输入图片
参数:
segments -> 想要分割出的蒙版数量
remove_isolated_pixels -> 设置移除的独立像素值,值越大,去除独立像素越多
remove_small_masks -> 设置去除小蒙版,值越大,去除小蒙版越多
fill_holes -> 是否填充蒙版空洞
输出:
MASK -> 输出的蒙版
该图像有三块区域,故设置__segments__为3。
在设置不同的__remove_isolated_pixels__值后,分别为0、8、16、24、32,可以看到,值越大,孤立的像素越来越少。
以下为__remove_small_masks__=0.15、0.2、0.7时效果图,和第一张图中的mask图像进行对比,可以看到,0.15时,把最小的mask区域去除了,0.2时把剩下的两块中最小的部分又去除了,0.7时把仅剩的一块去除了。
当__fill_holes__为true时,把空洞区域给填补了。
__ComfyUI Essentials插件(一): __https://articles.zsxq.com/essentials/1.html
__ComfyUI Essentials插件(二): __https://articles.zsxq.com/essentials/2.html
__ComfyUI Essentials插件(四): __https://articles.zsxq.com/essentials/4.html
__ComfyUI Essentials插件(五): __https://articles.zsxq.com/essentials/5.html
__ComfyUI Essentials插件(六): __https://articles.zsxq.com/essentials/6.html