Open CV反向投影
CalcBackProject
计算反向投影 void cvCalcBackProject( IplImage** image, CvArr*
back_project, const CvHistogram* hist
);
image
输入图像 (也可以传递 CvMat** ).
back_project
反向投影图像,与输入图像具有同样类型.
hist 直方图
函数 cvCalcBackProject 直方图的反向投影.
对于所有输入的单通道图像同一位置的象素数组,该函数根据相应的象素数组(RGB),放置其对应的直方块的值到输出图像中。用统计学术语,输出图像象素点的值是观测数组在某个分布(直方图)下的的概率。
例如,为了发现图像中的红色目标,可以这么做:
对红色物体计算色调直方图,假设图像仅仅包含该物体。则直方图有可能有极值,对应着红颜色。
对将要搜索目标的输入图像,使用直方图计算其色调平面的反向投影,然后对图像做阈值操作。
在产生的图像中发现连通部分,然后使用某种附加准则选择正确的部分,比如最大的连同部分。
这是 Camshift 彩色目标跟踪器中的一个逼进算法,除了第三步,CAMSHIFT
算法使用了上一次目标位置来定位反向投影中的目标。
CalcBackProjectPatch
用直方图比较来定位图像中的模板 void cvCalcBackProjectPatch( IplImage** image,
CvArr* dst, CvSize patch_size, CvHistogram* hist, int method, float
factor );
image
输入图像 (可以传递 CvMat** )
dst
输出图像.
patch_size
扫描输入图像的补丁尺寸
hist 直方图 method
比较方法,传递给 cvCompareHist (见该函数的描述).
factor
直方图的归一化因子,将影响输出图像的归一化缩放。如果为 1,则不定。
函数 cvCalcBackProjectPatch 通过输入图像补丁的直方图和给定直方图的比较,来计算反向投影。提取图像在 ROI
中每一个位置的某种测量结果产生了数组 image. 这些结果可以是色调, x 差分, y 差分, Laplacian 滤波器, 有方向
Gabor 滤波器等中 的一个或多个。每种测量输出都被划归为它自己的单独图像。 image
图像数组是这些测量图像的集合。一个多维直方图 hist 从这些图像数组中被采样创建。最后直方图被归一化。直方图 hist
的维数通常很大等于图像数组 image 的元素个数。 在选择的 ROI
中,每一个新的图像被测量并且转换为一个图像数组。在以锚点为"补丁"中心的图像 image 区域中计算直方图
(如下图所示)。用参数norm_factor 来归一化直方图,使得它可以与 hist
互相比较。计算出的直方图与直方图模型互相比较,(hist 使用函数 cvCompareHist ,比较方法是
method=method). 输出结果被放置到概率图像 dst 补丁锚点的对应位置上。这个过程随着补丁滑过整个 ROI
而重复进行。迭代直方图的更新可以通过在原直方图中减除"补丁"已覆盖的尾象素点或者加上新覆盖的象素点来实现,这种更新方式可以节省大量的操作,尽管目前在函数体中还没有实现。 Back
Project Calculation by Patches

CalcProbDensity
两个直方图相除 void cvCalcProbDensity( const CvHistogram* hist1, const
CvHistogram* hist2, CvHistogram* dst_hist, double scale=255
);
hist1
第一个直方图(分子).
hist2
第二个直方图
dst_hist
输出的直方图
scale
输出直方图的尺度因子
函数 cvCalcProbDensity 从两个直方图中计算目标概率密度: dist_hist(I)=0 if
hist1(I)==0 scale if hist1(I)!=0 &&
hist2(I)>hist1(I) hist2(I)*scale/hist1(I) if
hist1(I)!=0 &&
hist2(I)<=hist1(I)
所以输出的直方块小于尺度因子。

浙公网安备 33010602011771号