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

📄 pyramid.c

📁 klt, a tracking algorithm
💻 C
字号:
/********************************************************************* * pyramid.c * *********************************************************************//* Standard includes */#include <assert.h>#include <stdlib.h>		/* malloc() ? */#include <string.h>		/* memset() ? */#include <math.h>		/* *//* Our includes */#include "base.h"#include "error.h"#include "convolve.h"	/* for computing pyramid */#include "pyramid.h"/********************************************************************* * */_KLT_Pyramid _KLTCreatePyramid(  int ncols,  int nrows,  int subsampling,  int nlevels){  _KLT_Pyramid pyramid;  int nbytes = sizeof(_KLT_PyramidRec) +	    nlevels * sizeof(_KLT_FloatImage *) +    nlevels * sizeof(int) +    nlevels * sizeof(int);  int i;  if (subsampling != 2 && subsampling != 4 &&       subsampling != 8 && subsampling != 16 && subsampling != 32)    KLTError("(_KLTCreatePyramid)  Pyramid's subsampling must "             "be either 2, 4, 8, 16, or 32");       /* Allocate memory for structure and set parameters */  pyramid = (_KLT_Pyramid)  malloc(nbytes);  if (pyramid == NULL)    KLTError("(_KLTCreatePyramid)  Out of memory");       /* Set parameters */  pyramid->subsampling = subsampling;  pyramid->nLevels = nlevels;  pyramid->img = (_KLT_FloatImage *) (pyramid + 1);  pyramid->ncols = (int *) (pyramid->img + nlevels);  pyramid->nrows = (int *) (pyramid->ncols + nlevels);  /* Allocate memory for each level of pyramid and assign pointers */  for (i = 0 ; i < nlevels ; i++)  {    pyramid->img[i] =  _KLTCreateFloatImage(ncols, nrows);    pyramid->ncols[i] = ncols;  pyramid->nrows[i] = nrows;    ncols /= subsampling;  nrows /= subsampling;  }  return pyramid;}/********************************************************************* * */void _KLTFreePyramid(  _KLT_Pyramid pyramid){  int i;  /* Free images */  for (i = 0 ; i < pyramid->nLevels ; i++)    _KLTFreeFloatImage(pyramid->img[i]);  /* Free structure */  free(pyramid);}/********************************************************************* * */void _KLTComputePyramid(  _KLT_FloatImage img,   _KLT_Pyramid pyramid,  float sigma_fact){  _KLT_FloatImage currimg, tmpimg;  int ncols = img->ncols, nrows = img->nrows;  int subsampling = pyramid->subsampling;  int subhalf = subsampling / 2;  float sigma = subsampling * sigma_fact;  /* empirically determined */  int oldncols;  int i, x, y;	  if (subsampling != 2 && subsampling != 4 &&       subsampling != 8 && subsampling != 16 && subsampling != 32)    KLTError("(_KLTComputePyramid)  Pyramid's subsampling must "             "be either 2, 4, 8, 16, or 32");  assert(pyramid->ncols[0] == img->ncols);  assert(pyramid->nrows[0] == img->nrows);  /* Copy original image to level 0 of pyramid */  memcpy(pyramid->img[0]->data, img->data, ncols*nrows*sizeof(float));  currimg = img;  for (i = 1 ; i < pyramid->nLevels ; i++)  {    tmpimg = _KLTCreateFloatImage(ncols, nrows);    _KLTComputeSmoothedImage(currimg, sigma, tmpimg);    /* Subsample */    oldncols = ncols;    ncols /= subsampling;  nrows /= subsampling;    for (y = 0 ; y < nrows ; y++)      for (x = 0 ; x < ncols ; x++)        pyramid->img[i]->data[y*ncols+x] =           tmpimg->data[(subsampling*y+subhalf)*oldncols +                      (subsampling*x+subhalf)];    /* Reassign current image */    currimg = pyramid->img[i];				    _KLTFreeFloatImage(tmpimg);  }} 

⌨️ 快捷键说明

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