第一:反向投影
反向投影(back projection)是一种记录像素点(为cvCalcBackProjection)或像素块(为cvCalcBackProjecitPatch)如何适应直方图模型中分布的方式。
函数原型:void cvCalcBackProject(IplImage** image, CvArr* back_project, const CvHistogram* hist);
image:与输入图像的大小一样,而且也是单通道,8位或浮点图像。
back_project:设置为hist中的相关bin的值。如果直方图是归一化的,此值便与一个条件概率值相关(即图像中像素点为直方图hist所表征的某种成员的概率)。
第二:基于块的反向投影
我们可以用函数cvCalcBackProject计算一个像素是否是一个已知目标的一部分,也可以用函数cvCalcBackProjectPatch计算一块区域是否包含已知的目标。函数cvCalcBackProjectPatch在整个输入图像使用一个滑动窗口。在输入图像矩阵的每一个位置,块中所有的像素点都被设置为在目标图像中对应的块中心位置的像素点。这一点非常重要,因为图像的许多特性(如纹理)在单一的像素级别上无法确定,但可以从一组像素确定。cvCalcBackProjectPatch有两种用法:但采样窗口小于目标时,作为一个区域检测器,当采样窗口和目标一般大时,作为目标检测器。
函数原型:void cvCalcBackProjectPatch(IplImage** images, CvArr* dst, CvSize patch_size, CvHistogram* hist, int method, float factor);
images:源图像
dst:目标图像,单通道浮点型图像。
patch_size:目标大小为:images[0][0].width-patch_size.x+1,images[0][0].height-patch_size.y+1。
factor:归一化水平
代码:
#include <cv.h>
#include <highgui.h>
#include <iostream>
#include <opencv2/legacy/legacy.hpp>
using namespace cv;
using nam