读《人脸自动机器识别》

以下是《人脸自动机器识别》(2009年1月出版,段锦著)第40、41页的内容

4.1.1 RGB颜色模型

  RGB模型是人们最常用的颜色模型。国际照明委员会(CIE)选择红色(波长700.0nm)、绿色(波长546.1nm)、蓝色(波长435.8nm)三种单色光作为表色系统的三基色,这就是RGB色系坐标系。一般摄像系统都采用RGB坐标系,图像的颜色一般也用此色系坐标表示。通过以RGB坐标系为基础描述其他色系坐标系,将其他色系坐标系的基色描述为RGB三色的线性或者非线性函数。在RGB模型中,人表现出来的颜色受光照的影响,但对同一点,在不同亮度下的相应值是成比例的。也就是说,同一点在不同光照条件下具有相同的色彩,只是亮度不同而已。RGB颜色空间可以直接通过线性变化,转化为灰度图像

  Gray = 0.299 × R + 0.587 × G + 0.114 * B

4.1.2 YIQ模型

  YIQ是NTSC制的颜色空间,其中亮度信息包含在Y中,而色度信息(包括色彩和纯度)则结合在I和Q中。IQ平面垂直于Y轴,I包含橙—表色彩信息,提供鲜艳色调的明暗度,Q给出绿—品红色彩信息。

  Wang和Brandstein对YIQ空间中人脸肤色的分布作为分析,得到如下结论:

  如果选择一个比较合理的IQ平面,则人脸颜色的投影可以被限制在一个较小的范围内。下图是人脸颜色在IQ平面的颜色分布,其中,浅色区域表示人脸,深色区域表示背景。

  图片
  YIQ颜色模型和RGB模型之间模型之间可以进行线性转换,其转换公式为

图片

摘自《人脸自动机器识别》 科学出版社 段锦

经过MFC代码测试,上图“人脸的IQ颜色分布”有误,测试代码如下:
 CClientDC dc(this);
 int count = 0;
 for(int r = 0; r < 256; r++)
 {
  for(int g = 0; g < 256; g++)
  {
   for(int b = 0; b < 256; b++)
   {
    int I = 0.596 * r + -0.275 * g + -0.321 * b;
    int Q = 0.212 * r + -0.528 * g + 0.311 * b;
    if(I > 60 && I < 85 && Q > 15 && Q < 38)//这个范围大于上图中的人脸颜色范围
                    //这种情况下尚且不对,何况图中的范围
    {
     dc.SetPixel(count % 550, count / 550, RGB(r, g, b));
     count++;
    }
   }
  }
 }
测试结果显示,以红色比较多,没有其他颜色,显然上图中的结论是错误的,不知道是Wang和Brandstein研究错了,还是《人脸自动机器识别》作者弄错了,又或者是我的代码有问题。

测试结果如下

图片

原文地址:https://www.cnblogs.com/yjh4866/p/6253906.html