在使用 OpenCV 进行面部识别的网络上的许多示例中,我看到图像被转换为灰度,作为面部识别功能的“预处理”的一部分。如果将彩色图像用于面部识别会发生什么?为什么所有示例都先将图像转为灰度?
2 回答
许多图像处理和 CV 算法使用灰度图像而不是彩色图像作为输入。一个重要原因是因为通过转换为灰度,它将亮度平面与色度平面分开。亮度对于区分图像中的视觉特征也更重要。例如,如果您想根据亮度和色度查找边缘,则需要额外的工作。颜色也不能真正帮助我们识别图像的重要特征或特征,尽管可能有例外。
灰度图像只有一个颜色通道,而彩色图像(RGB、HSV)中只有三个颜色通道。灰度图像的固有复杂性低于彩色图像,因为您可以在没有颜色的情况下获得与亮度、对比度、边缘、形状、轮廓、纹理和透视相关的特征。
灰度处理也快得多。如果我们假设处理三通道彩色图像的时间是处理灰度图像的三倍,那么我们可以通过消除不需要的颜色通道来节省处理时间。从本质上讲,颜色会增加模型的复杂性,并且通常会减慢处理速度。
大多数面部识别算法依赖于图像中的一般强度分布,而不是每个通道的颜色强度信息。
灰度图像准确地提供了有关图像中强度的一般分布的信息(高强度区域显示为白色/低强度区域显示为黑色)。计算灰度图像很简单,需要很少的计算时间,你可以通过平均所有 3 个通道的值来计算这个强度。
在 RGB 图像中,此信息被划分为所有 3 个通道。以亮黄色为例:
RGB (255,217,0)
虽然这显然是一种高强度颜色,但我们通过组合所有通道来获得此信息,这正是灰度图像所做的。当然,您可以改为使用每个通道进行特征计算并将结果连接起来以使用该图像的所有强度信息,但它会产生与使用灰度版本基本相同的结果,但需要 3 倍的计算时间。