卷积与相关之间的区别
相关性是一种数学技术,用于查看两件事的相关程度。在图像处理术语中,它用于计算掩码对图像的响应。掩码从左到右应用于矩阵。掩码每次在矩阵上从左到右滑动一个单位。一旦掩码到达最右端,掩码向下滑动一个单位,并再次从左到右开始。计算的输出分配给中心像素,而邻域像素也用于计算。掩模或矩阵可以是一维或二维的。通常,掩码的尺寸取奇数,这样可以很容易地找到中心像素。
Illustration:
Image, I = [100, 120, 100, 150, 160]Indexes of the image are 0, 1, 2, 3 and 4.
Mask, H = [1/3, 1/3, 1/3]Indexes of the mask are -1, 0 and 1.
Apply correlation between image and mask at index=2 in the image.
J(2) = I(1) . H(-1) + I(2) . H(0) + I(3) . H(1)Indexes are represented in the parentheses.
J(2) = 120 x 1/3 + 100 x 1/3 + 150 x 1/3
J(2) = 370/3
In general, J = I . H
Correlation is denoted by (.)
一维相关的公式:
二维相关的公式:
笔记:
- 结果图像的大小取决于填充。
- 如果允许填充,则结果图像的大小 = 原始图像的大小(输入)
- 如果不允许填充,则结果图像的大小 < 输入图像的大小。
卷积也是一种数学工具,用于组合两个事物以产生结果。在图像处理中,卷积是我们通过以像素方式在输入图像上应用内核来转换输入图像的过程。当卷积掩码对特定像素进行操作时,它会通过考虑该像素及其相邻像素来执行操作,并将结果返回给该特定像素。因此,我们得出结论,图像处理中的卷积是掩码运算符。
如何进行卷积
1.翻转掩码并进行相关。
2. 一维蒙版是水平翻转的,因为只有一行。
3. 2D蒙版上下左右翻转。
4. 蒙版从左到右在图像矩阵上滑动。
5、当蒙版悬停在图像上时,蒙版和图像对应的元素相乘,相加。
6. 这个过程对图像的所有像素重复。
图像处理中有两种类型的运算符。
- 点运算符:在对特定像素进行操作时,它只需要一个像素作为其自身的输入。例如亮度增加操作。我们将每个像素的强度增加相同的值以增加图像的亮度。
- 掩码运算符:在对特定像素执行操作时,它将特定像素及其相邻像素作为输入。卷积运算。
Illustration:
Image, I = [100, 120, 100, 150, 160]
Indexes of the image are 0, 1, 2, 3 and 4.
Mask used for correlation, H = [1/3, 1/3, 1/3]
Indexes of the mask are -1, 0 and 1.
We are using same mask not the flipped one, hence we shall use the indexes properly.
Apply convolution between image and mask at index=1 in the image.
J(2) = I(0) . H(1) + I(1) . H(0) + I(2) . H(-1)Indexes are represented in the parentheses.
J = I * H
Convolution is denoted by (*).
Size of resultant image follows same as in case of correlation.
一维卷积的公式:
2D卷积的公式:
注意:如果掩模是对称的,卷积和相关给出相同的响应。相关性和卷积本质上看起来相似。但是我们在图像处理中广泛使用卷积,因为它具有以下特性。
卷积的性质
- 卷积本质上是关联的,但不是相关的。 IE
- 卷积本质上是可交换的。 IE
- 卷积遵循线性。 IE 其中 s 是任何常数并乘以掩码或图像。
- 如果掩码是可分离的,则卷积遵循可分离性。即如果
可分离性的优点
如果内核是可分离的,那么它可以节省计算成本。
第 1 步:矩阵初始化在 Matlab 中一行完成,
矩阵的顺序无关紧要。
K = [1, 2, 3; 2, 4, 5];
第 2 步: MatLab 内置方法用于创建矩阵:
H = ones(3,3).*1/9;
第 3 步:我们在 * 之前使用了 (.),因为 (.) 意味着我们将 (3, 3) 矩阵的所有元素乘以 1/9。
将 1 阶线性掩码初始化为 3:
H1=ones(1,3).*1/3;
初始化转置掩码,它与主掩码分开:
H2=H1'
第 4 步:使用 Matlab 内置函数“conv2”应用矩阵 K 和掩码 H 之间的卷积
KH = conv2(K, H, 'same');
步骤 5:矩阵 K 和掩码 H1 之间的卷积:
KH1 = conv2(K, H1, 'same');
第 6 步:结果矩阵 KH1 和掩码 H2 之间的卷积:
KH2 = conv2(KH1, H2, 'same');
例子:
Matlab
% MATLAB Code for separable mask
% D convolution
% Define the matrix.
K=[9 18 9 27 36;
81 9 45 54 9;
36 18 63 72 9];
% Define the averaging mask.
H = ones(3,3).*1/9;
% Separate the mask.
H1 = ones(1,3).*1/3;
% Transpose of separated mask.
H2 = H1';
% Perform the same convolution.
KH = conv2(K,H,'same')
KH1 = conv2(K,H1,'same')
KH2 = conv2(KH1,H2,'same')
输出:
代码说明:
- 首先,我们定义矩阵图像。
- 创建矩阵后,我们定义主平均掩码,命名为 H。
- 定义了可分离掩码 H1 和 H2。
- 第二个掩码是掩码 1 的转置。
- 矩阵 K 和掩码 H 之间的卷积在 KH 变量中计算。
- 矩阵 K 和掩码 H1 之间的卷积存储在 KH1 变量中。
- KH2 = conv2(KH1, H2, '相同');这条线应用了结果矩阵 KH1 和掩码 H2 之间的卷积。
这个结果与 KH 相同。