Sobel滤波器是否需要标准化?

时间:2013-04-09 02:06:44

标签: image-processing discrete-mathematics

x衍生品Sobel看起来就是这样:

-1 0 +1
-2 0 +2
-1 0 +1

让我们说我的图像有两个样本(0 =黑色,1 =白色):

0 0 1            1 0 0
0 0 1      &     1 0 0
0 0 1            1 0 0

如果我执行卷积,我将分别以4和-4结束。

所以我的自然反应是将结果标准化为8并将其翻译为0.5 - 那是对的吗? (我想知道找不到维基百科等提及任何规范化)

修改 我使用Sobel滤波器创建2D结构张量(使用导数dX和dY):

                   A B 
Structure Tensor = C D

with  A = dx^2 
      B = dx*dy
      C = dx*dy 
      D = dy^2

最终我想将结果存储在[0,1]中,但是现在我只是想知道我是否必须规范化Sobel结果(默认情况下,不仅仅是为了存储它),即:

A = dx*dx 
//OR
A = (dx/8.0)*(dx/8.0)
//OR
A = (dx/8.0+0.5)*(dx/8.0+0.5)

2 个答案:

答案 0 :(得分:1)

Sobel滤波器是一维有限差分滤波器的组成:

[ 1  0  -1 ] / 2

和另一个维度的平滑过滤器:

[ 1  2  1 ] / 4

因此,通常定义的对内核的适当归一化为1/8。

当需要正确估计导数时,需要进行此归一化。计算检测边缘的梯度幅度时,缩放比例无关紧要。

平滑滤波器中的1/4将其标准化为1。有限差分滤波器中的1/2来自比较的两个像素之间的距离。导数定义为 h 对[ f x + h )- f ( x )] / h 。对于有限差分近似,我们可以选择 h = 1,导致一个过滤器[1,-1],或者选择 h = 2,导致一个以上过滤器。 h = 2的优点是滤波器是对称的,而 h = 1则最终在两个像素之间的中间计算导数,因此结果发生偏移半像素。

答案 1 :(得分:0)

Sobel滤波器的数学上正确的归一化是1/8,因为它将结果带到每像素一个灰度级的自然单位。但在实际编程中,这不一定是正确的事情。