符号
\quad 我们将使用大写字母如 I I I 和 J J J来表示图像。 图像可以是二维( 2 D 2D 2D)(就像在现实生活中一样)或一维( 1 D 1D 1D)的。 我们将使用小写字母,如 i i i和 j j j来表示图像中的索引或位置。 当我们索引图像时,我们将使用与 Matlab 相同的约定。 首先,这意味着图像的第一个元素索引1(不是 0,比如在 C++ 中)。 因此,如果 I I I 是一维图像,则 I ( 1 ) I(1) I(1)是其第一个元素。 其次,对于 2 D 2D 2D图像,我们首先给出行,然后给出列。 所以 I ( 3 , 6 ) I(3,6) I(3,6) 是图像第三行,第六列的像素。
引言
\quad 相关和卷积是在进行图像信息提取中的基本操作,在某种程度可以说它们是可以在图像上进行得最简单的操作,但是却也是非常有用的。而且,因为它们简单,所以可以更好的被理解和分析,实现和计算起来也更加容易和高效。 文章的主要目的是准确的了解相关和卷积是什么和为什么它们有用。因为比较完整地了解它们需要的时间比较长,所以文章尽量涉及一些它们比较有趣的定理性质。
\quad 这两个操作有两个关键的性质:它们是移不变和线性的。移不变是指它们对图像的每一个像素点进行一样的操作。线性指操作是线性的,即将每一个像素替代成其附近像素的线性组合。这两个性质使这些操作变得非常简单;如果到处都做同样的事情就更简单了,而线性操作总是最简单的。
\quad 我们首先考虑这些操作的最简单版本,然后进行概括。 文章将通过几种方式让理解变得更容易。
- 首先,其实卷积和相关是几乎相同的操作,但大多数人似乎发现卷积更令人困惑。 所以先只讲相关,然后再讲卷积。
- 其次,将从讨论一维图像开始。 我们可以将一维图像视为单行像素的集合。 有时 2 D 2D 2D 中的情况比 1 D 1D 1D复杂得多,但幸运的是,相关和卷积不会随图像的维度有太大变化,因此先理解 1 D 1D 1D 中的情况会有很大帮助。
- 此外,尽管在某些情况下将图像视为连续函数是有启发性的,但我们首先将图像视为离散的,即是由一个个单像素组成的集合。
相关作为滤波器
\quad 我们可以通过相关执行的最简单的操作之一是局部平均。 正如我们将看到的,这也是一个非常有用的操作。 让我们考虑一个简单的平均操作,其中我们将一维图像中的每个像素替换为该像素及其两个相邻像素的和的平均值。 假设我们有一个图像 I I I,其像素值为:
5 | 4 | 2 | 3 | 7 | 4 | 6 | 5 | 3 | 6 |
---|
\quad 平均是一种将图像作为输入,并产生新图像作为输出的操作。例如,当我们对第四个像素求平均时,我们将值 3 替换为 2、3 和 7 的平均值。也就是说,如果我们称我们生成的新图像为 J,我们可以这样写: J ( 4 ) = ( I ( 3 ) + I ( 4 ) + I ( 5 ) ) / 3 = ( 2 + 3 + 7 ) / 3 = 4 J(4) = (I (3)+I(4)+I(5))/3 = (2+3+7)/3 = 4 J(4)=(I(3)+I(4)+I(5))/3=(2+3+7)/3=4. 或者,例如,我们也得到: J ( 3 ) = ( I ( 2 ) + I ( 3 ) + I ( 4 ) ) / 3 = ( 4 + 2 + 3 ) / 3 = 3 J(3) =(I(2)+I (3)+I(4))/3 = (4+2+3)/3 = 3 J(3)=(I(2)+I(3)+I(4))/3=(4+2+3)/3=3。请注意,新图像中的每个像素都取决于旧图像中的像素。一个可能的错误是在计算 J ( 4 ) J(4) J(4) 时使用新图像中的 J ( 3 ) J(3) J(3),不能这样做。 J ( 4 ) J(4) J(4) 应该只依赖于 I ( 3 ) 、 I ( 4 ) I(3)、I(4) I(3)、I(4) 和 I ( 5 ) I(5) I(5)。像这样的平均操作是移不变的,因为我们对每个像素执行相同的操作。每个新像素都是它自己和它的两个相邻位置的平均值。平均也是线性的,因为每个新像素都是旧像素的线性组合。这意味着我们缩放旧像素(在这种情况下,我们将所有相邻像素乘以 1/3)并将它们相加。这个例子说明了我们将考虑的所有相关和卷积中的一个属性。像素处的输出图像仅基于其周围的一小部分像素输入图像。在上面这个例子中,邻域仅包含三个像素。有时我们会使用稍大的邻域,但一般不会太大。
边界
\quad 我们还没有完全描述相关,因为我们还没有说在图像的边界处做什么。 什么是 J ( 1 ) J(1) J(1)? 其左侧没有像素可包含在平均值中,即 I ( 0 ) I(0) I(0) 未定义。
有四种常见的方法来处理这个问题:
(1) 在处理边界的第一种方法中,原始图像用零填充(红色斜体)。
. | . | . | 0 | 0 | 5 | 4 | 2 | 3 | 7 | 4 | 6 | 5 | 3 | 6 | 0 | 0 | . | . | . |
---|
\quad 第一种方法是想象 I I I 是无限长图像的一部分,除了我们指定的地方外,该图像处处为零。 在这种情况下,我们有 I ( 0 ) = 0 I(0) = 0 I(0)=0,我们可以说: J ( 1 ) = ( I ( 0 ) + I ( 1 ) + I ( 2 ) ) / 3 = ( 0 + 5 + 4 ) / 3 = 3 J(1) = (I(0) + I(1) + I(2))/3 = (0 + 5 + 4)/ 3 = 3 J(1)=(I(0)+I(1)+I(2))/3=(0+5+4)/3=3。类似地,我们有: J ( 10 ) = ( I ( 9 ) + I ( 10 ) + I ( 11 ) ) / 3 = ( 3 + 6 + 0 ) / 3 = 3 J(10) = (I(9)+I(10)+I(11))/3 = (3 + 6 + 0)/3 = 3 J(10)=(I(9)+I(10)+I(11))/3=(3+6+0)/3=3。
(2) 在处理边界的第二种方法中,原始图像用第一个和最后一个值(红色斜体)填充。
. | . | . | 5 | 5 | 5 | 4 | 2 | 3 | 7 | 4 | 6 | 5 | 3 | 6 | 6 | 6 | . | . | . |
---|
\quad 第二种方法是也想象 I I I 是无限图像的一部分,但使用图像中的第一个和最后一个像素来扩展它。 在这个示例中, I I I 中第一个像素左侧的任意像素的值都为 5,最后一个像素右侧的任意像素的值都为 6。所以我们有: J ( 1 ) = ( I ( 0 ) + I ( 1 ) + I ( 2 ) ) / 3 = ( 5 + 5 + 4 ) / 3 = 14 / 3 J(1) = (I( 0) + I(1) + I(2))/3 = (5 + 5 + 4)/3 = 14/3 J(1)=(I(0)+I(1)+I(2))/3=(5+5+4)/3=14/3,且 J ( 10 ) = ( I ( 9 ) + I ( 10 ) + I ( 11 ) ) / 3 = ( 3 + 6 + 6 ) / 3 = 5 J(10) = (I(9)+I(10)+I( 11))/3 = (3 + 6 + 6)/3 = 5 J(10)=(I(9)+I(10)+I(11))/3=(3+6+6)/3=5。
(3) 在处理边界的第三种方法中,原始图像循环重复(红色斜体)。
. | . | . | 3 | 6 | 5 | 4 | 2 | 3 | 7 | 4 | 6 | 5 | 3 | 6 | 5 | 4 | . | . | . |
---|
\quad 第三种方法,我们可以把图像想象成一个圆圈,这样像素值就会收尾相连,第一个像素左侧的像素将是图像中的最后一个像素。 也就是说,在这个示例中,我们将 I ( 0 ) I(0) I(0) 定义为 I ( 10 ) I(10) I(10)。 那么我们有: J ( 1 ) = ( I ( 0 ) + I ( 1 ) + I ( 2 ) ) / 3 = ( I ( 10 ) + I ( 1 ) + I ( 2 ) ) / 3 = ( 6 + 5 + 4 ) / 3 = 5 J(1) = (I(0) + I(1) + I(2))/3= (I(10) + I(1) + I(2))/3 = (6 + 5 + 4)/3 = 5 J(1)=(I(0)+I(1)+I(2))/3=(I(10)+I(1)+I(2))/3=(6+5+4)/3=5, 和 J ( 10 ) = ( I ( 9 ) + I ( 10 ) + I ( 11 ) ) / 3 = ( I ( 9 ) + I ( 10 ) + I ( 1 ) ) / 3 = ( 3 + 6 + 5 ) / 3 = 14 / 3 J(10) = (I(9)+I(10)+I(11))/3 = (I(9)+I(10)+I(1))/3 = (3 + 6 + 5)/3 = 14/3 J(10)=(I(9)+I(10)+I(11))/3=(I(9)+I(10)+I(1))/3=(3+6+5)/3=14/3。
(4) 在处理边界的第四种方法。
\quad
我们可以简单地说,超出我们给出的值,图像是未定义的。 在这种情况下,我们无法计算使用这些未定义值的任何平均值,因此
J
(
1
)
J(1)
J(1) 和
J
(
10
)
J(10)
J(10) 将是未定义的,并且 J 将小于 I。
\quad 这四种方法各有优缺点。 如果我们把使用的图像想象成只是巨大图像中的一个小截图,并且我们希望使用截图边界外的值与我们拍摄更大的图片时获得的值最相似,那么第二种方法可能最合适。也就是说,如果我们必须猜测 I ( 0 ) I(0) I(0) 的值,即使我们看不到它,但我们在 I ( 1 ) I(1) I(1) 中看到的值可能是一个最好的猜测。 在这篇文章中,除非我们明确声明,否则默认使用第二种方法来处理边界。
\quad
我们现在将以更加图形化,并且可能更直观地概括的方式来看待往常的平均操作。 在求平均时,对于特定像素,我们将其及其相邻像素各乘以
1
/
3
1/3
1/3,然后将三个结果数字相加。我们相乘的数字
(
1
/
3
,
1
/
3
,
1
/
3
)
(1/3, 1/3, 1/3)
(1/3,1/3,1/3)形成一个滤波器。 这种特殊的滤波器称为框滤波器(box filter)。我们可以将其视为沿着图像滑动的
1
×
3
1\times 3
1×3 结构。在每个位置,我们将滤波器中的每个数字乘以位于其上方的图像像素值,然后将这些相加。 计算结果作为与滤波器中心对应位置的新像素值。 下图显示了我们以这种方式生成
J
(
1
)
J(1)
J(1)。
\quad
为了得到新的图像中下一个像素值,我们将滤波器向前移动一个像素,并执行相同的操作。
\quad
我们继续这样做,直到我们产生了新图像
J
J
J 中的每个像素。根据这种相关操作,我们可以通过定义一个新的滤波器来定义一个新的平均过程。 例如,假设不是对像素与其直接邻域像素求平均,而是要对每个像素与直接邻域像素及其直接邻域像素进行平均。 我们可以将滤波器定义为
(
1
5
,
1
5
,
1
5
,
1
5
,
1
5
)
(\frac{1}{5},\frac{1}{5},\frac{1}{5},\frac{1}{5},\frac{1}{5})
(51,51,51,51,51)。 然后我们执行与上面相同的操作,但使用一个 5 个像素宽的滤波器。 结果图像中的第一个像素将是:
J
(
1
)
=
(
I
(
−
1
)
/
5
+
I
(
0
)
/
5
+
I
(
1
)
/
5
+
I
(
2
)
/
5
+
I
(
3
)
/
5
)
=
1
+
1
+
1
+
4
/
5
+
2
/
5
=
21
/
5
J(1) = (I(-1)/5 + I(0)/5 + I(1)/5 + I(2)/5 + I(3) /5) = 1+1+1+4/5 + 2/5 = 21/5
J(1)=(I(−1)/5+I(0)/5+I(1)/5+I(2)/5+I(3)/5)=1+1+1+4/5+2/5=21/5。
相关的数学定义
\quad
更正式地用数学定义写下这一切对于理解很是有帮助的。 假设
F
F
F 是一个相关滤波器, 在符号上假设
F
F
F有奇数个元素会很方便,所以我们可以假设当它移动时,它的中心正好与
I
I
I的一个元素对齐。 所以我们说
F
F
F 有
2
N
+
1
2N+1
2N+1 个元素,并且 这些索引从
−
N
-N
−N 到
N
N
N,因此
F
F
F 的中心元素是
F
(
0
)
F(0)
F(0)。 然后我们可以写:
J
=
F
∘
I
(
x
)
=
∑
i
=
−
N
N
F
(
i
)
I
(
x
+
i
)
J = F \circ I(x) = \sum_{i=-N}^N F(i)I(x+i)
J=F∘I(x)=i=−N∑NF(i)I(x+i)
\quad
其中圆圈表示相关。 有了这个符号,我们可以定义上面简单的框滤波器(box filter)为:
F
(
i
)
=
{
1
3
for
i
=
−
1
,
0
,
1
0
for
i
≠
−
1
,
0
,
1
F (i)= \begin{cases} \frac{1}{3} & \text{for } i=-1,0,1\\ 0 & \text{for } i \neq -1, 0,1\\ \end{cases}
F(i)={310for i=−1,0,1for i=−1,0,1
用连续函数构造滤波器
\quad 一个合理的平均滤波器应该是什么样子才是非常直观的?现在我们要开始考虑构建滤波器的更一般策略。 通常情况下,我们认为连续函数可以构成一个良好的滤波器,并且我们想要提出一个近似这个连续函数的离散滤波器。 当我们谈论傅立叶变换时,将首先给出将滤波器视为连续函数的一些原因。 但与此同时,我们将给出一个用于图像平滑的重要连续函数的例子,高斯函数。
\quad
一维高斯是:
G
(
x
)
=
1
σ
2
π
e
x
p
(
−
(
x
−
μ
)
2
2
σ
2
)
G(x) = \frac{1}{\sigma\sqrt{2\pi}}exp({\frac{-(x-\mu)^2}{2\sigma^2}})
G(x)=σ2π1exp(2σ2−(x−μ)2)
\quad
这也称为正态分布。 这里
μ
\mu
μ是平均值,
σ
\sigma
σ是方差。 下图是一个高斯图像:
\quad
平均值
μ
\mu
μ 给出了函数峰值的位置。 参数
σ
\sigma
σ控制峰值的宽度, 随着
σ
\sigma
σ变小,峰变窄。
\quad
Gaussian 有很多非常有用的特性,其中一些我们稍后会提到。当我们将其用作滤波器时,我们可以将其视为一种很好的平均方式。我们上面介绍的平均滤波器将每个像素替换为其临近像素的平均值。这意味着中心像素附近的像素在平均值中都扮演着同等的角色,而更远的像素则没有任何作用。然而使用 Gaussian 滤波器将每个像素替换为其临近像素的加权平均值更有吸引力。这样,最近的像素对平均值的影响更大,更远的像素起的作用越来越小。这其实更合理,因为我们在像素对结果的影响方面有一个平滑和连续的下降,而不是突然的、不连续的变化。当我们讨论傅立叶变换时,我们将更严格地证明这一点。当我们使用高斯进行平滑时,我们将设
μ
\mu
μ= 0,因为我们希望每个像素都是对其新的、平滑后的像素影响最大。所以我们的高斯有如下形式:
G
0
(
x
)
=
1
σ
2
π
e
x
p
(
−
x
2
2
σ
2
)
G_0(x) = \frac{1}{\sigma\sqrt{2\pi}}exp({\frac{-x^2}{2\sigma^2}})
G0(x)=σ2π1exp(2σ2−x2)
\quad
σ
\sigma
σ将作为一个参数,允许我们控制我们对图像的平滑程度(即我们用于平均的邻域有多大)。
σ
\sigma
σ越大,图像越平滑。
\quad 我们现在想要构建一个看起来像高斯的离散滤波器。 我们可以通过在高斯函数离散位置取值来做到这一点, 也就是说,虽然 G a u s s i a n Gaussian Gaussian 函数是在 x x x 连续值定义的,但我们只会在离散位置使用它的值 ( ⋯ − 3 , − 2 , − 1 , 0 , 1 , 2 , 3 ⋯ ) (\cdots -3, -2, -1, 0, 1, 2, 3\cdots) (⋯−3,−2,−1,0,1,2,3⋯)。其中一种实现的方法是我们用分段常数函数来逼近原始连续函数,其中每个部分的分段宽度为一个像素。
\quad
然而,我们不能在每个整数位置对高斯函数取值,因为这会给我们一个无限长的滤波器,而且没有任何实用价值。幸运的是,随着
x
x
x远离平均值
0
0
0,
G
(
x
)
G(x)
G(x) 的值将很快下降到接近
0
0
0,因此忽略绝对值较高的
x
x
x 值是安全的。关于何时忽略
G
(
x
)
G(x)
G(x) 的某些值是安全的,没有硬性规定,但合理的经验法则是确保我们捕获 99% 的函数。 意思是我们的滤波器中的值的总和将至少包含我们在无限长滤波器中得到的值的 99%,也就是说,我们选择
N
N
N 使得:
∑
−
N
N
G
(
x
)
∑
−
∞
∞
G
(
x
)
>
.
99
\frac {\displaystyle \sum_{-N}^N G(x)} {\displaystyle \sum_{-\infty}^\infty G(x) } > .99
−∞∑∞G(x)−N∑NG(x)>.99
\quad
最后还有一点,平均滤波器应该让它的所有元素加起来为 1。如果滤波器里的元素加起来不为 1,那么我们不仅在平滑图像,而且还在使其变暗或变亮。 连续高斯积分为1(毕竟它是一个概率密度函数,概率加起来一定是1),但是当我们对它进行采样和截断时,不能保证我们得到的值加起来仍然是1。所以我们必须标准化我们的滤波器,这意味着我们的滤波器的元素将被计算为:
F
(
i
)
=
G
(
i
)
∑
−
N
N
G
(
x
)
f
o
r
i
=
−
N
⋯
N
F(i) = \frac { G(i)} {\displaystyle \sum_{-N}^N G(x) } \qquad for \quad i = -N\cdots N
F(i)=−N∑NG(x)G(i)fori=−N⋯N
用相关求导数
\quad 平均或平滑是我们可以用滤波器做的最重要的事情之一。 然而,另一个非常有用的事情是取导数,这使我们能够测量图像变化的速度。 取导数是我们通常认为用连续函数做的事情。 从技术上讲,导数甚至在离散图像上没有定义的。 然而,正如我们能够产生一个近似连续高斯的离散滤波器一样,我们也可以离散地近似一个连续导数算子。
\quad 直观地,当我们从函数的一个部分到另一个部分时,通过求差来找到导数。 也就是说,它是 y y y 的变化除以 x x x 的变化。 因此,微分滤波器很自然看起来像 ( − 1 / 2 , 0 , 1 / 2 ) (-1/2, 0, 1/2) (−1/2,0,1/2)这样。 当我们应用这个滤波器时,我们得到 J ( i ) = ( I ( i + 1 ) − I ( i − 1 ) ) / 2 J(i) = (I(i+1)-I(i-1))/2 J(i)=(I(i+1)−I(i−1))/2。 这是将 y 的变化,即图像的像素值差,除以 x 的变化,即图像位置。
\quad 让我们考虑一个例子。 假设图像像素值与位置呈二次方增长,因此 I ( x ) = x 2 I(x) = x^2 I(x)=x2。 然后,如果我们查看位置 1, 2, 3, … 的像素值,它们将如下所示:
1 | 4 | 9 | 16 | 25 | 36 | . | . | . |
---|
\quad 如果我们用 ( − 1 / 2 , 0 , 1 / 2 ) (-1/2 ,0 ,1/2) (−1/2,0,1/2) 形式的滤波器去计算新的像素值,我们将得到:
3/2 | 4 | 6 | 8 | 10 | 12 | . | . | . |
---|
\quad 我们知道 I ( x ) I(x) I(x) 的导数, d I d x = 2 x \frac{dI}{dx} = 2x dxdI=2x。 这样我们有,例如, J ( 2 ) = 4 , J ( 3 ) = 6 , . . . J(2) = 4, J(3) = 6,... J(2)=4,J(3)=6,...注意 J ( 1 ) J(1) J(1) 不等于 2 因为我们处理边界的方式,通过设置 I ( 0 ) = 1 I( 0) = 1 I(0)=1而不是 I ( 0 ) = 0 I(0) = 0 I(0)=0。所以在边界处,我们的图像并没有真正反映 I ( x ) = x 2 I(x) = x^2 I(x)=x2。
\quad 我们可以很容易地使用像 ( 0 , − 1 , 1 ) (0, -1 ,1) (0,−1,1) 这样的滤波器,它计算表达式: J ( i ) = ( I ( i + 1 ) − I ( i ) ) 1 J(i) = \frac {(I(i+1)-I(i))}{1} J(i)=1(I(i+1)−I(i)),或滤波器 (-1 1 0),计算 J ( i ) = ( I ( i ) – I ( i − 1 ) ) 1 J(i) = \frac {(I(i) – I(i-1))}{1} J(i)=1(I(i)–I(i−1)), 这些都是导数的合理近似。滤波器 ( − 1 / 2 , 0 , 1 / 2 ) (-1/2, 0 ,1/2) (−1/2,0,1/2) 的一个优点是它对称地处理中心像素的临近像素。
用相关进行匹配
\quad 相关的另一应用在于我们可以使用它和相关方法来查找图像中与模板相似的位置。为此,请将滤波器视为模板; 我们在图像周围滑动它寻找模板与图像重叠的位置,以便模板中的值与图像中的相似值对齐。
\quad
首先,我们需要决定如何衡量模板与其对齐的图像区域之间的相似性。一种简单而自然的方法是测量模板和图像中值之间差异的平方和。 这随着两者之间的差异增加而增加。 对于过滤器和以
x
x
x 为中心的图像部分之间的差异,我们可以将其写为:
∑
i
=
−
N
N
(
F
(
i
)
−
I
(
x
+
i
)
)
2
=
∑
i
=
−
N
N
(
F
2
(
i
)
−
2
F
(
x
)
I
(
x
+
i
)
+
I
2
(
x
+
i
)
)
=
∑
i
=
−
N
N
F
2
(
i
)
+
∑
i
=
−
N
N
I
2
(
x
+
i
)
−
2
∑
i
=
−
N
N
F
(
x
)
I
(
x
+
i
)
\displaystyle \sum_{i=-N}^N (F(i)-I(x+i))^2 = \displaystyle \sum_{i=-N}^N(F^2(i)-2F(x)I(x+i)+I^2(x+i)) \\ = \displaystyle \sum_{i=-N}^N F^2(i)+\sum_{i=-N}^N I^2(x+i)-2\sum_{i=-N}^N F(x)I(x+i)
i=−N∑N(F(i)−I(x+i))2=i=−N∑N(F2(i)−2F(x)I(x+i)+I2(x+i))=i=−N∑NF2(i)+i=−N∑NI2(x+i)−2i=−N∑NF(x)I(x+i)
\quad 如上所示,我们可以将欧几里得距离分成三部分。 第一部分仅取决于滤波器,这对于图像中的每个像素都是相同的。第二部分是与滤波器重叠的像素值的平方和。而第三部分是 F F F 和 I I I之间相关的负值的两倍。我们可以看到,在所有条件相同的情况下,随着滤波器和图像之间的相关性增加,它们之间的欧几里德距离减小。 这为使用相关将模板与图像匹配提供了一种直觉。 两者之间相关性高的地方往往是过滤器和图像匹配良好的地方。
\quad 这也显示了使用相关来比较模板和图像的弱点之一。在图像像素值的位置,相关性也可能很高,即使它与模板不匹配。以下的一个例子, 假设我们相关滤波器为:
3 | 7 | 5 |
---|
\quad 图像的像素值是:
3 | 2 | 4 | 1 | 3 | 8 | 4 | 0 | 3 | 8 | 0 | 7 | 7 | 7 | 1 | 2 |
---|
\quad 我们得到以下结果:
40 | 43 | 39 | 34 | 64 | 85 | 52 | 27 | 61 | 65 | 59 | 84 | 105 | 75 | 38 | 27 |
---|
\quad 请注意,当我们将滤波器对齐在第六个像素上时,我们得到了很高的结果 85 85 85,因为 ( 3 , 7 , 5 ) (3,7,5) (3,7,5) 与 ( 3 , 8 , 4 ) (3,8,4) (3,8,4) 非常匹配。 但是,最高相关性出现在第 13 个像素处,其中滤波器与 ( 7 , 7 , 7 ) (7,7,7) (7,7,7) 匹配。 尽管这与 ( 3 , 7 , 5 ) (3,7,5) (3,7,5) 不太相似,但其量级更大。
\quad 克服此问题的一种方法是仅使用像素之间的平方差之和,如上所示。 便产生了结果:
25 | 26 | 26 | 41 | 29 | 2 | 59 | 54 | 34 | 26 | 78 | 13 | 20 | 32 | 61 | 38 |
---|
\quad 我们可以看到,使用欧几里得距离, ( 3 , 7 , 5 ) (3,7,5) (3,7,5) 与像素值 ( 3 , 8 , 4 ) (3,8,4) (3,8,4) 的图像部分最匹配。 下一个最佳匹配具有值 ( 0 , 7 , 7 ) (0,7,7) (0,7,7),但这明显更糟。
\quad
另一种选择是通过执行归一化相关来计算:
∑
i
=
−
N
N
(
F
(
i
)
I
(
x
+
i
)
)
∑
i
=
−
N
N
(
I
(
x
+
i
)
)
2
∑
i
=
−
N
N
(
F
(
i
)
)
2
\frac {\displaystyle \sum_{i=-N}^N (F(i)I(x+i))} {\displaystyle \sqrt{\sum_{i=-N}^N (I(x+i))^2} \sqrt{\sum_{i=-N}^N (F(i))^2}}
i=−N∑N(I(x+i))2i=−N∑N(F(i))2i=−N∑N(F(i)I(x+i))
\quad
这种相似度的度量类似于相关性,但它对缩放模板或图像中的相应区域是不变的。 如果我们缩放
I
(
x
−
N
)
⋯
I
(
x
+
N
)
I(x-N) \cdots I(x+N)
I(x−N)⋯I(x+N),通过一个单一的常数因子,这将按相同的量缩放分子和分母。 因此,例如,
(
3
,
7
,
5
)
(3,7,5)
(3,7,5) 与
(
7
,
7
,
7
)
(7,7,7)
(7,7,7) 将具有与
(
1
,
1
,
1
)
(1,1,1)
(1,1,1)相同的归一化相关性。 当我们在
(
3
,
7
,
5
)
(3,7,5)
(3,7,5) 和上图之间执行归一化相关时,我们得到:
.946 | .877 | .934 | .73 | .81 | .989 | .64 | .59 | .78 | .835 | .61 | .931 | .95 | .83 | .57 | .988 |
---|
\quad 现在,与滤波器最匹配的图像区域 ( 3 , 8 , 4 ) (3,8,4) (3,8,4)。 然而,我们在 ( 3 , 7 , 5 ) (3,7,5) (3,7,5) 和图像的末尾之间也得到了很好的匹配,当我们复制边界处的最后一个像素时,它是 ( 1 , 2 , 2 ) (1,2,2) (1,2,2)。 这些实际上非常相似,直到比例因子。 请记住,归一化相关会说 ( 3 , 6 , 6 ) (3,6,6) (3,6,6) 和 ( 1 , 2 , 2 ) (1,2,2) (1,2,2) 完美匹配。 当某些效果(例如照明或相机响应的变化)可能按未知因子缩放图像中的强度时,归一化相关性特别有用。
相关作内积
\quad
一种获得相关和归一化相关更为直观的方法是将这些比较视为基于内积操作。 为此,我们可以将滤波器视为一个向量,
F
=
(
F
(
−
N
)
,
F
(
−
N
+
1
)
…
F
(
N
)
)
F = (F(-N), F(-N+1)…F(N))
F=(F(−N),F(−N+1)…F(N))。 我们将其与图像的一部分进行比较,我们也可以将其视为向量:
I
x
=
(
I
(
x
−
N
)
,
I
(
x
−
N
+
1
)
,
.
.
.
I
(
x
+
N
)
)
I_x =(I(x-N), I(x-N+1), ...I(x+N))
Ix=(I(x−N),I(x−N+1),...I(x+N))。 然后,当我们计算位置
x
x
x 处
F
F
F 和
I
I
I之间的相关时,我们正在计算
<
F
,
I
x
>
<F, I_x >
<F,Ix>。
F
F
F 和
I
x
I_x
Ix是
(
2
N
+
1
)
(2N+1)
(2N+1) 维空间中的向量,我们学到的关于内积的所有内容仍然适用。 特别是,
<
F
,
I
x
>
=
∥
F
∥
∥
I
x
∥
c
o
s
θ
<F,I_x> = \parallel F \parallel \parallel I_x \parallel cos\theta
<F,Ix>=∥F∥∥Ix∥cosθ
\quad
其中
θ
\theta
θ是
F
F
F 和
I
x
I_x
Ix 之间的夹角。 这意味着两者之间的相关性取决于每个向量的大小以及它们之间的角度。 对于固定幅度的
F
F
F和
I
x
I_x
Ix,当它们之间的角度为零时,
F
F
F 和
I
x
I_x
Ix 是彼此同向,它们之间的相关性最大。 随着它们之间的角度增加,相关性降低。 归一化相关是相关除以
∥
F
∥
\parallel F \parallel
∥F∥和
∥
I
x
∥
\parallel I_x \parallel
∥Ix∥,所以它只计算
c
o
s
θ
cos \theta
cosθ。 所以归一化相关只计算
F
F
F和
I
x
I_x
Ix 之间的角度。 如果我们对它们的大小是否相似不感兴趣,这可以很好地衡量它们的相似性。
二维相关
\quad 图像是二维的,所以我们大多数情况下在二维中执行相关。 基本思想是相同的,只是图像和滤波器现在是二维的。我们可以假设滤波器是方形的,并且有奇数个元素,因此它由一个 ( 2 N + 1 ) × ( 2 N + 1 ) (2N+1) \times (2N+1) (2N+1)×(2N+1) 矩阵表示。 我们不会因为这些假设而失去任何东西,因为我们可以采用任何滤波器并用零填充它以使其具有奇数宽度的正方形,用零填充滤波器不会改变其行为。
\quad
给定一个方形滤波器,我们可以通过将滤波器的中心与像素对齐来计算相关结果。 然后我们将所有重叠的值相乘,并将结果相加。 我们可以这样写:
F
∘
I
(
x
)
=
∑
j
=
−
N
N
∑
i
=
−
N
N
F
(
i
,
j
)
I
(
x
+
i
,
y
+
j
)
F \circ I(x) = \displaystyle \sum_{j=-N}^N\sum_{i=-N}^NF(i,j)I(x+i,y+j)
F∘I(x)=j=−N∑Ni=−N∑NF(i,j)I(x+i,y+j)
\quad
示例:我们可以使用二维框式滤波器对二维图像进行平均,对于
3
×
3
3 \times 3
3×3 滤波器,可表示为:
1/9 | 1/9 | 1/9 |
---|---|---|
1/9 | 1/9 | 1/9 |
1/9 | 1/9 | 1/9 |
\quad
下面我们展示了一个图像
I
I
I,以及将上面的框式滤波器应用于
I
I
I以生成结果图像
J
J
J 的结果。
\quad
可分离滤波器:通常,
2
D
2D
2D 相关比
1
D
1D
1D相关更耗时,因为我们使用的滤波器尺寸更大。 例如,如果我们的滤波器大小为
(
N
+
1
)
×
(
N
+
1
)
(N+1)\times(N+1)
(N+1)×(N+1),并且我们的图像包含
M
×
M
M\times M
M×M个像素,那么我们必须执行的乘法总数为
(
N
+
1
)
2
M
2
(N+1)^2M^2
(N+1)2M2。 然而,使用一类重要的滤波器,我们可以节省这个计算。 这些是可分离的滤波器,可以写成两个较小滤波器的组合。 例如,在框式滤波器的情况下,我们有:
[
1
9
1
9
1
9
1
9
1
9
1
9
1
9
1
9
1
9
]
=
[
0
1
3
0
0
1
3
0
0
1
3
0
]
∘
[
0
0
0
1
3
1
3
1
3
0
0
0
]
\left[ \begin{array}{cccc} \frac{1}{9} & \frac{1}{9} & \frac{1}{9}\\ \frac{1}{9} & \frac{1}{9} & \frac{1}{9}\\ \frac{1}{9} & \frac{1}{9} & \frac{1}{9}\\ \end{array} \right] = \left[ \begin{array}{cccc} 0 & \frac{1}{3} & 0\\ 0 & \frac{1}{3} & 0\\ 0 & \frac{1}{3} & 0\\ \end{array} \right] \circ \left[ \begin{array}{cccc} 0 & 0 & 0\\ \frac{1}{3} & \frac{1}{3} & \frac{1}{3}\\ 0 & 0 & 0\\ \end{array} \right]
⎣⎡919191919191919191⎦⎤=⎣⎡000313131000⎦⎤∘⎣⎡031003100310⎦⎤
\quad
也就是说,框式滤波器等于具有相等值的行和列的两个滤波器的相关,并且所有其他值都为零(这里我们通过使用边界外的 0 值来处理边界)。 在这种情况下,将图像与框式滤波器相关产生的结果与将其与等号右侧的两个滤波器单独相关产生的结果相同。 直觉上,这是有道理的。 与最右边的滤波器相关平均每个像素与其在同一行上的临近像素。 然后第二个相关将这些结果像素与同一列中的那些临近像素平均,这些临近像素已经是同一行上临近像素的平均值。 这会产生一个所有相邻像素的平均值。
\quad 用这种方式分离滤波器的好处是,当我们对右边的矩阵执行相关操作时,我们实际上不需要在有零的地方执行任何乘法。 事实上,将这些滤波器忽略零后,可简单地表示为 3 × 1 3\times 1 3×1 和 1 × 3 1\times 3 1×3滤波器。 这意味着对于上面图像中的每个像素,我们只需要执行 6 次乘法而不是 9 次。 一般来说,如果我们可以将一个 ( N + 1 ) × ( N + 1 ) (N+1)\times(N+1) (N+1)×(N+1)滤波器分成 1 × ( N + 1 ) 1\times(N+1) 1×(N+1)和 1 × ( N + 1 ) 1\times(N+1) 1×(N+1)的这样两个滤波器,我们必须在相关方面做的计算量从 ( N + 1 ) 2 M 2 (N+1)^2M^2 (N+1)2M2 减少到 2 ( N + 1 ) M 2 2(N+1)M^2 2(N+1)M2。
\quad
高斯滤波具有相同的可分离性。 对于
2
D
2D
2D高斯函数,我们使用旋转对称的函数,其中滤波器的高度下降为距中心距离的高斯函数。 这具有以下形式:
G
0
(
x
,
y
)
=
1
σ
2
π
e
x
p
(
−
(
x
2
+
y
2
)
2
σ
2
)
G_0(x,y) = \frac{1}{\sigma\sqrt{2\pi}}exp({\frac{-(x^2+y^2)}{2\sigma^2}})
G0(x,y)=σ2π1exp(2σ2−(x2+y2))
\quad
这可以分开,因为它可以表示为:
G
0
(
x
,
y
)
=
1
σ
2
π
e
x
p
(
−
(
x
2
+
y
2
)
2
σ
2
)
=
1
σ
2
π
e
x
p
(
−
x
2
2
σ
2
)
e
x
p
(
−
y
2
2
σ
2
)
G_0(x,y) = \frac{1}{\sigma\sqrt{2\pi}}exp({\frac{-(x^2+y^2)}{2\sigma^2}}) = \frac{1}{\sigma\sqrt{2\pi}}exp({\frac{-x^2}{2\sigma^2}})exp({\frac{-y^2}{2\sigma^2}})
G0(x,y)=σ2π1exp(2σ2−(x2+y2))=σ2π1exp(2σ2−x2)exp(2σ2−y2)
\quad
它是两个分量的乘积,其中一个只取决于
x
x
x,而另一个只取决于
y
y
y。 第一项可以用具有单行的滤波器来表示,第二项可以用具有单列的滤波器来表示。
卷积
\quad
卷积和相关非常相像,除了我们需要在卷积之前翻转滤波器。 例如,一维图像与滤波器
(
3
,
7
,
5
)
(3,7,5)
(3,7,5) 的卷积与滤波器
(
5
,
7
,
3
)
(5,7,3)
(5,7,3) 的相关完全相同。 我们可以把这个公式写成:
F
∗
I
(
x
)
=
∑
i
=
−
N
N
F
(
i
)
I
(
x
−
i
)
F * I(x) = \displaystyle\sum_{i=-N}^NF(i)I(x-i)
F∗I(x)=i=−N∑NF(i)I(x−i)
\quad
在
2
D
2D
2D卷积的情况下,我们水平和垂直翻转滤波器。 这可以写成:
F
∗
I
(
x
)
=
∑
j
=
−
N
N
∑
i
=
−
N
N
F
(
i
,
j
)
I
(
x
−
i
,
y
−
j
)
F * I(x) = \displaystyle \sum_{j=-N}^N\sum_{i=-N}^NF(i,j)I(x-i,y-j)
F∗I(x)=j=−N∑Ni=−N∑NF(i,j)I(x−i,y−j)
\quad
当滤波器对称时,相关和卷积操作的结果是相同的。
\quad 两者之间的主要区别在于卷积是关联的。 也就是说,如果 F F F 和 G G G是滤波器,则 F ∗ ( G ∗ I ) = ( F ∗ G ) ∗ I F*(G*I) = (F*G)*I F∗(G∗I)=(F∗G)∗I。 如果您不相信这一点,请尝试一个简单的示例,例如使用 F = G = ( − 1 , 0 , 1 ) F=G=(-1 ,0, 1) F=G=(−1,0,1), 让卷积具有关联性非常方便。 例如,假设我们想要平滑图像,然后取其导数。 我们可以通过使用高斯滤波器对图像进行卷积,然后使用导数滤波器对其进行卷积来实现。 但我们也可以将导数滤波器与高斯卷积以产生称为高斯差分 (DOG) 的滤波器,然后将其与我们的图像卷积。 这样做的好处是可以预先计算 D O G DOG DOG滤波器,我们只需要将一个滤波器与我们的图像进行卷积。
\quad 通常,人们使用卷积进行平滑等图像处理操作,并使用相关将模板与图像进行匹配。 然后,我们不介意相关不是关联性的,因为将两个模板合并为一个具有相关性的模板并没有真正意义,而我们可能经常希望将两个滤波器组合在一起进行卷积。 在讨论傅里叶级数作为理解滤波的一种方式时,我们将使用卷积,这样我们就可以介绍著名的卷积定理。
傅立叶级数
\quad 傅立叶级数为我们提供了一种非常重要且有用的表示图像的方式。 尽管它可表示的原因有很多,但我们将主要介绍它作为理解卷积效果的一种方式。 首先,我们将通过查看熟悉的图像表示来考虑一个好的图像表示应该具有哪些属性。 然后我们将描述具有这些性质的傅立叶级数。最后,我们将描述卷积定理,这有助于我们更好地理解不同滤波器卷积的效果。
向量的正交基
\quad
我们如何在
2
D
2D
2D中表示点? 使用它们的
x
x
x和
y
y
y 坐标。 这真正意味着我们将任何点写为两个向量
(
1
,
0
)
(1,0)
(1,0) 和
(
0
,
1
)
(0,1)
(0,1) 的线性组合。
(
x
,
y
)
=
x
(
1
,
0
)
+
y
(
0
,
1
)
(x,y) = x(1,0) + y(0,1)
(x,y)=x(1,0)+y(0,1)
\quad
这些向量形成平面的正交基。 这意味着它们是正交的(即垂直的),
<
(
1
,
0
)
,
(
0
,
1
)
>
=
0
<(1,0), (0,1)> = 0
<(1,0),(0,1)>=0,并且具有单位幅度。 为什么正交基是一个很好的表示? 原因有很多,但有两个比较重要:
- 投影: 为了找到 x x x 坐标,我们取 < ( x , y ) , ( 1 , 0 ) > <(x,y), (1,0)> <(x,y),(1,0)>。 一般来说,当我们有一个空间的正交基时,我们可以用坐标来描述任何点,并通过与该坐标的基向量进行内积求出该点的每个坐标。
- 勾股定理: ∣ ∣ ( x , y ) ∣ ∣ 2 = x 2 + y 2 ||(x,y)||^2 = x2 + y2 ∣∣(x,y)∣∣2=x2+y2。 当我们有一个标准正交基时,向量的平方长度是它在该基中坐标的平方和。
\quad
一个不太好的向量基的例子,假设我们使用两个基础向量 (1,0) 和 (1,1) 来表示点。 它们不是正交的,因为
<
(
1
,
0
)
,
(
1
,
1
)
>
=
1
<(1,0),(1,1)> = 1
<(1,0),(1,1)>=1。不过,给定任何点
(
x
,
y
)
(x,y)
(x,y),我们总是可以将其表示为:
(
x
,
y
)
=
u
(
1
,
0
)
+
v
(
1
,
1
)
(x,y) = u(1,0) + v(1,1)
(x,y)=u(1,0)+v(1,1)
\quad
对于
u
u
u 和
v
v
v 的一些选择。我们可以通过取
v
=
y
,
u
=
x
–
y
v = y, u = x – y
v=y,u=x–y 来计算 u 和 v。 例如,我们将点
(
7
,
3
)
(7,3)
(7,3)表示为
4
(
1
,
0
)
+
3
(
1
,
1
)
4(1,0) + 3(1,1)
4(1,0)+3(1,1)。 因此,与其用欧几里得坐标
(
7
,
3
)
(7,3)
(7,3) 表示点,我们可以用坐标
(
4
,
3
)
(4,3)
(4,3) 在这个新基中表示同一点。 但请注意,勾股定理不成立。 而且,如果我给你两个不正交的基向量,那么想出一个使用这些基向量来确定点坐标的公式并不容易(尤其是当我们看到更高的维度时)。
傅立叶级数
\quad 傅立叶级数是一种很好的表示,因为它为图像提供了正交基础。 我们想在最简单的环境中探索它,以获得关键的直觉。 这是一种通过使用连续函数而不是离散函数更容易获得想法的情况。 因此,与其将图像视为像素列表,不如将其视为连续函数 I ( x ) I(x) I(x)。 为简化起见,我们也只会在 1 D 1D 1D中做事,但这一切都扩展到了 2 D 2D 2D图像。 我们还将只考虑从 0 0 0 到 2 π 2\pi 2π 的周期函数,然后一遍又一遍地重复。 这相当于我们上面描述的第三种处理图像边界外像素的方法。 不过,为了让事情变得更容易,我要做的主要事情是在数学上非常草率,跳过精确的条件并给出直觉而不是完整的证明。
\quad
以下函数为函数提供了标准正交基:
1
2
π
,
c
o
s
(
k
x
)
π
,
s
i
n
(
k
x
)
π
f
o
r
k
=
1
,
2
,
3
⋯
\frac{1}{\sqrt{2\pi}},\frac{cos(kx)}{\sqrt{\pi}},\frac{sin(kx)}{\sqrt{\pi}} \quad for \quad k=1,2,3 \cdots
2π1,πcos(kx),πsin(kx)fork=1,2,3⋯
\quad
这些函数形成傅立叶级数。 第一个是常数函数,其他的只是频率增加的正弦和余弦。
\quad
要定义一组函数是否正交,我们需要定义两个函数之间的内积。 我们使用内积的连续版本来做到这一点。 对于离散向量,为了计算内积,我们将匹配坐标的值相乘,然后将结果相加。 我们对连续函数做同样的事情; 我们将它们相乘,然后对结果进行积分(相加)。 因此,定义在
0
0
0 到
2
π
2\pi
2π域中的两个函数
f
(
x
)
f(x)
f(x) 和
g
(
x
)
g(x)
g(x) 之间的内积是:
<
f
,
g
>
=
∫
0
2
π
f
(
x
)
g
(
x
)
d
x
<f,g> = \int_0^{2\pi} f(x)g(x)dx
<f,g>=∫02πf(x)g(x)dx
\quad
当我们说一个函数
f
f
f 具有单位幅度时,我们的意思是
<
f
,
f
>
=
1
<f,f> = 1
<f,f>=1。当我们说两个函数是正交的时,我们的意思是
<
f
,
g
>
=
0
<f,g> = 0
<f,g>=0。这是合理定义的一个原因是,如果我们通过采样函数的值来近似一个函数,并将它们构建成一个向量,那么连续情况下的定义给我们的结果与我们在离散情况下对函数进行了更多并且更密集采样得到的极限相同。
\quad 我们可以使用这个定义来证明傅立叶级数中的函数具有单位幅度,通过取每个函数与自身的内积,并证明这等于 1 1 1。我们可以通过证明它们的内积来证明它们是正交的彼此都是零。当然这样做需要求解三角函数的一些积分。
\quad
为了证明傅立叶级数为所有函数形成了一个良好的坐标系,我们还必须证明我们可以将任何函数表示为傅立叶级数元素的线性组合。也就是说,我们必须证明对于任何函数
f
f
f,我们可以写成:
f
(
x
)
=
a
0
1
2
π
+
∑
k
=
1
∞
(
b
k
c
o
s
(
k
x
)
π
+
a
k
s
i
n
(
k
x
)
π
)
f
o
r
k
=
1
,
2
,
⋯
f(x) = a_0\frac{1}{\sqrt{2\pi}}+ \displaystyle\sum_{k=1}^\infty (b_k \frac{cos(kx)}{\sqrt{\pi}} + a_k\frac{sin(kx)}{\sqrt{\pi}}) \quad for \quad k = 1,2,\cdots
f(x)=a02π1+k=1∑∞(bkπcos(kx)+akπsin(kx))fork=1,2,⋯
\quad
然后值
(
a
0
,
b
1
,
a
1
,
b
2
,
a
2
,
⋯
)
(a0, b1, a1, b2, a2, \cdots)
(a0,b1,a1,b2,a2,⋯) 是函数在傅立叶级数提供的这个新坐标系中的坐标。 这是一个非常重要的事实,但我们将在这里跳过证明。 请记住,我遗漏了一些必要条件,例如这仅在
f
f
f是连续函数时才有效。
\quad 这个结果意味着任何函数都可以分解为不同幅度和相位的正弦波的和。我们说由较长频率正弦波引起的函数部分是函数的低频部分,由高频正弦波引起的部分是函数的高频分量。如果一个函数非常颠簸,它的值有很小的快速变化,这些快速变化将是函数的高频分量引起的。如果我们能够消除这些高频成分,我们可以使函数更平滑。
傅立叶级数正交性的含义
\quad 与向量的正交基一样,傅立叶级数的正交性意味着我们可以使用投影和勾股定理(的推广)。
\quad
我们可以通过取内积来求解值
(
a
0
,
b
1
,
a
1
,
b
2
,
a
2
,
⋯
)
(a0, b1, a1, b2, a2, \cdots)
(a0,b1,a1,b2,a2,⋯)。 所以:
a
0
=
<
f
,
1
2
π
>
=
∫
0
2
π
f
(
x
)
2
π
d
x
b
k
=
<
f
,
c
o
s
(
k
x
)
π
>
=
∫
0
2
π
f
(
x
)
c
o
s
(
k
x
)
π
d
x
a
k
=
<
f
,
s
i
n
(
k
x
)
π
>
=
∫
0
2
π
f
(
x
)
s
i
n
(
k
x
)
π
d
x
a_0=<f,\frac{1}{\sqrt{2\pi}}>=\int_0^{2\pi}\frac{f(x)}{\sqrt{2\pi}}dx \qquad \qquad b_k=<f,\frac{cos(kx)}{\sqrt{\pi}}>=\int_0^{2\pi}\frac{f(x)cos(kx)}{\sqrt{\pi}}dx \qquad \qquad a_k=<f,\frac{sin(kx)}{\sqrt{\pi}}>=\int_0^{2\pi}\frac{f(x)sin(kx)}{\sqrt{\pi}}dx
a0=<f,2π1>=∫02π2πf(x)dxbk=<f,πcos(kx)>=∫02ππf(x)cos(kx)dxak=<f,πsin(kx)>=∫02ππf(x)sin(kx)dx
\quad
毕达哥拉斯定理(勾股定理)的类似物称为帕塞瓦尔定理。 这是:
∫
0
2
π
f
2
(
x
)
d
x
=
a
0
2
+
∑
1
∞
(
a
i
2
+
b
i
2
)
\int_0^{2\pi}f^2(x)dx = a_0^2 + \displaystyle \sum_1^\infty(a_i^2+b_i^2)
∫02πf2(x)dx=a02+1∑∞(ai2+bi2)
卷积定理
\quad 现在我们明白为什么傅里叶级数在理解卷积中很重要。 设 F 、 G 、 H F、G、H F、G、H 是表示函数 f 、 g f、g f、g 和 h h h 的傅立叶级数。 也就是说, F 、 G F、G F、G和 H H H是无限向量。卷积定理指出,空间域中的卷积等价于变换域中的逐分量乘法,即 f ∗ g = h e q u a l s F G = H f*g = h \quad equals \quad FG = H f∗g=hequalsFG=H。这里, F G FG FG的意思是我们将 F F F 的每个元素乘以 G G G的相应元素,并将其用作 H H H 的元素。
\quad 这是一个非常有用的定理。 作为其重要性的一个示例,假设我们将滤波器 F F F与图像 I I I进行卷积,并且 F F F 仅由单个正弦波 F = s i n ( x ) F=sin(x) F=sin(x) 组成。 那么 F F F 的傅立叶级数表示为: a 1 = π a_1 = \sqrt{\pi} a1=π , 所有其他元素都为0。
\quad 这意味着无论 I I I 是什么,如果我们定义 J = F ∗ I J=F*I J=F∗I,那么 J J J的傅立叶级数的分量除了 a 1 a1 a1都将为零,因为 F F F 的所有其他分量都是 0 0 0,当我们将这些乘以 I I I的对应分量我们总是得到 0 0 0。更一般地说,这意味着带滤波器的卷积对每个频率的衰减量不同,我们可以通过找到卷积核的傅立叶级数来理解卷积的影响。
\quad 作为另一个重要的例子,我们指出高斯的傅立叶级数表示也是高斯的。 如果 g ( t ) g(t) g(t) 是高斯分布,则 g g g越宽, G G G 越窄(反之亦然)。这意味着使用高斯平滑减少了信号的高频分量。 我们越平滑,就越能减少高频分量。事实上,衰减信号的高频分量可以看作是平滑的定义。 在某种程度上,这就是我们学习傅立叶级数的原因,它使我们能够了解平滑的真正作用。
\quad
我们还可以看到为什么简单平均不是一种很好的平滑方法。 设
f
(
x
)
f(x)
f(x)是一个平均滤波器,它在 –T 到 T 的范围内是常数。然后,我们可以计算它的傅立叶级数为:
a
0
=
∫
−
T
T
1
2
π
d
x
=
2
T
2
π
b
k
=
∫
−
T
T
c
o
s
(
k
x
)
π
d
x
=
2
c
o
s
(
k
T
)
k
π
a
k
=
∫
−
T
T
s
i
n
(
k
x
)
π
d
x
=
−
2
s
i
n
(
k
T
)
k
π
a_0=\int_{-T}^{T}\frac{1}{\sqrt{2\pi}}dx = \frac{2T}{\sqrt{2\pi}} \\ b_k=\int_{-T}^{T}\frac{cos(kx)}{\sqrt{\pi}}dx = \frac{2cos(kT)}{k\sqrt{\pi}} \\ a_k=\int_{-T}^{T}\frac{sin(kx)}{\sqrt{\pi}}dx= \frac{-2sin(kT)}{k\sqrt{\pi}}
a0=∫−TT2π1dx=2π2Tbk=∫−TTπcos(kx)dx=kπ2cos(kT)ak=∫−TTπsin(kx)dx=kπ−2sin(kT)
\quad
这称为 sinc函数。 如果我们绘制它,我们会看到它看起来像:
\quad
这不像高斯函数衰减得那么快。 它的振荡也产生奇怪效果。 由于这些振荡,图像的一些高频分量将被平均消除,而一些类似的高频分量仍然存在。
混叠和采样定理
\quad
采样意味着我们知道函数
f
f
f在离散间隔
f
(
n
π
T
)
f(\frac{n\pi}{T})
f(Tnπ) 对于
n
=
0
、
±
1
、
±
T
n = 0、\pm1、\pm T
n=0、±1、±T 的值。 也就是说,我们有
2
T
+
1
2T + 1
2T+1个
f
(
x
)
f(x)
f(x) 的均匀样本,假设
f
f
f 是一个周期函数。 现在假设
f
f
f 的频带受限于
T
T
T,这意味着,
f
(
x
)
=
a
0
1
2
π
+
∑
k
=
1
∞
(
b
k
c
o
s
(
k
x
)
π
+
a
k
s
i
n
(
k
x
)
π
)
f(x) = a_0\frac{1}{\sqrt{2\pi}}+ \displaystyle\sum_{k=1}^\infty (b_k \frac{cos(kx)}{\sqrt{\pi}} + a_k\frac{sin(kx)}{\sqrt{\pi}})
f(x)=a02π1+k=1∑∞(bkπcos(kx)+akπsin(kx))
\quad
我们知道
f
(
x
)
f(x)
f(x) 在
2
T
+
1
2T + 1
2T+1 个位置的值。 如果我们将这些值代入上述方程,我们得到
2
T
+
1
2T + 1
2T+1个方程。
a
i
a_i
ai 和
b
i
b_i
bi给我们
2
T
+
1
2T + 1
2T+1 个未知数。 这些是线性方程, 所以我们得到了一个独特的解决方案。 这意味着我们可以从它的样本中重建
f
f
f。 但是,如果我们的样本较少,则无法进行重建。 如果有更高的频率分量,那么这会对我们对所有低频分量的重建造成严重破坏,并被解释为奇怪的低频分量。
\quad 这意味着如果我们想对信号进行采样,我们能做的最好的事情就是对其进行低通滤波,然后对其进行采样。 然后,我们得到一个在低频分量上与我们的原始信号完美匹配的信号,这是我们所能做的最好的事情。 事实上,为了缩小图像,我们对它们进行低通滤波,然后对它们进行采样。
翻译自 :Correlation and Convolution - Class Notes for CMSC 426, Fall 2005 David Jacobs