Tom*_*Tom 15 image-processing discrete-mathematics
x衍生Sobel就是这样的:
-1 0 +1
-2 0 +2
-1 0 +1
Run Code Online (Sandbox Code Playgroud)
假设我的图像中有两个样本看起来像那样(0 =黑色,1 =白色):
0 0 1 1 0 0
0 0 1 & 1 0 0
0 0 1 1 0 0
Run Code Online (Sandbox Code Playgroud)
如果我执行卷积,我将分别以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
Run Code Online (Sandbox Code Playgroud)
最后我想将结果存储在[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)
Run Code Online (Sandbox Code Playgroud)
Sobel 滤波器是一维有限差分滤波器的组成:
[ 1 0 -1 ] / 2
Run Code Online (Sandbox Code Playgroud)
以及另一个维度的平滑滤波器:
[ 1 2 1 ] / 4
Run Code Online (Sandbox Code Playgroud)
因此,通常定义的内核的正确标准化为 1/8。
当需要正确估计导数时,需要进行这种归一化。当计算用于检测边缘的梯度幅度时,缩放是无关的。这就是为什么通常在不进行 1/8 归一化的情况下实现 Sobel 滤波器的原因。
平滑滤波器中的1/4是将其归一化为1。有限差分滤波器中的1/2来自比较的两个像素之间的距离。导数定义为[ f ( x + h )- f ( x )]/ h的h到零的极限。对于有限差分近似,我们可以选择h =1,导致滤波器,或h =2,导致上面的滤波器。h = 2的优点是滤波器是对称的,当h = 1 时,您最终会计算两个像素之间中间的导数,因此结果会移动半个像素。[1,-1]