注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

斗天堂

douzsh还活着

 
 
 

日志

 
 

自适应的canny边缘检测  

2008-08-07 10:35:37|  分类: 图像基础 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

基于opencv的,根据网上的一段小代码修改了下,因为不想动opencv内部的东西,所以写了这两个小函数:

void AdaptiveFindThreshold(CvMat *dx, CvMat *dy, double *low, double *high)
{
 CvSize size;
 IplImage *imge=0;
 int i,j;
 CvHistogram *hist;
 int hist_size = 255;
    float range_0[]={0,256};
    float* ranges[] = { range_0 };
 double  PercentOfPixelsNotEdges = 0.7;
 size = cvGetSize(dx);
 imge = cvCreateImage(size, IPL_DEPTH_32F, 1);
 // 计算边缘的强度, 并存于图像中
 float maxv = 0;
 for(i = 0; i < size.height; i++ )
 {
  const short* _dx = (short*)(dx->data.ptr + dx->step*i);
        const short* _dy = (short*)(dy->data.ptr + dy->step*i);
  float* _image = (float *)(imge->imageData + imge->widthStep*i);
  for(j = 0; j < size.width; j++)
  {
   _image[j] = (float)(abs(_dx[j]) + abs(_dy[j]));
   maxv = maxv < _image[j] ? _image[j]: maxv;
  }
 }
 
 // 计算直方图
 range_0[1] = maxv;
 hist_size = (int)(hist_size > maxv ? maxv:hist_size);
 hist = cvCreateHist(1, &hist_size, CV_HIST_ARRAY, ranges, 1);
 cvCalcHist( &imge, hist, 0, NULL );
 int total = (int)(size.height * size.width * PercentOfPixelsNotEdges);
 float sum=0;
 int icount = hist->mat.dim[0].size;
 
 float *h = (float*)cvPtr1D( hist->bins, 0 );
 for(i = 0; i < icount; i++)
 {
  sum += h[i];
  if( sum > total )
   break;
 }
 // 计算高低阈值
 *high = (i+1) * maxv / hist_size ;
 *low = *high * 0.4;
 cvReleaseImage( &imge );
 cvReleaseHist(&hist);
}
void hkCanny(IplImage* src,IplImage* dst ,int aperture_size)
{
 CvMat *dx = 0, *dy = 0;
 CvSize size;
 size = cvGetSize( src );
 dx = cvCreateMat( size.height, size.width, CV_16SC1 );
    dy = cvCreateMat( size.height, size.width, CV_16SC1 );
    cvSobel( src, dx, 1, 0, aperture_size );
    cvSobel( src, dy, 0, 1, aperture_size );
 double low_thresh,high_thresh;
 AdaptiveFindThreshold(dx, dy, &low_thresh, &high_thresh);
 cvReleaseMat(&dx);
 cvReleaseMat(&dy);
 cvCanny(src,dst,low_thresh,high_thresh,aperture_size);
}

  评论这张
 
阅读(257)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017