opencv图像处理学习(十九)——直方图的反向投影

直方图的反向投影是利用直方图模型计算给定图像像素点的特征。反向投影在某一位置的值是源图像在对应位置的像素值的累计。反向投影操作可实现检测输入源图像给定图像块的最匹配区域,一般可用于基于图像内容的检索或查找特定的内容。对于原始灰度图像f(x,y),计算相应的灰度直方图时,可利用直方图变换bin来计算相应的反向投影。bin越大,反向投影显示的结果就越大。

对于灰度图像矩阵:

Imgae = \begin{bmatrix} 1 & 2 & 3 &4 \\ 5&6 &7 &7 \\ 9& 8 & 0 &1 \\ 5& 6 &7 &6 \end{bmatrix}

求其灰度直方图时,bins指定区间:[0,2],[3,5],[6,7],[8,10)。求解得到直方图hist=4,4,6,2

根据直方图反向投影原理可得:

back_Projection = \begin{bmatrix} 4& 4 & 4 &4 \\ 4& 4 & 4 &4 \\ 6& 6 & 6 &6 \\ 6& 6 & 2 & 2 \end{bmatrix}

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的索引对。

猜你喜欢

转载自blog.csdn.net/qq_35789421/article/details/88928665