NMI特征识别
该特征具有 放大、缩小、旋转抗灰度巨变 不变性。能够达到实时性要求
writen by wqj1212@yahoo.com.cn
 double CRecognise::recogniseNMI(IplImage *src)
double CRecognise::recogniseNMI(IplImage *src)
 {
{ 
 IplImage *src1;
    IplImage *src1;
 int width;
    int width;
 int height;
     int height;
 width=src->width;
    width=src->width;
 height=src->height;
    height=src->height;
 int i,j;
    int i,j;
 double cx=0.0;double cy=0.0; J=0.0;double M=0.0;
double cx=0.0;double cy=0.0; J=0.0;double M=0.0;
 src1=cvCreateImage(cvSize(src->width,src->height),src->depth,1);
src1=cvCreateImage(cvSize(src->width,src->height),src->depth,1);
 if((src->nChannels)!=1)
if((src->nChannels)!=1)
 {    cvCvtColor(src,src1,CV_BGR2GRAY);
{    cvCvtColor(src,src1,CV_BGR2GRAY);
 }
}
 else
else
 //cvCopy(src,src1);
//cvCopy(src,src1);
 src1=(IplImage *)cvClone(src);
src1=(IplImage *)cvClone(src);
 //cvAdaptiveThreshold(src1,src1,1,CV_ADAPTIVE_THRESH_GAUSSIAN_C,CV_THRESH_BINARY ,5);
//cvAdaptiveThreshold(src1,src1,1,CV_ADAPTIVE_THRESH_GAUSSIAN_C,CV_THRESH_BINARY ,5);
 for(j=1;j<=height;j++)
for(j=1;j<=height;j++)
 
    
 for(i=1;i<=width;i++)
        for(i=1;i<=width;i++)
 {
        {

 
            
 M+=(float)CV_IMAGE_ELEM(src1,uchar,j,i);
            M+=(float)CV_IMAGE_ELEM(src1,uchar,j,i);
 cx+=i*CV_IMAGE_ELEM(src1,uchar,j,i);
            cx+=i*CV_IMAGE_ELEM(src1,uchar,j,i);
 cy+=j*CV_IMAGE_ELEM(src1,uchar,j,i);
            cy+=j*CV_IMAGE_ELEM(src1,uchar,j,i);
 
    
 
            
 }
        }
 
        
 cx/=M;
     cx/=M;
 cy/=M;
     cy/=M;

 for(j=1;j<=height;j++)
     for(j=1;j<=height;j++)
 for( i=1;i<width;i++)
         for( i=1;i<width;i++)
 {
         {
 J+=((i-cx)*(i-cx)+(j-cy)*(j-cy))*((float)CV_IMAGE_ELEM(src1,uchar,j,i));
             J+=((i-cx)*(i-cx)+(j-cy)*(j-cy))*((float)CV_IMAGE_ELEM(src1,uchar,j,i));
 }
         }
 J=sqrt(J)/M;
    J=sqrt(J)/M;
 return J;
    return J;
 
    
 }
}
writen by wqj1212@yahoo.com.cn
 double CRecognise::recogniseNMI(IplImage *src)
double CRecognise::recogniseNMI(IplImage *src) {
{  IplImage *src1;
    IplImage *src1; int width;
    int width; int height;
     int height; width=src->width;
    width=src->width; height=src->height;
    height=src->height; int i,j;
    int i,j; double cx=0.0;double cy=0.0; J=0.0;double M=0.0;
double cx=0.0;double cy=0.0; J=0.0;double M=0.0; src1=cvCreateImage(cvSize(src->width,src->height),src->depth,1);
src1=cvCreateImage(cvSize(src->width,src->height),src->depth,1); if((src->nChannels)!=1)
if((src->nChannels)!=1) {    cvCvtColor(src,src1,CV_BGR2GRAY);
{    cvCvtColor(src,src1,CV_BGR2GRAY); }
} else
else //cvCopy(src,src1);
//cvCopy(src,src1); src1=(IplImage *)cvClone(src);
src1=(IplImage *)cvClone(src); //cvAdaptiveThreshold(src1,src1,1,CV_ADAPTIVE_THRESH_GAUSSIAN_C,CV_THRESH_BINARY ,5);
//cvAdaptiveThreshold(src1,src1,1,CV_ADAPTIVE_THRESH_GAUSSIAN_C,CV_THRESH_BINARY ,5); for(j=1;j<=height;j++)
for(j=1;j<=height;j++) 
     for(i=1;i<=width;i++)
        for(i=1;i<=width;i++) {
        {
 
             M+=(float)CV_IMAGE_ELEM(src1,uchar,j,i);
            M+=(float)CV_IMAGE_ELEM(src1,uchar,j,i); cx+=i*CV_IMAGE_ELEM(src1,uchar,j,i);
            cx+=i*CV_IMAGE_ELEM(src1,uchar,j,i); cy+=j*CV_IMAGE_ELEM(src1,uchar,j,i);
            cy+=j*CV_IMAGE_ELEM(src1,uchar,j,i); 
     
             }
        } 
         cx/=M;
     cx/=M; cy/=M;
     cy/=M;
 for(j=1;j<=height;j++)
     for(j=1;j<=height;j++) for( i=1;i<width;i++)
         for( i=1;i<width;i++) {
         { J+=((i-cx)*(i-cx)+(j-cy)*(j-cy))*((float)CV_IMAGE_ELEM(src1,uchar,j,i));
             J+=((i-cx)*(i-cx)+(j-cy)*(j-cy))*((float)CV_IMAGE_ELEM(src1,uchar,j,i)); }
         } J=sqrt(J)/M;
    J=sqrt(J)/M; return J;
    return J; 
     }
} 
                    
                


 
                
            
         
 浙公网安备 33010602011771号
浙公网安备 33010602011771号