15

有两个图像

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

4

6 回答 6

17

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

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

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

但是您可能可以调整其他分割算法来解决这个问题。

如果你想要一个快速简单(但不完美)的版本,你可以试试这个:

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

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

于 2010-01-21T08:24:31.087 回答
4

在减去图像之前对图像进行低通滤波(模糊)。然后使用该差异信号作为掩码来选择感兴趣的像素。一个足够宽的过滤器将忽略那些最终会在您感兴趣的对象内雕刻出“糟糕”区域的太小(高频)特征。它还将减少像素级噪声和错位(最高频率信息)的突出显示。

此外,如果你有两个以上的帧,引入一些时间滞后也会让你随着时间的推移形成更稳定的感兴趣区域。

于 2010-02-05T20:36:58.723 回答
1

我认为常见的一种技术是使用混合模型。抓取一些背景帧,并为每个像素建立一个颜色混合模型。

当你应用一个包含人的框架时,你会得到一些颜色是前景或背景的概率,给定混合模型中每个像素的概率密度。

在你有 P(像素是前景)和 P(像素是背景)之后,你可以对概率图像进行阈值处理。

另一种可能性是在一些更聪明的分割算法中使用概率作为输入。一个例子是我注意到的图形切割效果很好。

然而,如果这个人穿着与背景在视觉上无法区分的衣服,显然上述方法都不起作用。你要么必须获得另一个传感器(如 IR 或 UV),要么有一个非常精细的“人模型”,如果它发现它认为是躯干和头部,可以将腿“添加”到正确的位置。

祝项目顺利!

于 2010-01-21T08:10:12.707 回答
1

Background vs Foreground detection is very subjective. The application scenario defines background or foreground. However in the application you detail, I guess you are implicitly saying that the person is the foreground. Using the above assumption, what you seek is a person detection algorithm. A possible solution is:

  1. Run a haar feature detector+ boosted cascade of weak classifiers (see the opencv wiki for details)
  2. Compute inter-frame motion (differences)
  3. If there is a +ve face detection for a frame, cluster motion pixels around the face (kNN algorithm)

voila... you should have a simple person detector.

于 2010-10-30T12:04:09.310 回答
-3

将照片张贴在 Craigslist 上并告诉他们您将支付 5 美元请人这样做。

保证你会在几分钟内获得点击率。

于 2010-01-21T01:22:39.697 回答
-3

您可以逐个像素地遍历两个图像,而不是直接减法,并且只“减去”完全相同的像素。不过,这当然不会考虑颜色的微小差异。

于 2010-01-21T01:28:00.500 回答