【图像处理】C++实现模板匹配


//
	//预先判断——3*3十字中心——区域是否相似,如果相似,则再匹配判断。这样可以减少判断次数。
	//前提:模板大于9*9
	BOOL Judgement(BYTE *pTempDataBuf, BYTE *pTemplateBuf, int nTemplateHeight, int nTemplateWidth); //预先判断

/*
//模板匹配:
//复制图像上的一块模板大小的区域,与模板进行匹配,返回目标物的类型的数据;(点,则返回ShapePoint)
//参数:BYTE *pTempDataBuf —— 从图像上复制模板大小的块
		BYTE *pTemplateBuf —— 模板数据
		int nTempHeight    —— 模板高
		int nTempWidth     —— 模板宽

		int LeftDev —— 模板中边界与目标点的左偏量
		int RightDev—— 模板中边界与目标点的右偏量
*/
	//用来判断是否匹配成功
	BOOL TemplateMatch_SSD(BYTE *pTempDataBuf, BYTE *pTemplateBuf, int nTemplateHeight, int nTemplateWidth);//像素差平方和匹配
	BOOL TemplateMatch_CC(BYTE *pTempDataBuf, BYTE *pTemplateBuf, int nTemplateHeight, int nTemplateWidth);//互相关匹配
	BOOL TemplateMatch_NCC(BYTE *pTempDataBuf, BYTE *pTemplateBuf, int nTemplateHeight, int nTemplateWidth);//归一化互相关匹配


//像素差平方和匹配
BOOL CTemplateMatching::TemplateMatch_SSD(BYTE *pTempDataBuf, BYTE *pTemplateBuf, int nTemplateHeight, int nTemplateWidth)
{
	int m,n;
	double dSSD = 0;//差平方和
	
    unsigned char tempDatapixel;//像素值
    unsigned char templatepixel;
	
	for (m=0; m 0.85)   //相似性测度的临界值
		return 1;
	else
		return 0;
}

//归一化互相关匹配
BOOL CTemplateMatching::TemplateMatch_NCC(BYTE *pTempDataBuf, BYTE *pTemplateBuf, int nTemplateHeight, int nTemplateWidth)
{
	int m,n;
	double dSumST = 0;//中间结果——(Sxy - S')*(Txy - T')之和
    double dSumS = 0; //中间结果——(Sxy - S')平方和
    double dSumT = 0; //中间结果——(Txy - T')平方和

	double dSPixelSum = 0;
	double dTPixelSum = 0;

	double dNCC = 0;//归一化相似测度
	
    unsigned char tempDatapixel;//像素值
    unsigned char templatepixel;

	unsigned char AveraryDatapixel; //pTempDataBuf平均值
	unsigned char AveraryTemplatepixel;//pTemplateBuf平均值

	for (m=0; m 0.85)   //相似性测度的临界值
		return 1;
	else
		return 0;
}

//
/*
//预先判断——3*3十字中心——区域是否相似,如果相似,则再匹配判断。这样可以减少判断次数。
//前提:模板大于9*9
*/
BOOL CTemplateMatching::Judgement(BYTE *pTempDataBuf, BYTE *pTemplateBuf, int nTemplateHeight, int nTemplateWidth)
{
	int m,n;
	double dSum = 0;

	int H = 0;//宽高都分成四份,一份的高度
	int W = 0;//一份的宽度
	
	H = nTemplateHeight/4;
	W = nTemplateWidth/4;

	//第一个3*3(上)
	for (m=H-1;m= (5-1)*9)   //全部个数3*3*5
		return 1;
	else
		return 0;
}


你可能感兴趣的:(编程语言,图像处理)