(一)反向投影的原理说明(1)

目标:

 

 一、概念:

反向投影是一种记录给定图像中的像素点如何适应直方图模型像素分布的方式。简单的讲,就是首先计算某一特征的直方图模型,然后使用模型去寻找图像中存在的该特征。例如,你有一个肤色直方图(Hue-Saturation直方图),你可以用它来寻找图像中的肤色区域

1、直方图反向投影矩阵的计算方法:

  1. 什么是反向投影?它可以实现什么功能?
  2. 如何使用OpenCV函数calcBackProject计算反向投影?
  3. 如何使用OpenCV函数mixChannels组合图像的不同通道?

设有原灰度图像矩阵:

Image=

     1 2 3 4

                 5 6 7 7

                 9 8 0 1

                 5 6 7 6

           将灰度值划分为如下四个区间:

                  [0,2] [3,5] [6,7] [8,10]

           很容易得到这个图像矩阵的直方图 hist=4 4 6 2

          下来,计算反向投影矩阵(反向投影矩阵的大小和原灰度图像矩阵的大小相同):

          原图相中坐标为(0,0)的灰度值为1,1位于区间[0,2]中,区间[0,2]对应的直方图值为4,所以反向投影矩阵中坐标为(0,0)的值记为4。按照这个方法,依次映射,即可得到image的直方图方向投影矩阵为:

back_Projection=

                4 4 4 4

                4 6 6 6

                2 2 4 4

                4 6 6 6

2、直方图的反向投影到底代表了什么?

     实际上是将图像的256个灰度值置为很少的几个值了,具体有几个值,要看把0~255划分为多少个区间!反向投影中某点的值就是它对应的原图像中的点所在区间的灰度直方图值。所以,一个区间点越多,在反向投影矩阵中就越亮。

        反向投影中的“反向”指的是从直方图值到反向投影矩阵映射的过程。

      通过反向投影,原始的图像被简化了,而这个简化的过程实际上就是提取出图像的某个特征。所以我们就可以用这个特征来对比两幅图,如果两幅图的反向投影矩阵相似或相同,那么我们就可以判定这两幅图这个特征是相同的。

  • OpenCV的compareHist函数用来计算两个直方图的相似程度,此函数的返回值就是d(H1,H2)。
    • 函数实现步骤:
      • 先用cvtColor()把图像从RGB色彩空间转换到HSV色彩空间;
      • 计算图像的直方图,然后归一化到[0~1]之间,用到函数calcHist()和normalize();
      • 使用下列4种对比标准来计算图像直方图的相似度:
        • a.相关系数的标准,Correlation(method=CV_COMP_CORREL)值越大,相关度越高,最大值为1,最小值为0;

(一)反向投影的原理说明(1)_第1张图片

且N等于直方图中bin的个数。

b.卡方系数的标准(method=CV_COMP_CHISQR)值越小,相关度越高,最大值无上界,最小值0;

c.相交系数的标准(method=CV_COMP_INTERSECT)值越大,相关度越高,最大值为9.455319,最小值为0;

d.巴氏系数(Bhattacharyya)的标准(method=CV_COMP_BHATTACHARYYA)值越小,相关度越高,最大值为1,最小值为0

  • 二、工作原理

使用肤色直方图为例来解释反向投影的工作原理:

假设你已经通过下图得到一个肤色直方图(Hue-Saturation),旁边的直方图就是模型直方图(代表手掌的皮肤色调)。你可以通过掩码操作来抓取手掌所在区域的直方图;

(一)反向投影的原理说明(1)_第2张图片

下图是另一张手掌图(测试图像)以及对应的整张图像的直方图:

(一)反向投影的原理说明(1)_第3张图片

我们要做的就是使用模型直方图(代表手掌的皮肤色调)来检测测试图像中的皮肤区域。以下是步骤:

  1. 对测试图像中的每个像素(p(i,j)),获取色调数据并找到该色调(hi,j,si,j)在直方图中的bin的位置;
  2. 查询模型直方图中对应的bin-(hi,j,si,j)并读取该bin的数值;
  3. 将此数值存储在新的图像中(BackProjection)。你也可以先归一化模型直方图,这样测试图像的输出就可以在屏幕显示了;
  4. 通过对测试图像中的每个像素采用以上步骤,我们得到了下面的BackProjection结果图:

    (一)反向投影的原理说明(1)_第4张图片

    使用统计学的语言,BackProjection中存储的数值代表了测试图像中该像素属于皮肤区域的概率。比如上图为例,亮起的区域是皮肤区域的概率更大,而更暗的区域则表示更低的概率(注意手掌内部和边缘的阴影影响了检测的精度)。

 

你可能感兴趣的:(图像处理,OpenCV)