我有使用this链接检测到的手形图像。它的手检测使用HSV色彩空间。
现在我遇到了一个问题:我需要让封闭区域/绘制边界线足以确定手部区域,然后填充封闭区域并从原始区域中减去它以移除手部。
到目前为止,我一直试图模糊图像,以减少噪音,扩大图像,关闭洞等似乎过量的图像。我尝试过轮廓,这似乎是目前为止最好的方法。我试图获得凸包(最大),并在测试不同阈值后得到以下结果。
在船体伸直时,拇指可以看到不准确的情况。它必须是弯曲的。我试图找出手的位置,以便识别手被覆盖的区域。要减去它以从原始图像中移除手。这就是我想要实现的目标。
有更好的方法吗?
非常感谢观点建议。
原始和检测如下
答案 0 :(得分:1)
假设您想要识别手部区域而不是凸包给出的区域,并且应用程序的背景至少是相同的颜色,我会应用hsv-threshold来识别背景而不是手,如果可能的话。或者如果光分布不一致,则可能是自适应阈值。我相信这是许多应用程序所做的事情
如果背景无法修复,分割不是一个容易解决的问题,因为你应该照顾阴影和手掌线。
答案 1 :(得分:1)
考虑使用 alpha船体而不是凸包,可以通过允许凹陷更好地遵循形状的轮廓。
这个网站有一个很好的阿尔法形状总结:“你总是想知道关于阿尔法形状的所有东西,但我不敢问”弗朗索瓦·贝莱尔。
http://cgm.cs.mcgill.ca/~godfried/teaching/projects97/belair/alpha.html
正如David在帖子中提到的,考虑使用HSV(或HSI)色彩空间而不是RGB或灰度级进行阈值处理。如果您可以允许更长的处理时间,则可以使用诸如Mean Shift之类的算法来分割像您这样的棘手图像。 OpenCV实现了Mean Shift,书 Learning OpenCV 提供了算法的简明描述。
Image Segmentation using Mean Shift explained
在任何情况下,标准二值化阈值似乎都没有多大帮助。考虑使用动态阈值;至少从我记得的OpenCV轮廓中实现了局部/动态阈值。