コード例 #1
0
    void ReAllocKernel(int  w, int h, float sigma=0.4)
    {
        double  ScaleToObj = sigma*1.39;
        int     kernel_width = cvRound(w/ScaleToObj);
        int     kernel_height = cvRound(h/ScaleToObj);
        int     x,y,s;
        assert(w>0);
        assert(h>0);
        m_ObjSize = cvSize(w,h);
        m_KernelMeanShiftSize = cvSize(kernel_width,kernel_height);


        /* Create kernels for histogram calculation: */
        if(m_KernelHistModel) cvReleaseMat(&m_KernelHistModel);
        m_KernelHistModel = cvCreateMat(h, w, DefHistTypeMat);
        calcKernelEpanechnikov(m_KernelHistModel);
        if(m_KernelHistCandidate) cvReleaseMat(&m_KernelHistCandidate);
        m_KernelHistCandidate = cvCreateMat(kernel_height, kernel_width, DefHistTypeMat);
        calcKernelEpanechnikov(m_KernelHistCandidate);

        if(m_Weights) cvReleaseMat(&m_Weights);
        m_Weights = cvCreateMat(kernel_height, kernel_width, CV_32F);

        for(s=-SCALE_RANGE; s<=SCALE_RANGE; ++s)
        {   /* Allocate kernel for meanshifts in space and scale: */
            int     si = s+SCALE_RANGE;
            double  cur_sigma = sigma * pow(SCALE_BASE,s);
            double  cur_sigma2 = cur_sigma*cur_sigma;
            double  x0 = 0.5*(kernel_width-1);
            double  y0 = 0.5*(kernel_height-1);
            if(m_KernelMeanShiftK[si]) cvReleaseMat(&m_KernelMeanShiftK[si]);
            if(m_KernelMeanShiftG[si]) cvReleaseMat(&m_KernelMeanShiftG[si]);
            m_KernelMeanShiftK[si] = cvCreateMat(kernel_height, kernel_width, DefHistTypeMat);
            m_KernelMeanShiftG[si] = cvCreateMat(kernel_height, kernel_width, DefHistTypeMat);

            for(y=0; y<kernel_height; ++y)
            {
                DefHistType* pK = (DefHistType*)CV_MAT_ELEM_PTR_FAST( m_KernelMeanShiftK[si][0], y, 0, sizeof(DefHistType) );
                DefHistType* pG = (DefHistType*)CV_MAT_ELEM_PTR_FAST( m_KernelMeanShiftG[si][0], y, 0, sizeof(DefHistType) );

                for(x=0; x<kernel_width; ++x)
                {
                    double r2 = ((x-x0)*(x-x0)/(x0*x0)+(y-y0)*(y-y0)/(y0*y0));
                    double sigma12 = cur_sigma2 / 2.56;
                    double sigma22 = cur_sigma2 * 2.56;
                    pK[x] = (DefHistType)(Gaussian2D(r2, sigma12)/sigma12 - Gaussian2D(r2, sigma22)/sigma22);
                    pG[x] = (DefHistType)(Gaussian2D(r2, cur_sigma2/1.6) - Gaussian2D(r2, cur_sigma2*1.6));
                }
            }   /* Next line. */
        }
    }   /* ReallocKernel */
コード例 #2
0
void Smooth(double **im, double **ims,int width,int height, int size, double theta){

double **kernel;
int i;
cout<<"g 01"<<flush<<endl;
 kernel=new double*[size];
      for (i=0;i<size;i++)
	kernel[i]=new double[size];
cout<<"g 01"<<flush<<endl;
Gaussian2D(kernel,theta,size);
cout<<"g 01"<<flush<<endl;
Convolution2DPadded(im,ims,width,height,kernel,size,size);
cout<<"g 01"<<flush<<endl;
 for(i=0;i<size;i++)
   delete(kernel[i]);
 delete(kernel);
}