反向投影图

在Camshift算法应用跟踪中原理是应用根据目标颜色特征与背景颜色特征差异大,形成跟踪。所以我们需要统计目标颜色特征,以及背景颜色特征,利用颜色直方图统计颜色特征,再通过反向投影图得到颜色概率分布图。我们在实验中会看到反向投影图是一个灰度图,当目标的颜色与背景不一样时候,跟踪效果最好(目标是白色,背景是黑色)。其中在Cvinrange函数中Vmax,vmin,smin中作用就是调整数值,使目标颜色特征与背景特征不一样,不同情况,值是不一样。当你设置的数值比较合适时候,跟踪效果特别好

图像的反向投影图是用输入图像的某一位置上像素值(多维或灰度)对应在直方图的一个bin上的值来代替该像素值,所以得到的反向投影图是单通的。用统计学术语,输出图像象素点的值是观测数组在某个分布(直方图)下的概率。

反向投影图 - 十三月de天空 - 十三月de天空
 
其中 b(xi) 表示在位置 xi 上像素对应的直方图第 b(xi) bin ,直方图共 m bin ,qu表示第ubin的值。

还是以例子说明
(1)例如灰度图像如下

Image=

  0    1    2    3

  4    5    6    7

  8    9   10   11

  8    9   14   15

(2)该灰度图的直方图为(bin指定的区间为[0,3)[4,7)[8,11)[12,16)

Histogram=

  4    4    6    2

(3)反向投影图

Back_Projection=

  4    4    4    4

  4    4    4    4

  6    6    6    6

  6    6    2    2

例如位置(0,0)上的像素值为0,对应的bin[0,3),所以反向直方图在该位置上的值这个bin的值4

1.反向投影的作用是什么?
    反向投影用于在输入图像(通常较大)中查找特定图像(通常较小或者仅1个像素,以下将其称为模板图像)最匹配的点或者区域,也就是定位模板图像出现在输入图像的位置。
2.反向投影如何查找(工作)?
    查找的方式就是不断的在输入图像中切割跟模板图像大小一致的图像块,并用直方图对比的方式与模板图像进行比较。

假设我们有一张100x100的输入图像,有一张10x10的模板图像,查找的过程是这样的:
(1)从输入图像的左上角(0,0)开始,切割一块(0,0)至(10,10)的临时图像;
(2)生成临时图像的直方图;
(3)用临时图像的直方图和模板图像的直方图对比,对比结果记为c;
(4)直方图对比结果c,就是结果图像(0,0)处的像素值;
(5)切割输入图像从(0,1)至(10,11)的临时图像,对比直方图,并记录到结果图像;
(6)重复(1)~(5)步直到输入图像的右下角。

 

3.反向投影的结果是什么?
    反向投影的结果包含了:以每个输入图像像素点为起点的直方图对比结果。 可以 把它看成是一个二维的浮点型数组,二维矩阵,或者单通道的浮点型图像。
4.特殊情况怎么样?
    如果输入图像和模板图像一样大,那么反向投影相当于直方图对比。如果输入图像比模板图像还小,直接罢工~~。

原理:反向投影是一种记录给定图像中的像素点如何适应直方图模型像素分布的方式。

所谓反向投影就是首先计算某一特征的直方图模型,然后使用模型去寻找图像中存在的该特征。

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

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

  1. 对测试图像中的每个像素 ( p(i,j) ),获取色调数据并找到该色调(( h_{i,j}, s_{i,j} ) )在直方图中的bin的位置。

  2. 查询 模型直方图 中对应的bin - ( h_{i,j}, s_{i,j} ) - 并读取该bin的数值。

  3. 将此数值储存在新的图像中(BackProjection)。 你也可以先归一化 模型直方图 ,这样测试图像的输出就可以在屏幕显示了。

  4. 通过对测试图像中的每个像素采用以上步骤, 我们得到了下面的 BackProjection 结果图:

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


你可能感兴趣的:(opencv,程序)