图像分割基础 - 理解区域划分原理与应用

· 9 分钟阅读

什么是图像分割 - 在像素级别理解图像

图像分割将图像中的每个像素分配到特定类别或区域,实现像素级别的图像理解。它是计算机视觉中最精细的识别任务。

分割类型:

  • 语义分割:每个像素分配一个类别标签 (如天空、道路、建筑)。不区分同类别的不同实例
  • 实例分割:不仅分类,还区分同类别的不同个体 (如区分不同的行人)
  • 全景分割:语义分割 + 实例分割的统一。所有像素都有类别,可数物体还有实例 ID

与其他任务的关系:

  • 图像分类:整张图像一个标签
  • 目标检测:边界框级别定位
  • 图像分割:像素级别定位 (最精细)

应用场景:自动驾驶 (道路/行人/车辆分割)、医学影像 (器官/病灶分割)、卫星遥感 (土地覆盖分类)、视频会议 (人物/背景分离)、图像编辑 (精确选区)。

经典方法 - 阈值法与边缘检测分割

在深度学习之前,图像分割主要依赖手工设计的算法,基于像素值、梯度或区域特征进行分割。

阈值分割:

  • 全局阈值:选择一个阈值 T,像素值 > T 为前景,否则为背景
  • Otsu 方法:自动计算最优阈值,最大化类间方差。OpenCV: cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU)
  • 自适应阈值:每个像素根据局部邻域计算阈值。适合光照不均的场景

边缘检测 + 轮廓:

  • Canny 边缘检测找到物体边界
  • 轮廓查找 (cv2.findContours) 提取封闭区域
  • 适合形状规则、对比度高的物体

分水岭算法:将图像视为地形,从标记点"注水",水域相遇处形成分割边界。适合分离接触的物体 (如细胞)。需要手动或自动提供标记点。

局限性:经典方法对复杂场景 (多类别、遮挡、纹理变化) 效果差,无法学习语义信息。

阈值法 (Thresholding):最简单的方法,按像素值是否超过阈值来分离前景与背景。大津法 (Otsu's method) 是自动确定「使类间方差最大化的最优阈值」的算法,用 OpenCV 的 cv2.threshold(img, 0, 255, cv2.THRESH_OTSU) 就能轻松实现。

边缘检测:用 Sobel 滤波器或 Laplacian 滤波器计算边缘的梯度,再以非极大值抑制和滞后阈值处理检测出精细的边缘。

区域生长法 (Region Growing):从种子点出发,当相邻像素满足相似条件 (色差在阈值以内) 时,就把区域向外扩张。

GrabCut 算法:用户指定一个大致的矩形后,用高斯混合模型 (GMM) 与图割来分离前景与背景,是一种交互式方法。可通过 OpenCV 的 cv2.grabCut 使用,长期被广泛用作背景去除工具的基础技术。

深度学习方法 - 从 FCN 到 U-Net 和 DeepLab

深度学习彻底改变了图像分割,通过端到端学习实现了前所未有的精度。

FCN (2015):首个端到端的分割网络。将分类网络的全连接层替换为卷积层,输出与输入同尺寸的分割图。开创了深度学习分割的先河。

U-Net (2015):

  • 编码器-解码器结构,对称的 U 形架构
  • 跳跃连接将编码器特征传递给解码器,保留空间细节
  • 在医学图像分割中表现卓越,少量数据即可训练
  • 变体:U-Net++, Attention U-Net, nnU-Net

DeepLab 系列:

  • 空洞卷积 (Atrous Convolution):扩大感受野而不降低分辨率
  • ASPP (Atrous Spatial Pyramid Pooling):多尺度特征提取
  • DeepLabV3+:编码器-解码器 + ASPP,当前最强通用分割架构之一
  • COCO 全景分割 mIoU > 60%

FCN (Fully Convolutional Network, 2015):把用于图像分类的 CNN (VGG、ResNet 等) 的全连接层替换为卷积层,从而实现了逐像素预测的开创性模型。

DeepLab 系列 (2016-2018):引入空洞卷积 (Atrous Convolution / Dilated Convolution),在扩大感受野的同时维持分辨率。DeepLab v3+ 用 ASPP (Atrous Spatial Pyramid Pooling) 整合多尺度的上下文信息,在 PASCAL VOC 2012 上达到了 mIoU 89.0%。

基于 Transformer (2021-):SegFormer、Mask2Former 等基于 Vision Transformer 的模型相继登场,精度已超过基于 CNN 的模型。

SAM (Segment Anything Model) - 通用分割的革命

Meta 于 2023 年发布的 SAM 是图像分割领域的里程碑,实现了零样本通用分割能力。

核心创新:

  • 提示式分割:通过点击、框选或文本提示指定要分割的对象
  • 零样本泛化:无需针对特定类别训练,可分割任意物体
  • 大规模预训练:在 SA-1B 数据集 (11M 图像,1.1B 掩码) 上训练

架构:

  • 图像编码器:ViT-H (Vision Transformer),提取图像特征
  • 提示编码器:编码点、框、文本等提示信息
  • 掩码解码器:轻量级解码器,快速生成分割掩码

SAM 2 (2024):扩展到视频分割,支持时间维度的物体跟踪和分割。实时交互式视频分割成为可能。

应用:交互式图像编辑、自动标注工具、医学图像辅助分割、遥感图像分析。SAM 大幅降低了分割任务的门槛。

SAM 的架构:Image Encoder 基于 ViT-H (Vision Transformer Huge),图像只要编码 1 次,就能对多个提示复用;Prompt Encoder 接受点 (点击位置)、框 (矩形选择)、文本、掩码等多样的提示;Mask Decoder 是轻量的 Transformer 解码器,能快速生成与提示对应的掩码。

使用模式与成本:交互式分割能立即生成包含用户点击点的物体掩码。由于 SAM 的 Image Encoder 计算成本较高 (ViT-H 在 GPU 上约 600ms/张),实时用途请考虑使用轻量版的 MobileSAM 或 EfficientSAM。

评估指标 - 理解 IoU、mIoU 和 Dice 系数

分割质量的定量评估需要标准化的指标,用于比较不同方法和监控模型性能。

IoU (Intersection over Union):

IoU = 预测 ∩ 真值 / 预测 ∪ 真值

  • 值域 [0, 1],1 表示完美分割
  • 对每个类别分别计算
  • mIoU:所有类别 IoU 的平均值,是最常用的分割指标

Dice 系数:

Dice = 2 × |预测 ∩ 真值| / (|预测| + |真值|)

  • 与 IoU 高度相关但数值更高 (Dice ≈ 2×IoU / (1+IoU))
  • 医学图像分割中更常用
  • 对小目标更敏感

像素精度:正确分类的像素比例。简单但对类别不平衡敏感 (背景占主导时精度虚高)。

基准参考: COCO 全景分割 SOTA mIoU > 60%; Cityscapes 语义分割 SOTA mIoU > 85%;医学分割 Dice > 0.9 通常被认为优秀。

IoU 与 mIoU:一般把 IoU 在 0.5 以上判定为「正确的分割」。mIoU (mean IoU) 是全部类别 IoU 的平均值,是语义分割的标准评价指标,用于 PASCAL VOC、Cityscapes 等基准。截至 2024 年的 SOTA (State of the Art),在 Cityscapes 上达到了 mIoU 85% 以上。

Pixel Accuracy 与 Boundary F1 Score:Pixel Accuracy 是被正确分类的像素比例。例如当图像的 90% 是背景时,只要把所有像素都预测为背景,就能得到 90% 的精度。Boundary F1 Score 则是评价分割边界精度的指标。

浏览器端分割 - TensorFlow.js 和 ONNX Runtime 实现

在浏览器中运行分割模型,实现无需服务器的实时图像分割。

TensorFlow.js 实现:

  • BodyPix:人体分割和姿态估计,适合视频会议背景替换
  • DeepLab:通用语义分割,20 个类别
  • 加载:const model = await deeplab.load({base: 'pascal'})
  • 推理:const result = await model.segment(image)

ONNX Runtime Web:

  • 支持更多模型格式,性能通常优于 TensorFlow.js
  • WebGL 和 WebGPU 后端加速
  • 可运行 PyTorch 导出的 ONNX 模型

性能考虑:

  • 模型大小:轻量模型 (MobileNet 骨干) 5-20MB,适合 Web
  • 推理速度:512×512 输入约 50-200ms (WebGL)
  • WebGPU:比 WebGL 快 2-5 倍,但浏览器支持仍在扩展中

实际应用:视频会议虚拟背景 (实时人物分割);照片编辑器 (交互式物体选择); AR 滤镜 (人脸/身体分割)。

用 TensorFlow.js 实现:Google 提供的 BodyPix 以及 MediaPipe 的 Selfie Segmentation,可以在浏览器上实时执行人物分割。import * as bodySegmentation from '@tensorflow-models/body-segmentation'; const model = bodySegmentation.SupportedModels.MediaPipeSelfieSegmentation; const segmenter = await bodySegmentation.createSegmenter(model); const people = await segmenter.segmentPeople(image); MediaPipe Selfie Segmentation 以 256 × 256 的输入分辨率运行,即便在移动设备上也能做到 30fps 以上的实时处理。输出是逐像素的概率图,用阈值 (通常 0.5-0.7) 二值化来生成掩码。

用 ONNX Runtime Web 实现:可以把用 PyTorch 训练的模型导出为 ONNX 格式,再用浏览器的 WebAssembly 或 WebGL 后端执行。也有把 SAM 的轻量版 (MobileSAM) 转为 ONNX 后在浏览器中运行的公开实现示例。

实现上的注意点:考虑到首次加载时间,应实现渐进式加载或用 Service Worker 缓存。内存管理方面要显式释放 GPU 内存:TensorFlow.js 中别忘了调用 tf.dispose(),ONNX Runtime 中别忘了调用 session.release()。Web Worker 方面,把推理处理与主线程分离以防止 UI 阻塞,若与 OffscreenCanvas 组合,绘制也能在工作线程中执行。

与服务端推理的分工:需要实时性时 (视频会议的背景去除) 在浏览器执行,需要高精度时 (电商网站的商品抠图) 则在服务端运行 SAM,这样的结构是推荐做法。

相关文章

背景去除技术详解 - 分割与抠图处理的工作原理

详解图像背景去除(背景透明化)所使用的技术。比较语义分割、基于三值图的 Alpha 抠图和边缘检测方法的原理与精度差异。

AI 图像生成与版权问题 - 法律与伦理挑战

多角度分析 AI 图像生成与版权问题。涵盖训练数据权利、生成内容的所有权归属以及商业使用注意事项。

语义分割入门 - 理解 U-Net 和 DeepLab 架构

详解语义分割的核心架构,从 FCN 开创性工作到 U-Net 的编码器-解码器结构和 DeepLab 的空洞卷积,涵盖训练数据准备和部署。

图像标注工具对比 - CVAT、Label Studio 与 Roboflow 的选择

比较主流图像标注工具的功能、效率和成本,帮助选择最适合机器学习项目的标注方案。

医学图像处理基础 - DICOM、CT 和 MRI 数据与技术

系统介绍医学图像处理,涵盖 DICOM 标准、CT/MRI 成像原理、窗宽窗位调节、分割技术以及临床 AI 应用。

Alpha 抠图技术详解 - 从自然图像中实现精确前景提取

全面解析 Alpha 抠图技术,从三值图输入设计到闭式抠图、深度学习抠图方法。涵盖头发丝级别的精确前景提取原理与实践工作流程。

相关术语