边缘检测算法——图像处理
2016-11-02 14:02
507 查看
1.Sobel边缘检测算法
sobel边缘算子认不同为邻域的像素对当前像素产生的影响不是等价的,所以距离不同的像素具有不同的权值,对算子结果产生的影响也不同。一般来说,距离越大,产生的影响越小。这两个卷积因子分别对垂直边缘和水平边缘影响最大,两个卷积的最大值做为该点的输出位。该算子包含两组3*3的矩阵,分别为图像横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。如果以A代表原始图像,Gx及Gy分别代表经横向及纵向边缘检测的图像灰度值,其公式如下:
具体计算如下:
其中f(a,b)表示图像(a,b)点的灰度值;
图像的每一个像素的横向及纵向灰度值通过以下公式结合,来计算该点灰度的大小:
通常,为了提高效率,使用不开平方的近似值:
如果梯度G大于某一阈值,则认为改点(x,y)为边缘点。
然后可用以下公式计算梯度方向:
sobel算子根据像素点上下、左右邻点灰度加权差,在边缘处达到极值这一现象检测边缘。对噪声具有平滑作用,提供较为精确的边缘方向信息,边缘定位精度不够高。当对精度要求不是很高时,是一种较为常见的边缘检测方法。
代码:
void Sobel(unsigned char *pSource, unsigned char *pDst) { int i,j,Gx,Gy,nSum; unsigned char *pDs1,*pDs2,*pDs3,*pDs4,*pDst5,*pDst6,*pDst7,*pDst8,*pDst9,*pResut; memset(pDst,0,sizeof(unsigned char)*m_nWidth*m_nHeight); pDs1 = pSource; pDs2 = pDs1+1; pDs3 = pDs2+1; pDs4 = pSource+m_nWidth; pDst5 = pDs4+1; pDst6 = pDst5+1; pDst7 = pSource+2*m_nWidth; pDst8 = pDst7+1; pDst9 = pDst8+1; pResut = pDst+m_nWidth+1; for (i=1;i<m_nHeight-1;i++) { for (j=1;j<m_nWidth-1;j++) { Gx = (*pDs3)+2*(*pDst6)+(*pDst9) -(*pDst7)-(*pDs1)-2*(*pDs4); Gy = (*pDs1)+2*(*pDs2)+(*pDs3) -(*pDst7)-2*(*pDst8)-(*pDst9); nSum = abs(Gx)+abs(Gy); *pResut = nSum>175?255:0; pDs1++; pDs2++; pDs3++; pDs4++; pDst5++; pDst6++; pDst7++; pDst8++; pDst9++; pResut++; } pDs1+=2; pDs2+=2; pDs3+=2; pDs4+=2; pDst5+=2; pDst6+=2; pDst7+=2; pDst8+=2; pDst9+=2; pResut+=2; } }
2.Robert算子——无方向一阶锐化
3.Priwitt算子——无方向一阶锐化
Priwitt算子在一个方向求微分,而在另一个方向求平均,因而对噪声相对不敏感,有抑制噪声的作用,但是像素平均相对于对图像的低通滤,所以Prewitt算子对边缘的定位不如Roberts算子。与Sobel相比,有一定的抗干扰性,图像效果比较干净。几种方法的效果比较:
Sobel算子与Priwitt算法的思路相同,属于同一类型,因此处理效果基本相同;
Roberts算子的模板时2*2,提取信息弱;
单方向锐化经过处理之后,也可以对边界进行增强。
4.拉普拉斯算子
二维函数f(x,y)的拉普拉斯是一个二阶的微分,定义为:最终结果为:
Laplacian算子利用二阶导数信息,具有各向同性,即与坐标轴方向无关,坐标轴旋转后梯度结果不变。使得图像经过二阶微分后,在边缘处产生一个陡峭的零交叉点,根据这个对零交叉点判断边缘。
为了改善锐化效果,可以脱离微分的计算原理,在原有的算子基础上,对模板系数进行改变,获得Laplacian变形算子
Laplacian算子对噪声比较敏感,Laplacian算子有一个缺点是它对图像中的某些边缘产生双重响应。所以图像一般先经过平滑处理,通常把Laplacian算子和平滑算子结合起来生成一个新的模板。
相关文章推荐
- 图像处理常用算法GPU实现二:基于微分的边缘检测
- 图像处理常用算法GPU实现三:基于模板匹配的边缘检测
- 图像处理算法4——Sobel 边缘检测算子
- 【图像处理】 常用边缘检测算法对比分析
- 图像处理常用算法GPU实现三:基于模板匹配的边缘检测
- [图像处理] Sobel边缘检测算法
- [置顶] 【matlab 图像处理】五种边缘检测算法比较
- 图像处理常用算法GPU实现二:基于微分的边缘检测
- [转]图像处理中各种边缘检测的微分算子简单比较(Sobel,Robert,Priwitt,Laplacian,Canny)
- 图像处理之霍夫变换(直线检测算法)
- 图像处理中各种边缘检测的微分算子简单比较(Sobel,Robert, Prewitt,Laplacian,Canny)
- c#图像处理-边缘检测
- 图像边缘检测算法的理解(转)
- 数字图像处理之边缘检测,图像分割
- [转载]图像处理中各种边缘检测的微分算子简单比较
- 图像处理中各种边缘检测的微分算子简单比较(Sobel,Robert, Prewitt,Laplacian,Canny)
- 【数字图像处理】Canny边缘检测详解及编程实现
- 图像处理中各种边缘检测的微分算子
- 数字图像处理 边缘检测
- 基于DM642的图像边缘检测算法的研究