基于sobel和canny算法的水珠边缘检测 - 图文(4)

2019-04-16 15:20

}

// Canny算子

void Canny(LPBYTE pGray, SIZE sz, double sigma, double dRatLow, double dRatHigh, LPBYTE pResult) { //经过高斯滤波后的图像

LPBYTE pGaussSmooth;

pGaussSmooth=new unsigned char[sz.cx*sz.cy]; //x方向导数的指针 int *pGradX;

pGradX = new int[sz.cx*sz.cy];

//y方向

int *pGradY;

pGradY = new int[sz.cx*sz.cy];

//梯度的幅度

int *pGradMag;

pGradMag = new int[sz.cx*sz.cy];

//对原图高斯滤波

GaussianSmooth(sz,pGray,pGaussSmooth,sigma);

//计算方向导数和梯度的幅度

Grad(sz,pGaussSmooth,pGradX,pGradY,pGradMag);

//应用非最大抑制

NonmaxSuppress(pGradMag,pGradX,pGradY,sz,pResult);

//应用Hysteresis,找到所有边界

Hysteresis(pGradMag,sz,dRatLow,dRatHigh,pResult); delete[] pGradX; pGradX = NULL; delete[] pGradY; pGradY = NULL; delete[] pGradMag; pGradMag = NULL; delete[] pGaussSmooth;

pGaussSmooth = NULL; }

void OnCanny() {

if (! m_fOpenFile){

return; }

m_fDone = TRUE;

RGBToGray(szImg, aRGB, aGray, BPP); Canny(aGray,szImg,0.1,0.9,0.76,aBinImg); ShowGrayImage(\} 演示图像:

Sobel边缘检测后的图像

Canny边缘检测后的图像

根据上图对照,明显可以得出canny 检测比sobel检测的效果更好。 三、结束语

1、sobel算子根据像素点上下、左右邻点灰度值加权值,在边缘处打到极大值这一现象检测边缘。对噪声具有平滑作用,提供较为精确的边缘方向信息,但是边缘定位精度不够高。当对精度要求不是很高的时候,是一种较为常用的边缘检测方法。

2、canny算子是边缘检测中最具有代表的一种局部极值边缘检测。无论从视觉效果还是客观评价来看,canny算子提取的边缘线性连接程度较好,对此类边缘提取比较完整,边缘线很细腻。

参考文献

[1] 数字图像处理《第三版》中文版(Rafael C.Ganzalez), 2014.04(7)

[2] 吴术路,WU Shu-lu.基于Sobel算子图像边缘检测的MATLAB实现,2010,06(19) [3] 王瀚闻,基于索贝尔算子的高分辨率遥感影像分割技术研究,内蒙古大学生命科学学院2000年,1674-098X(2012)08(a)-0018-01

[4] MaIIatS,ZhongS. Characterization of SignaIs from MuItiscaIe Edges[J].IEEE Trans on

PAMI,1992,14(7):710-732

[5] MeerP,Georgescu B. Edge Detection with Embedded Confidence[J].IEEE Trans on PAMI,2001,23(120):1351-1365.


基于sobel和canny算法的水珠边缘检测 - 图文(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:安全责任书

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: