什么是相关核并与高斯核进行比较

信息处理 图像处理 matlab 高斯
2022-01-27 08:44:47

我读了一篇关于相关核的论文,它定义了: 其中α = (\int(1+d(y − x)dy)^{ -1} , (d(|y − x|)) 是到中心像素的空间欧几里得距离。我的问题是什么是相关核以及该核与高斯核比较的好处?非常感谢。

W(xy)=(α/1+d(|yx|))
α=((1+d(yx)dy)1(d(|yx|))

1个回答

参考论文,卷积核可以写成:

eqn1

d(|yx|)和内核中的位置之间的欧几里得距离用于确保内核下的整个区域为 1。但是,您没有指定此内核的大小因此,我们将分别指定这个内核的行和我们还假设每个维度的内核大小都是奇数原因是因为内核的形状将是一个均匀的正方形,并且使实现更容易。因此,以下是我将执行的步骤:yxαMN

  1. 定义网格XY坐标,并确保中心像素为 0。
  2. 计算没有项的卷积核中的每个α
  3. 将内核中的所有项相加,然后将该内核中的每个值除以该项,使得内核的整个区域为 1。

让我们一步一步来:

第1步

我们可以通过使用来做到这一点meshgridmeshgrid(在这种情况下)创建一个 2D(X,Y)坐标网格。 X定义 中每个位置的水平坐标X,而Y垂直定义。通过调用meshgrid(1:m, 1:n),我为和创建了一个n x m网格,其中每一行从 1 前进到,而每一列从 1 前进到因此,它们都是矩阵。调用上面的计算:XYXmYnn x mm = 4n = 4

m = 4;
n = 4;
[X,Y] = meshgrid(1:m, 1:n)

X =

 1     2     3     4
 1     2     3     4
 1     2     3     4
 1     2     3     4

Y =

 1     1     1     1
 2     2     2     2
 3     3     3     3
 4     4     4     4

因此,我们只需要修改它,但我们要确保中间在 处(0,0),并确保 和 的大小XY奇数。让我们这么说M = 5N = 5然后我们可以像这样定义我们的XY坐标:

M = 5;
N = 5;
[X,Y] = meshgrid(-floor(N/2):floor(N/2), -floor(M/2):floor(M/2))

X =

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


Y =

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

正如您在此处看到的,两者的中心像素XY都定义为(0,0)其他任何地方都有相对于 center(X,Y)定义的坐标

第2步

我们只需要计算中心像素到内核中每个点的欧几里得距离。这可以通过以下方式完成:

dis = sqrt(X.^2 + Y.^2)

dis =

2.8284    2.2361    2.0000    2.2361    2.8284
2.2361    1.4142    1.0000    1.4142    2.2361
2.0000    1.0000         0    1.0000    2.0000
2.2361    1.4142    1.0000    1.4142    2.2361
2.8284    2.2361    2.0000    2.2361    2.8284

做一些快速的计算检查,你可以看到这与我们对欧几里得距离的理解是一致的。从中心向左移动 1 是距离 1。向左移动 1 然后向上移动 1 得到欧几里得距离 . 对每个元素进行类似的检查将证明这确实是距中心像素的欧几里得距离场。在我们这样做之后,让我们计算没有项的核项。12+12=2=1.4142α

kern = 1 ./ (1 + dis)

kern =

0.2612    0.3090    0.3333    0.3090    0.2612
0.3090    0.4142    0.5000    0.4142    0.3090
0.3333    0.5000    1.0000    0.5000    0.3333
0.3090    0.4142    0.5000    0.4142    0.3090
0.2612    0.3090    0.3333    0.3090    0.2612

步骤#3

我们需要的最后一步是对掩码进行归一化,使内核的总和为 1。这可以简单地通过以下方式完成:

kernFinal = kern / sum(kern(:))

kernFinal =

0.0275    0.0325    0.0351    0.0325    0.0275
0.0325    0.0436    0.0526    0.0436    0.0325
0.0351    0.0526    0.1052    0.0526    0.0351
0.0325    0.0436    0.0526    0.0436    0.0325
0.0275    0.0325    0.0351    0.0325    0.0275

这应该最终为您提供您正在寻找的相关内核。您现在可以在卷积中使用它(即使用imfilteror conv2)。


希望我已经充分回答了你的问题。祝你好运!