GrabCut 交互式图像分割系统
本项目是一个基于 MATLAB 开发的高度自动化的图像分割工具。它实现了经典的 GrabCut 算法,允许用户通过简单的交互操作(如绘制矩阵框和笔刷修正)从复杂的背景中精准地提取前景目标。
项目介绍
该系统旨在解决计算机视觉中的前景提取问题。通过结合颜色空间建模与空间连续性约束,算法能够识别物体边界。其核心是一套基于能量最小化的框架,利用高斯混合模型(GMM)捕捉颜色分布,并通过图割(Graph Cut)技术寻找最优的分割路径。该系统不仅提供了自动化的初始分割功能,还支持实时的手动微调。
功能特性
- 交互式初始化:用户通过简单的鼠标拖拽绘制矩形框,系统自动将框外区域设为背景,框内区域设为待处理的前景候选区。
- 自动化建模:系统内部自动为背景和前景分别建立 5 个组件的高斯混合模型(GMM),通过颜色分布区分目标与背景。
- 智能迭代优化:基于最大流最小割算法,系统会多次迭代优化分割边界,确保结果在颜色相似度和边界平滑度之间达到平衡。
- 增强型手动修正:提供“标记前景”和“标记背景”笔刷工具。用户可以通过自由手绘(Freehand)方式强制指定特定区域的属性,系统会响应并实时重新计算最优边界。
- 实时视觉反馈:分割结果以绿色轮廓线的形式叠加在原图上显示,方便用户直接观察分割精度。
- 最终结果导出:支持一键生成二值掩膜图及前景提取图(背景自动填充为白色)。
系统要求
- MATLAB 环境(建议使用包含 Image Processing Toolbox 图像处理工具箱的版本)。
- 硬件支持:标准鼠标设备以进行图形交互。
使用方法
- 启动程序:运行入口函数,系统会弹出文件选择对话框。
- 图像输入:选择本地图片。若取消选择,系统将自动生成一个带有噪声的红色方块示例图用于演示。
- 初始框选:在弹出的窗口中,使用鼠标在目标物体周围画一个矩形框。
- 等待计算:系统将自动进行 3 轮初始迭代。
- 交互修正:
- 如果分割不完整,点击“标记前景”按钮,在缺失的目标区域涂鸦。
- 如果背景被误选,点击“标记背景”按钮,在多出的背景区域涂鸦。
- 完成导出:点击“重置/完成”查看最终的掩膜图和扣取后的前景图。
实现逻辑与算法细节
#### 1. 掩膜定义机制
系统内部使用四种状态来标记每个像素:
- 确定背景 (0):矩形框外部区域或用户手动标记为背景的区域。
- 确定前景 (1):用户手动标记为前景的区域。
- 可能背景 (2):由算法在优化过程中推断的疑似背景。
- 可能前景 (3):矩形框内部区域及其在优化中被推断出的疑似前景。
#### 2. 高斯混合模型 (GMM)
算法为前景和背景分别构造了一组包含了 5 个高斯分量的混合模型:
- 使用简单的 K-means 聚类算法对像素颜色(RGB)进行分组。
- 计算每个分量的均值(mu)、协方差矩阵(sigma)以及权重(pi)。
- 通过计算负对数似然(Negative Log-Likelihood)作为数据项能量,评估每个像素属性的概率。
#### 3. 能量函数构建
系统构建了一个包含两个部分的 Gibbs 能量场:
- 数据项 (T-links):衡量像素符合前景或背景颜色模型的程度。确定区域(硬约束)将被赋予极大权重,从而在图割中保持不变。
- 平滑项 (N-links):考虑相邻像素的相似性。系统计算 8 邻域(水平、垂直、两个对角线方向)的差值,并利用指数衰减函数计算权重。像素间差异越大,权重越低,越容易产生分割边界。
#### 4. 最大流最小割算法
算法将图像映射为一个图结构:
- 每个像素为一个节点。
- 设立虚拟的源点(Source)和汇点(Sink)。
- 使用 MATLAB 的内置图论函数构建有向图,通过求解最大流问题来寻找切割能量最小的方案,从而将节点划分为前景集和背景集。
#### 5. 核心计算细节
- Beta 参数:系统预先遍历整幅图像,计算相邻像素平方差的期望倒数,用于自适应调整平滑项的灵敏度。
- 分割修正:当用户进行手动笔刷操作时,系统会更新掩膜中的“确定”状态位,并以这些点作为硬约束点重新执行图割过程。
- 结果显示:通过 Canny 边缘检测提取掩膜边界,并将其映射到原图的绿色通道,实现分割结果的动态预览。