直方图的反向投影是利用直方图模型计算给定图像像素点的特征。反向投影在某一位置的值是源图像在对应位置的像素值的累计。反向投影操作可实现检测输入源图像给定图像块的最匹配区域,一般可用于基于图像内容的检索或查找特定的内容。对于原始灰度图像f(x,y),计算相应的灰度直方图时,可利用直方图变换bin来计算相应的反向投影。bin越大,反向投影显示的结果就越大。
对于灰度图像矩阵:
求其灰度直方图时,bins指定区间:[0,2],[3,5],[6,7],[8,10)。求解得到直方图hist=4,4,6,2
根据直方图反向投影原理可得:
back_Projection =
opencv提供了一个简单计算hue通道的直方图反向投影的函数calcBackProject,下面将对其接口函数定义进行解释。
void calcBackProject(const Mat* image,int nimages,const int* channels,InputArray hist,OutputArray backProject,const float** ranges,double scale=1,bool uniform =true)
其中参数Images表示输入图像源指针,图像源必须是同样的深度信息;参数nimages表示图像源待计算个数;参数channels表示需要统计的图像的通道维数数组索引,参数hist表示输入源图像的直方图;参数backProject表示目标图像的反向投影图,参数ranges用于指出直方图每一维的上下界,参数Scale表示可选的输出反向投影的尺寸因素;参数uniform表示直方图统一显示标志。
PS:补充mixChannels函数
void mixChannels(const Mat*src,size_t nsrcs,Mat* dst,size_t ndsts,const int* fromTo,size_t npairs)
该函数是实现输入通道复制到特定输出通道
其中,参数src表示输入图像源组,被复制通道的输入图像数据;参数nsrc表示待输入图像源中图像的个数;参数dst表示输出目标图像数组,参数ndst表示目标数组中图像总数;参数fromTo表示通道索引对的数组,偶数代表输入矩阵,奇数代表输出矩阵;参数npairs表示fromTo的索引对。