反向投影 calcBackProject

    图像的 反向投影图是用输入图像的某一位置上像素值(多维或灰度) 对应在直方图的一个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。


测试代码如下:

#include <iostream>

using namespace std;

#include <iomanip>

#include <highgui.h>

#include <cv.h>

int main()

{

uchar data[]={0,1,2,3,4,5,6,7,8,9,10,11,8,9,14,15};//图像数据

CvMat mat=cvMat(4,4,CV_8UC1,data);

IplImage g_img; //灰度图

cvGetImage(&mat,&g_img);

//打印图像数据

cout<<"Image="<<endl;

for(int i=0;i<g_img.height;i++)

{

uchar* ptr=(uchar*)(g_img.imageData+i*g_img.widthStep);

for(int j=0;j<g_img.width;j++)

{

cout<<setw(3)<<setprecision(2)<<(int)ptr[j]<<"";

}

cout<<endl;

}

//计算图像直方图

IplImage* imgs[]={&g_img};

int g_bin=4;

int size[]={g_bin};

float g_ranges[]={0,4,8,12,16};

float* ranges[]={g_ranges};

CvHistogram* hist=cvCreateHist(1,size,CV_HIST_ARRAY,ranges,0);

cvCalcHist(imgs,hist);

//打印图像直方图数据

cout<<"Histogram="<<endl;

for(int i=0;i<g_bin;i++)

{

cout<<setw(3)<<setprecision(2)<<*cvGetHistValue_1D(hist,i)<<"";

}

cout<<endl;

//计算反向投影图

IplImage* back_project=cvCreateImage(cvGetSize(&g_img),g_img.depth,1);

cvCalcBackProject(imgs,back_project,hist);

//打印反向投影图数据

cout<<"Back_Projection="<<endl;

for(int i=0;i<back_project->height;i++)

{

uchar* ptr=(uchar*)(back_project->imageData+i*back_project->widthStep);

for(int j=0;j<back_project->width;j++)

{

cout<<setw(3)<<setprecision(2)<<(int)ptr[j]<<"";

}

cout<<endl;

}

}

参考这篇:

CamShitf算法,即Continuously Apative Mean-Shift算法,基本思想就是对视频图像的多帧进行MeanShift运算,将上一帧结果作为下一帧的初始值,迭代下去。基本步骤为:

1.选取关键区域

2.计算该区域的颜色概率分布--反向投影图

3.用MeanShift算法找到下一帧的特征区域

4.标记并重复上述步骤

该算法的关键就是可以在目标大小发生改变的时候,可以自适应的调整目标区域继续跟踪

在进行CamShitf和MeanShift算法的时候,需要输入反向投影图,这就要求有个很重要的预处理过程是计算反向投影图。对应的函数为calcBackProject。所谓反向投影图就是一个概率密度图。calcBackProject的输入通常为目标区域的直方图和待跟踪图像的直方图,输出与待跟踪图像大小相同,每一个像素点表示该点为目标区域的概率。这个点越亮,该点属于物体的概率越大。这样的输入参数太适合做MeanS算法了。

转自http://blog.csdn.net/yang_xian521/article/details/6915608

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值