参考自:http://www.cnblogs.com/drizzlecrj/archive/2008/02/25/1077494.html
边缘探测在图像测量,模式识别时,从图像中抽出线条,检测出图像边缘或者抽出图像轮廓是最常用的操作。迄今为止,已经出现了许多成熟的算法。例如微分算法,掩模算法等。在微分算法中,常使用N*N的像素块,例如3*3或者4*4。3*3的像素块如下,f(i-1,j-1) f(i-1,j) f(i-1,j+1)f(i,j-1) f(i,j) f(i,j+1)f(i+1,j-1) f(i+1,j) f(i+1,j+1)我们不妨设f(i,j)为待处理的像素,而g(i, j)为处理后的像素。
● Roberts算子g(i, j) = sqrt( (f(i, j) - f(i + 1, j))^2 + (f(i + 1, j) - f(i, j + 1))^2 )或者g(i, j) = |f(i,j) - f(i + 1,j)| + |f(i+1,j) - f(i,j+1)|
● Sobel算子对数字图像的每一个像素f(i,j),考察它的上、下、左、右邻域灰度的加权值,把各方向上(0度、45度、90度、135度)的灰度值加权之和作为输出,可以达到提取图像边缘的效果。即 g(i,j) = fxr + fyr, 其中fxr = f(i-1,j-1)+2*f(i-1,j)+f(i-1,j+1)-f(i+1,j-1)-2*f(i+1,j)-f(i+1,j+1)fyr = f(i-1,j-1)+2*f(i,j-1)+f(i+1,j-1)-f(i-1,j+1)-2*f(i,j+1)-f(i+1,j+1)
● Laplace算子Laplace算子是一种二阶微分算子。它有两种形式:4邻域微分算子和8邻域微分算子。
⊙ 4邻域微分g(i,j)=|4*f(i,j)-f(i,j-1)-f(i-1,j)-f(i+1,j)-f(i,j+1)|
⊙ 8邻域微分g(i,j)=|8*f(i,j)-f(i,j-1)-f(i-1,j)-f(i+1,j)-f(i,j+1)-f(i-1,j-1)-f(i-1,j+1)-f(i+1,j-1)-f(i+1,j+1)|
● 其他常用算子
⊙ 右下边缘抽出采用3*3算子时,表达式为g(i,j)=|-2*f(i,j-1)-2*f(i-1,j)+2*f(i+1,j)+2*f(i,j+1)|
⊙ prewitt 边缘探测样板算子prewitt算子是一个边缘模板算子,由八个方向的样板组成,能够在0度,45度,90度,135度,180度,225度角等八个方向检测边缘。
8个3*3边缘模板及方向如下:
90度角: 45度角:
1 1 1 -1 -1 -1
1 -2 1 1 -2 1
-1 -1 -1 1 1 1
0度角: 315度角:
-1 1 1 1 1 -1
-1 -2 1 1 -2 -1
-1 1 1 1 1 -1
270度角: 225度角:
1 1 1 -1 -1 1
-1 -2 1 -1 -2 1
-1 -1 1 1 1 1
180度角: 135度角:
1 1 1 1 -1 -1
1 -2 -1 1 -2 -1
1 -1 -1 1 1 1
3*3时表达式如下:
A1*f(i-1,j-1) A8*f(i,j-1) A7*f(i+1,j-1)
A2*f(i-1,j) -2*f(i,j) A6*f(i+1, j)
A3*f(i-1,j+1) A4*f(i,j+1) A5*f(i+1,j+1)
g(i,j)=|-2*f(i,j)+A8*f(i,j-1)+A1*f(i-1,j-1)+A2*f(i-1,j)+A3*f(i-1,j+1)+A4*f(i,j+1)+A5*f(i+1,j+1)+A6*f(i+1,j)+A7*f(i+1,j-1)|
在程序设计中,依次用样板去检测图像,与被检测区域最为相似的样板给出最大值,用该最大值作为算子的输出值。
⊙ Robinson算子Robinson算子是一个模板算子,由八个方向的样板组成,能够在0度,45度,90度,135度,180度,225度角等八个方向检测边缘。
8个3*3边缘模板及方向如下:
90度角: 45度角:
1 2 1 0 1 2
0 0 0 -1 0 1
-1 -2 -1 -2 -1 0
0度角: 315度角:
-1 0 1 -2 -1 0
-2 0 2 -1 0 1
-1 0 1 0 1 2
270度角: 225度角:
-1 -2 -1 0 -1 -2
0 0 0 1 0 -1
1 2 1 2 1 0
180度角: 135度角:
1 0 -1 2 1 0
2 0 -2 1 0 -1
1 0 -1 0 -1 -2
使用方法与prewitt算子一样。
⊙ Kirsch算子Kirsch算子是一个模板算子,由八个方向的边缘样板组成,能够在0度,45度,90度,135度,180度,225度角等八个方向检测边缘。
8个3*3边缘模板及方向如下:
90度角: 45度角:
5 5 5 -3 5 5
-3 0 -3 -3 0 5
-3 -3 -3 -3 -3 -3
0度角: 315度角:
-3 -3 5 -3 -3 -3
-3 0 5 -3 0 5
-3 -3 5 -3 5 5
270度角: 225度角:
5 5 -3 -3 -3 -3
5 0 -3 5 0 -3
-3 -3 -3 5 5 -3
180度角: 135度角:
5 -3 -3 5 5 -3
5 0 -3 5 0 -3
5 -3 -3 -3 -3 3
使用方法与prewitt算子一样。
⊙ Smoothed算子Smoothed算子是一个3*3的算子,设
|-1 0 1| |0 0 0|
Dx = |1 1 1| Dy = |-1 0 1|
|-1 0 1| |-1 -1 -1|
则 D = sqrt(Dx^2 + Dy^2) 或者 D = |Dx| + |Dy|
或 Dx(i, j) = f(i-1,j+1)+f(i,j+1)+f(i+1,j+1)-f(i-1,j-1)-f(i,j-1)-f(i+1,j-1)
Dy(i,j) = f(i-1,j-1)+f(i-1,j)+f(i-1,j+1)-f(i+1,j-1)-f(i+1,j)-f(i+1,j+1)