我正在使用 C# 进行手势识别。我正在使用 OPENCV 进行皮肤检测,但它的性能不是最佳的。所以我决定做一些基于色彩空间的过滤,但不知道什么色彩空间最适合这个目的?
用于手部检测的最佳色彩空间是什么:RGB、HSV 或 YCrCb?
信息处理
图像处理
opencv
颜色
检测
C#
2022-01-05 09:05:12
2个回答
直观地说,HSV 是轻松定义肤色色调的地方。
然而,在这方面有广泛的工作,甚至还有关于皮肤检测的最佳色彩空间的文章。
然而,您应该看看OPTIMUM COLOR SPACES FOR SKIN DETECTION(IEEE 的替代方案 - Optimum color spaces for skin detection)。
根据他们的说法,只要您创建 Optimal Detector,性能就没有区别。
这实际上是有道理的,因为文章中的所有颜色空间都是一对一的函数,这意味着这里真正的事情是开发正确的分类器。
如果您手动将足够多的像素分类为皮肤/非皮肤,您会在颜色空间中获得一个点云,告诉您这些像素的统计分布。
通常,自动分类相当于定义一个清晰的边界,在该边界内像素被视为皮肤。标准色彩空间是 3D 的,并且是通过非线性变换相互映射的。在所有空间中,您基本上都会获得或多或少紧凑的“土豆形状”。
如果您将分类器基于经验/简单函数(例如球体),则需要找到形状最球形的空间。否则,如果您使用通用分类器,它将自行学习云的形状。
无论如何,我最好的建议是对亮度进行标准化,因为皮肤的表观亮度取决于环境光的数量,这是一个不受控制的参数。然后你减少到二维信息,比如 HS。
非常深或非常浅的皮肤一直存在问题,并且将继续存在问题,因为它们传达的颜色信息很少并且没有区别。