反向投影

原理说明:


以下为程序测试说明其工作原理: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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值