如何删除背景图像并获得前景色
computer-vision
image-processing
image-segmentation
12
0

有两个图像

替代文字http://bbs.shoucangshidai.com/attachments/month_1001/1001211535bd7a644e95187acd.jpg 替代文字http://bbs.shoucangshidai.com/attachments/month_1001/10012115357cfe13c148d3d8da.jpg一个是背景图像,另一个是与人的照片背景相同,大小相同,我要删除的是第二张图片的背景,并且仅提取此人的个人资料。常见的方法是从第二张图像中减去第一张图像,但是我的问题是人的衣服颜色是否与背景颜色相似。减法的结果很糟糕。我无法获得整个人的个人资料。有去除背景的好主意的人给我一些建议。先感谢您。

参考资料:
Stack Overflow
收藏
评论
共 2 个回答
高赞 时间 活跃

如果您对图像背景有很好的估计,那么与人一起从图像中减去它是一个很好的第一步。但这仅仅是第一步。之后,您必须对图像进行分割,即必须将图像划分为“背景”和“前景”像素,并具有以下约束:

  1. 在前景区域,与背景图像的平均差异应较高
  2. 在背景区域中,与背景图像的平均差异应较小
  3. 区域应该光滑。轮廓长度和曲率应最小。
  4. 区域的边界在源图像中应具有较高的对比度

如果您有数学上的倾向,则可以使用Mumford-Shah函数对这些约束进行完美建模。 浏览此处获取更多信息。

但是您可能可以使其他分段算法适应该问题。

如果您想要一个快速,简单(但不完美)的版本,则可以尝试以下操作:

  • 减去两个图像
  • 找到背景-前景差异大于某个阈值的最大连续像素“斑点”。这是前景图像中“人员区域”的第一个粗略估计,但是分割不满足上面的标准3和4。
  • 找到最大的斑点的轮廓( 编辑:请注意,您不必从轮廓开始。也可以从较大的多边形开始,因为这些步骤会自动将其收缩到最佳位置。)
  • 现在浏览轮廓中的每个点并平滑轮廓。也就是说,对于每个点,找到使公式最小化的点:c1 * L-c2 * G,其中L是轮廓点的长度(如果将点移到此处,G是该点将移至的位置处的渐变), c1 / c2是控制过程的常数。将点移动到该位置。这具有在源图像中低梯度区域中平滑轮廓多边形的效果,同时使其与源图像中的高梯度(即人的可见边界)保持联系。您可以为L和G尝试不同的表达式,例如,L可以考虑长度和曲率,G可以考虑背景中的梯度并减去图像。
  • 您可能必须重新标准化轮廓多边形,即确保轮廓上的点有规律地间隔开。或者,或者在之前的步骤中确保点之间的距离保持规则。 (“大地蛇”)
  • 重复最后两个步骤,直到收敛

现在,您将拥有一个轮廓多边形,该多边形接触可见的人员-背景边框,并在该边框不可见或对比度较低的地方平滑地继续。查找“ Snakes”( 例如,此处 )以获取更多信息。

收藏
评论

在减去图像之前,先对图像进行低通滤波(模糊)。然后使用该差异信号作为遮罩选择感兴趣的像素。足够宽的滤波器将忽略太小的(高频)功能,这些功能最终会在您感兴趣的对象内切出“可怕的”区域。它还将减少像素级噪声和未对准(最高频率信息)的突出显示。

此外,如果您有两个以上的帧,则引入一些时间滞后将使您随着时间的推移也能形成更稳定的关注区域。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题