-
论文
-
核心
-
鲁棒抠图
- 抽样阶段选择具有高信任度的样本估计出一个初始的alpha值
- 然后由随机步行最优化一个图标记问题来进一步改进结果
-
算法步骤
-
1. 优化颜色采样
-
最近邻采样
- 区域结构复杂时,不能够真实反应前景色和背景色的真实分布
-
1. 稀疏采样方法【此算法】
- 沿着己知前景区域和己知背景区域的边界稀疏地采集像素点
-
2. 采集了大量的样本点后,再从此样本集合中选出信度较高的样本对(一般选择3个样本对),α估值
- 未知像素的掩模值的估计值
- 距离比率
- 每个样本对定义如下两个权重
- 前景样本点和背景样本点与当前未知像素之间的最短欧式距离
- 综合距离比率和权重的定义,每个前景和背景对计算一个信度
-
2. 掩膜值α的优化
- 对图像掩膜值增加新的优先期望来优化掩膜值的初始估计值
-
对掩膜的两个期望
- 数据约束
- 最终掩膜值应该与掩膜值的初始估计值相关,尤其是那些具有高信度的像素点
- 邻域约束
- 最终的掩膜值应该是局部平滑的,并且对图像噪声具有鲁棒性
-
优化过程→图标记问题
- 满足数据约束:每个结点与“虚结点”定义一个数据权重
- 结点属于前景或背景的可能性
- 较高信度的结点,直接使用初始的掩膜估计值
- 信度较低
- 结点很有可能是完全前景像素或者完全背景像素
- 根据初始估计值来确定
- 未知像素数据权重公式
- γ
- 过高会导致掩膜值会被噪声污染
- 太低,会产生过分平滑的掩膜值
- 默认 0.1
- 满足邻域约束: 为相邻结点定义一个边权重
- 使得掩膜具有局部平滑性
-
使用随机游走来求解图标记问题
- 构造一个拉普拉斯矩阵L
- 将L 按已知像素和未知像素对应的结点分块矩阵
- 求解方程
- 防止一些低置信度的像素没有被选上
-
3. 前景重建
- 计算公式
-
工程代码
-
robust_matting.cpp
-
RobustMatting
- 构造方法: 初始化输入、输出
-
Run
- 程序入口
- 0. init
-
1. EstimateAlpha
- 1. 对前景/背景/未知区域,执行黑帽运算,分离比邻近点暗一些的斑块
- 2. 从前景/背景中随机选取出20-50个种子像素点
-
3. 遍历图像像素点,计算用户标注的未知像素点
- 未知像素点被标注为255
- 计算此像素点的α和置信度对(pair)
- 未知像素其他标注
- 如果对应的前景标注为255,则赋值为1
-
2. BuildMatrix
- 1. 构建矩阵
- 2. 遍历像素点,计算边的权重
- 3. 遍历像素点,计算数据权重
- 4. 求解矩阵,得到优化后的掩值图像α
- select_seeds
-
1.3.compute_alpha_confd
- 评估未知像素点的α值
-
1.3.1 min_dist_fbgd_sq
- 计算前景/背景与指定区域像素的最小距离
-
color_dist
- 计算像素值颜色差值平方
-
1.3.2 est_alpha
-
未知像素的掩模值的估计值α
-
1.3.3 rd_sq
-
计算距离比率
-
1.3.4 weight_fbgd
-
对每个样本的权重计算
-
1.3.5 confidence
- 综合距离比率和权重的定义,每个前景和背景对计算一个信度
- 2.1 build_A9x3
- 2.2 build_M9x3
-
图标记问题
- ΩB,ΩF都是虚点,为纯背景和纯前景点
- 白色节点为未知像素点
- 淡红色的结点用户标记的已知前景结点
- 淡蓝色的结点用户标记的己知背景结点