C30:优化文章:使用 Segment Anything 实现自动遮罩

简介

在上一篇文章中,我们了解到自动遮罩是图像编辑工作流程中的一项关键技术,尤其是在为修复或合成等任务将前景主体与背景分离时。在本文中,我们将探讨如何结合 ComfyUI 使用 Segment Anything 模型(SAM 2)来自动完成遮罩过程。利用自定义节点和工作流程,你可以高效地定义遮罩、柔化边缘并替换背景。



自动遮罩的关键组件

1. 安装所需的节点包和模型

要开始自动遮罩,你需要安装以下内容:

  • 节点包:
    使用 ComfyUI Manager 搜索并安装这些节点包。安装完成后,重启 ComfyUI。
  • SAM 2 模型:
    • 下载 sam2.1_hiera_base_plus-fp16 的模型。来源: Hugging Face。
    • 将模型放在 ComfyUI/models/Sam2 目录中。如果模型没有自动安装,请按照 Hugging Face 页面上提供的手动安装步骤操作。

2. 设置工作流程

安装所需的工具后,你可以创建一个自动遮罩工作流程。以下是分步指南:

加载图像

首先,使用 Load Image 节点将前景图像和背景图像加载到 ComfyUI 中。请确保已知图像分辨率,因为分割需要用到它。

获取图像分辨率

使用 Essentials Pack 中的 Get Image Size 节点提取已加载图像的宽度和高度。将 Load Image 节点的输出连接到 Get Image Size 节点。

定义分割坐标

要指定分割点:

  1. 添加 KJNodes 包中的 Points Editor 节点。
  2. 将 Get Image Size 节点的图像、宽度和高度输出连接到 Points Editor。
  3. 右键单击 Points Editor 节点并选择:
    • 将小部件转换为输入 (同时适用于宽度和高度)。
    • 新建画布 ,创建一个空白画布。
加载 SAM 2 模型
  1. 添加 Download SAM 2 Model 节点,并确保模型参数设置如下:
    • 模型: sam2_hiera_base_plus
    • 设备: cuda
    • 精度: floating.16
  2. 将加载器节点的输出连接到 SAM 2 Segmentation 节点。
创建分割遮罩
  1. 添加 SAM 2 Segmentation 节点。
  2. 将 Points Editor 节点的图像和坐标(正点和负点)连接到分割节点。
  3. 使用 Essentials Pack 中的 Mask Preview 节点预览遮罩输出。

3. 提高遮罩质量

用模糊柔化边缘

要优化遮罩,请使用 KJNodes 包中的 Grow Mask with Blur 节点:

  1. 将 Grow Mask with Blur 节点放置在 SAM 2 Segmentation 节点与 Image Composite Mask 节点之间。
  2. 调整以下参数:
    • 模糊半径:设置为 2 ,以获得更平滑的边缘。
    • 扩展值:设置为 2 pixels ,以略微扩大遮罩。
  3. 使用 Mask Preview 节点实时查看更改效果。
合成遮罩

将 Grow Mask with Blur 节点的输出连接到 Image Composite Mask 节点。这样可以在保持前景主体完整的同时替换背景。


4. 保存最终图像

对遮罩和背景替换感到满意后:

  1. 添加一个 Save Image Extended 节点,将输出保存到磁盘。
  2. 确保 Queue Mode 设置为 Queue。
  3. 使用 Ctrl + B 取消保存节点的旁路,并将工作流程排队以保存图像。

示例工作流程

下面是工作流程设置的一个示例:

1. Load Image Node → Get Image Size Node → Points Editor Node  
2. Download SAM 2 Model Node → SAM 2 Segmentation Node → Mask Preview Node  
3. Grow Mask with Blur Node → Image Composite Mask Node → Save Image Extended Node  


提高遮罩精度

为确保遮罩精度最佳:

  • 使用 Points Editor 节点准确定义前景点和背景点。
  • 在 Grow Mask with Blur 节点中尝试不同的模糊值和扩展值,以平衡边缘柔和度与遮罩覆盖范围。

参考资料

发表评论