第一范文网 - 专业文章范例文档资料分享平台

边缘检测算法

来源:用户分享 时间:2025/5/24 6:10:10 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

for(j=0;j

if(iEdgePoint[i][j]!=255) {

// 设置为非边界点 iEdgePoint[i][j] = 0 ; } } } }

void Canny::SetThreshold(int **iExtent,int *iThreHigh,int *iThreLow,int **iEdgePoint) { int i,j,k;

int GradHist[1024]; //统计梯度直方图的数据,梯度最大值不可能超过1024 int iEdgeNum; //边界点的数量 int iGradMax=0; //边界点的梯度最大值

int iHighCount; //根据iRatioHigh小于高阈值像素的个数 //初始化

for(i=0;i<1024;i++) GradHist[i]=0; //梯度直方图统计 for(i=0;i

for(j=0;j

if(iEdgePoint[i][j]==128) {

GradHist[iExtent[i][j]]++; } } }

iEdgeNum=0;

//找出最大梯度和统计边界点的个数 for(i=0;i<1024;i++) {

if(GradHist[i]!=0) iGradMax=i;

iEdgeNum+=GradHist[i]; }

//获得小于高阈值的个数

iHighCount=int(iEdgeNum*dRatioHigh+0.5); k=1;

iEdgeNum=GradHist[1]; //求出高阈值

while((k<=(iGradMax-1))&&(iEdgeNum

iEdgeNum+=GradHist[k]; }

*iThreHigh=k;

//根据高阈值和比例关系求得低阈值 *iThreLow=int((*iThreHigh)*dRatioLow+0.5); }

void Canny::TraceEdge(int y,int x,int iThreLow,int **iEdgePoint,int **iExtent) {

// 对8邻域象素进行查询 int xNb[8] = {1, 1, 0,-1,-1,-1, 0, 1} ; int yNb[8] = {0, 1, 1, 1,0 ,-1,-1,-1} ; int yy ; int xx ; int k ;

for(k=0;k<8;k++) {

yy=y+yNb[k] ; xx=x+xNb[k] ;

// 如果该象素为可能的边界点,又没有处理过, 并且梯度大于阈值 if(iEdgePoint[yy][xx]==128&&iExtent[yy][xx]>=iThreLow) {

// 把该点设置成为边界点 iEdgePoint[yy][xx]=255 ; // 以该点为中心进行跟踪

//TraceEdge(yy,xx,iThreLow,iEdgePoint,iExtent); } } }

搜索更多关于: 边缘检测算法 的文档
边缘检测算法.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c40f390osup2nsft0jg8d_4.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top