积分投影

将图像序列中的每一帧图像分别沿水平和垂直方向进行积分投影形成两个积分投影向量。即:对于二值化后的图像,进行水平和垂直两个方向的投影,然后分别建立直方图,可以进一步进行阴影去除。参考代码:

IplImage * cvImageIntegralProjection(IplImage *src,IplImage* paintx,IplImage * painty){
    cvThreshold(src,src,20,255,CV_THRESH_BINARY_INV);  
  
    cvZero(paintx);  
    cvZero(painty);  
    int* v=new int[src->width];  
    int* h=new int[src->height];  
    memset(v,0,src->width*4);  
    memset(h,0,src->height*4);  
      
    int x,y;  
    CvScalar s,t;  
    for(x=0;x<src->width;x++){  
        for(y=0;y<src->height;y++) {  
            s=cvGet2D(src,y,x);           
            if(s.val[0]==0)  
                v[x]++;                   
        }         
    }  
      
    for(x=0;x<src->width;x++) {  
        for(y=0;y<v[x];y++){         
            t.val[0]=255;  
            cvSet2D(paintx,y,x,t);        
        }         
    }  
      
    for(y=0;y<src->height;y++) {  
        for(x=0;x<src->width;x++) {  
            s=cvGet2D(src,y,x);           
            if(s.val[0]==0)  
                h[y]++;       
        }     
    }  
    for(y=0;y<src->height;y++) {  
        for(x=0;x<h[y];x++){             
            t.val[0]=255;  
            cvSet2D(painty,y,x,t);            
        }         
    }  
	return 0;
}
输出结果:

积分投影_第1张图片积分投影_第2张图片

积分投影_第3张图片


关于Image Engineering & Computer Vision的更多讨论与交流,敬请关注本博客和新浪微博songzi_tea.

你可能感兴趣的:(图像处理,计算机视觉,积分投影)