反向投影

来源:互联网 发布:数据库物理设计图visio 编辑:程序博客网 时间:2024/05/29 14:39

原理说明:


以下为程序测试说明其工作原理:1.模板图像tempImg,测试图像testImg分别进行直方图统计 2.计算测试图像在模板图像直方图下的反向投影 3.归一化模板图像的直方图,在进行前一步(2)后又有什么结果。 实验结果如下截图:

// back_projection.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "opencv2/opencv.hpp"using namespace std;using namespace cv;int _tmain(int argc, _TCHAR* argv[]){Mat tempImg(3,4,CV_8UC1);tempImg=(Mat_<uchar>(3,4)<<4,11,5,8,6,7,9,10,11,10,9,11);cout<<"tempImg:"<<tempImg<<endl;Mat testImg(5,5,CV_8UC1);testImg=(Mat_<uchar>(5,5)<<0,1,1,1,3,4,10,11,6,10,5,8,9,10,9,7,4,8,11,8,10,8,9,11,10);cout<<"testImg:"<<testImg<<endl;MatND tempHist,testHist,VHist;int dims=1;float range[]={0,12};const float *ranges[]={range};int size=3;int channels=0;calcHist(&tempImg,1,&channels,Mat(),tempHist,1,&size,ranges);cout<<"tempHist:"<<tempHist<<endl;calcHist(&testImg,1,&channels,Mat(),testHist,1,&size,ranges);cout<<"testHist:"<<testHist<<endl;MatND backproj,normalbackpro;calcBackProject(&testImg,1,&channels,tempHist,backproj,ranges,1,true);cout<<"backprojection:"<<backproj<<endl;normalize(tempHist,tempHist,255,0,CV_MINMAX);calcBackProject(&testImg,1,&channels,tempHist,normalbackpro,ranges,1,true);cout<<"normalbackprojection:"<<normalbackpro<<endl;return 0;}




具体实施解析:
1.对tempImg进行直方图统计,bin分为了[0,3],[4,7],[8,11]三个组进行统计。
2.对于testImg里的每一个像素统计其属于哪一个区间内,例如第二行第二个位置处像素为10,查看后发现属于第二组。
3.对于tempImg的直方图来说第二组[4,7]的统计值为4,所以反向投影图中该位置像素为4,按此规律对tempImg中每一位置进行该操作赋值得到反向投影图。

0 0
原创粉丝点击