OpenCV 反向投影
1.什么是反向投影
在OpenCV的中文文档上反向投影的描述是这样的:
- 反向投影是一种记录给定图像中的像素点如何适应直方图模型的像素分布的方式。
- 简单的讲, 所谓反向投影就是首先计算某一特征的直方图模型,然后使用模型去寻找图像中存在的该特征。
- 例如, 你有一个肤色直方图 ( Hue-Saturation 直方图 ),你可以用它来寻找图像中的肤色区域
2.反向投影的步骤
从上面文档的描述中可以看到,反向投影的步骤三步:
1.获取目标图像区域的直方图模型
2.将新图像中的每一个像素点与直方图进行比较,获得该像素点的颜色在直方图中的概率。
3.将结果储存到新的图像中
我们用一个灰度图的例子来解释:
0|1|2 |3
4|5|6|7
8|9|10|11
8|9|14|16
对图像进行直方图统计(bin指定的区间为[0,3),[4,7),[8,11),[12,16))如下所示:
Histogram=
4 4 6 2
也就是说在[0,3)这个区间的像素值有4个,其它含义相同
根据上述的直方图进行反向投影,得到反向投影图像像素值如下:
Back_Projection=
4 4 4 4
4 4 4 4
6 6 6 6
6 6 2 2
过程可以描述为:
目标图像—>直方图—>反向投影图像
比如我们选取一张手的图像为目标图像
根据这个图像我们得到了直方图如下
然后判断图像中每个像素点,生成反向投影图像:
使用统计学的语言, _BackProjection_ 中储存的数值代表了测试图像中该像素属于皮肤区域的 概率 。比如以上图为例, 亮起的区域是皮肤区域的概率更大(事实确实如此),而更暗的区域则表示更低的概率