索贝尔算子(Sobel operator)主要用作边缘检测,在技术上,它是一离散性差分算子,用来运算图像亮度函数的灰度近似值。Soble卷积因子为:
该算子包含两组3x3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。如果以A代表原始图像,Gx及Gy分别代表经横向及纵向边缘检测的图像灰度值,计算公式如下:
图像的每一个像素的横向及纵向灰度值通过以下公式结合,来计算该点灰度的大小:
G =√Gx² + Gy²
通常,为了提高效率使用不开平方的近似值:
|G| = |Gx| + |Gy|
具体计算如下:
首先,我们需要构建一个Sobel算子,通常是一个 3x3 的矩阵。Sobel算子可以分别计算水平和垂直方向的梯度值,然后将两者合并得到总梯度值。下面是要计算的四点乘四点的图像矩阵:
对于边缘上的点,由于没有足够的邻居像素,我们无法使用Sobel算子来计算梯度值。所以,我们假设选择图像矩阵中的点A(1, 1),即第二行第二列的元素,对应的灰度值为5。接下来,我们将使用Sobel算子计算这个点的梯度值。
A(1,1)
0 | 1 | 2 | 3 |
4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 |
12 | 13 | 14 | 19 |
水平方向梯度值 = Gx * A11
= (-1*0 + 0*1 + 1*2) + (-2*4 + 0*5 + 2*6) + (-1*8 + 0*9 + 1*10)
= (0 + 0 + 2) + (-8 + 0 + 12) + (-8 + 0 + 10)
= 2 + 4 + 2
= 8
垂直方向梯度值 = Gy * A11
= (-1*0 + -2*1 + -1*2) + (0*4 + 0*5 + 0*6) + (1*8 + 2*9 + 1*10)
= (0 - 2 - 2) + (0 + 0 + 0) + (8 + 18 + 10)
= -4 + 0 + 36
= 32
G11 = 8 + 32 = 40
以此类推,下一个点就是A(1,2)如下:
0 | 1 | 2 | 3 |
4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 |
12 | 13 | 14 | 19 |
水平方向梯度值 = Gx * A12
= (-1*1 + 0*2 + 1*3) + (-2*5 + 0*6 + 2*7) + (-1*9 + 0*10 + 1*11)
= (-1 + 0 + 3) + (-10 + 0 + 14) + (-9 + 0 + 11)
= 2 + 4 + 2
= 8
垂直方向梯度值 = Gy * A12
= (-1*1 + -2*2 + -1*3) + (0*5 + 0*6 + 0*7) + (1*9 + 2*10 + 1*11)
= (-1 - 4 - 3) + (0 + 0 + 0) + (9 + 20 + 11)
= -8 + 0 + 40
= 32
G12 = 8 + 32 = 40
A(2,1)如下:
0 | 1 | 2 | 3 |
4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 |
12 | 13 | 14 | 19 |
水平方向梯度值 = Gx * A21
= (-1*4 + 0*5 + 1*6) + (-2*8 + 0*9 + 2*10) + (-1*12 + 0*13 + 1*14)
= (-4 + 0 + 6) + (-16 + 0 + 20) + (-12 + 0 + 14)
= 2 + 4 + 2
= 8
垂直方向梯度值 = Gy * A21
= (-1*4 + -2*5 + -1*6) + (0*8 + 0*9 + 0*10) + (1*12 + 2*13 + 1*14)
= (-4 - 10 - 6) + (0 + 0 + 0) + (12 + 26 + 14)
= -20 + 0 + 52
=32
G21 = 8 + 32 = 40
A(2,2)如下:
0 | 1 | 2 | 3 |
4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 |
12 | 13 | 14 | 19 |
水平方向梯度值 = Gx * A22
= (-1*5 + 0*6 + 1*7) + (-2*9 + 0*10 + 2*11) + (-1*13 + 0*14 + 1*19)
= (-5 + 0 + 7) + (-18 + 0 + 22) + (-13 + 0 + 19)
= 2 + 4 + 6
= 12
垂直方向梯度值 = Gy * A22
= (-1*5 + -2*6 + -1*7) + (0*9 + 0*10 + 0*11) + (1*13 + 2*14 + 1*19)
= (-5 - 12 - 7) + (0 + 0 + 0) + (13 + 28 + 19)
= -24 + 0 + 60
= 36
G22 = 12 + 36 = 48
总结:计算出各点的最终数据之后将他们进行累加得到最终反馈给上位机的图像数据,所以这幅4X4的图像值最终为:
G = G11 + G12 + G21 + G22
= 40 + 40 + 40 + 48
=168