1

我有使用链接检测到的手的图像。它使用 HSV 颜色空间进行手部检测。

现在我面临一个问题:我需要尽可能地获得封闭区域/绘制边界线以确定手部区域,然后填充封闭区域并从原始区域中减去它以移除手部。

到目前为止,我一直试图模糊图像以减少噪音、扩大图像、关闭孔等,这似乎是过量的。我已经尝试过轮廓,这似乎是迄今为止最好的方法。我试图获得凸包(最大),在使用不同的阈值进行测试后,我得到了以下结果。

在此处输入图像描述

如果船体拉直,可以用拇指看到不准确之处。它必须是弯曲的。我试图找出手的位置,以便确定手所覆盖的区域。将减去它以从原始图像中移除手。这就是我想要达到的目标。

有更好的方法吗?

和想法建议非常感谢。

原始和检测如下

在此处输入图像描述

4

2 回答 2

1

假设您想要识别手区域而不是凸包给出的区域并且应用程序的背景至少是相同的颜色,如果可能的话,我会应用 hsv-threshold 来识别背景而不是手。或者,如果光分布不一致,则可能是自适应阈值。我相信这是许多应用程序所做的

如果背景不能固定,分割不是一个容易解决的问题,因为你应该注意阴影和手掌线。

于 2012-10-07T21:38:51.507 回答
1

考虑使用alpha hull而不是凸包,它可以通过允许凹面更好地遵循形状的轮廓。

这个网站对 alpha 形状有一个很好的总结:François Bélair 的“你一直想知道的关于 Alpha 形状但害怕问的一切”。

http://cgm.cs.mcgill.ca/~godfried/teaching/projects97/belair/alpha.html

正如 David 在他的帖子中提到的,考虑使用 HSV(或 HSI)颜色空间而不是 RGB 或灰度进行阈值处理。如果您可以允许更长的处理时间,您可以使用诸如 Mean Shift 之类的算法来分割像您这样复杂的图像。OpenCV 有一个 Mean Shift 的实现,Learning OpenCV一书提供了该算法的简明描述。

使用 Mean Shift 进行图像分割解释

无论如何,标准的二值化阈值似乎没有多大帮助。考虑使用动态阈值;据我回忆,OpenCV 中的轮廓至少实现了局部/动态阈值。

于 2012-10-08T03:44:04.667 回答