⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gradient_sum.cpp

📁 人头跟踪算法
💻 CPP
字号:
//////////////////////////////////////////////////////////////////////// gradient_sum.cpp// // Searches for the head in a neighborhood.//////////////////////////////////////////////////////////////////////#include "stdafx.h"	// TRACE(), AfxMessageBox(), max(), min()#include <stdio.h>#include <assert.h>#include <math.h>	// fabs()#include "base.h" // ISIZE[XY]#include "outline.h"//////////////////////////////////////////////////////////////////////// perimGradMagnitude// // Sums the gradient magnitude along the perimeter of an outline.static int perimGradMagnitude(OUTLINE *outline, 							  unsigned char *grad, 							  int x_cen, int y_cen){	int x, y;	short *ptr;	unsigned char *ptrgrad;	int sum;	int i;	int incx, incy;	ptr = outline->perim;	x = x_cen;	y = y_cen;	ptrgrad = grad + (ISIZEX * y_cen) + x_cen;	sum = 0;	for (i = 0 ; i < outline->perim_length ; i++)  {		incx = *ptr++;		incy = *ptr++;		ptrgrad += (ISIZEX * incy) + incx;		assert(ptrgrad >= grad 			   && ptrgrad < (grad + ISIZEX*ISIZEY*sizeof(char)));		sum += *ptrgrad;	}		return(sum);}int NormalizedSumOfGradientMagnitude(int x, int y, OUTLINE *outline, //int sz, 									 unsigned char *grad){	int perim, score;	perim = outline->perim_length;	score = perimGradMagnitude(outline, grad, x, y);	score /= perim;	return score;}//////////////////////////////////////////////////////////////////////// perimGradDotProduct// // Sums the gradient magnitude along the perimeter of an outline.static int perimGradDotProduct(OUTLINE *outline, 							   float *gradx, float *grady,							   int x_cen, int y_cen){	int x, y;	short *ptr;	float *ptrn;	float *ptrgradx, *ptrgrady;	float sum;	float nx, ny;	int i;	int incx, incy;	ptr = outline->perim;	ptrn = outline->normals;	x = x_cen;	y = y_cen;	ptrgradx = gradx + (ISIZEX * y_cen) + x_cen;	ptrgrady = grady + (ISIZEX * y_cen) + x_cen;	sum = 0.0f;	for (i = 0 ; i < outline->perim_length ; i++)  {		incx = *ptr++;		incy = *ptr++;		ptrgradx += (ISIZEX * incy) + incx;		ptrgrady += (ISIZEX * incy) + incx;		assert(ptrgradx >= gradx 			   && ptrgradx < (gradx + ISIZEX*ISIZEY*sizeof(float)));		assert(ptrgrady >= grady 			   && ptrgrady < (grady + ISIZEX*ISIZEY*sizeof(float)));		nx = *ptrn++;		ny = *ptrn++;		sum += fabs((nx * *ptrgradx) + (ny * *ptrgrady));	}		return((int) (100*sum));}int NormalizedSumOfGradientDotProduct(int x, int y, OUTLINE *outline, //int sz, 									  float *gradx, float *grady){	int perim, score;	perim = outline->perim_length;	score = perimGradDotProduct(outline, gradx, grady, x, y);	score /= perim;	return score;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -