MATLAB中的卷积形状
卷积是一种数学运算。它被用于MatLab中的图像处理。掩码/过滤器用于卷积图像,以实现图像检测的目的。但是MatLab提供了三种类型的卷积。这里我们将解释一下简单的卷积。
滤波器在图像矩阵上从左到右滑动。矩阵和滤波器的相应数值被相乘并加在一起。滤波器中心值下的矩阵值被卷积操作的结果所取代。
根据在矩阵上滑动的滤波器的性质,MatLab有三种不同类型的卷积。
示例 1:
给定一个图像矩阵:
1st row->[1 2 4]
2nd row->[2 1 3]
3rd row->[3 2 1]
给定过滤器:
1st row->[1 0 1]
2nd row->[1 0 1]
3rd row->[1 0 1]
在这里,我们将应用 "相同的 "卷积。
结果的矩阵是:
[3 10 3]
[5 14 5]
[3 9 3]
相同的卷积
现在我们看到的是相同的卷积。所以在这种卷积中,结果矩阵的大小与输入矩阵的大小相同。滤波器/掩码的中心被放在第一行的第一个元素上。然后,滤波器从左到右在矩阵上滑动。一旦某一行被覆盖,滤波器就会向下滑动到下一行,并从左边移到右边。当过滤器挂在矩阵外时,矩阵被填充了0。
注意: 输出矩阵的大小=输入矩阵的大小。
例1:平均卷积
Matrix (3, 4):
1st row->[1 5 2 3]
2nd row->[6 7 10 2]
3rd row->[8 4 10 6]
Averaging Filter (3, 3):
1st row->[0.1111 0.1111 0.1111]
2nd row->[0.1111 0.1111 0.1111]
3rd row->[0.1111 0.1111 0.1111]
Same Convolution result (3, 4):
1st row->[2.1111 3.4444 3.2222 1.8889]
2nd row->[3.4444 5.8889 5.4444 3.6667]
3rd row->[2.7778 5.0000 4.3333 3.1111]
例2:正常卷积
Matrix (3, 4):
Row1->[1 5 2 3]
Row2->[6 7 10 2]
Row3->[8 4 10 6]
Normal Filter (3,3):
Row1->[1 1 1]
Row2->[0 0 0]
Row3->[-1 -1 -1]
Same Convolution result:
Row1->[13 23 19 12]
Row2->[6 14 10 11]
Row3->[-13 -23 -19 -12]
让我们以Same卷积为例,在其上应用蒙版。
示例:
% MATLAB code for Same Convolution
% Matrix initialisation;
K = [1 5 2 3;
6 7 10 2;
8 4 10 6];
% Averaging mask creation
mask1=ones(3,3).*1/9;
% Result-1
R1=conv2(K,mask1,'same');
% Random mask
mask2=[1 1 1;
0 0 0;
-1 -1 -1];
% Result-2
R2=conv2(K,mask2,'same');
% Show matrix-K, mask1 and result-1
K
mask1
R1
% Show matrix-K, mask2 and result-2
K
mask2
R2
输出 1:
输出 2:
有效的卷积
在这种类型的卷积中,结果矩阵的大小减少。滤波器/掩膜被放置在矩阵上,使滤波器的任何部分都不挂在外面。滤波器完全悬浮在矩阵上,然后在行中从左到右滑动,在列中从上到下滑动。
示例:
Matrix (3, 4):
Row 1->[1 5 2 3]
Row 2->[6 7 10 2]
Row 3->[8 4 10 6]
Filter (3,3):
Row 1->[1 1 1]
Row 2->[0 0 0]
Row 3->[-1 -1 -1]
Valid Convolution result:
[14 10]
Number of rows in output matrix = (3 - 3 + 1) = 1
Number of columns in output matrix = (4 - 3 + 1) = 2
示例:
% MATLAB code for
% Valid convolution.
% Define matrix -1
matrix1 =[1 2 4 3;
2 1 3 5;
3 2 1 6;
2 3 4 9];
% Define mask1
mask1=[1 1 1;
0 0 0;
1 1 1];
% Apply valid convolution.
result1=conv2(matrix1,mask1,'valid');
% Show matrix, mask and result.
matrix1
mask1
result1
% Define mat-2
matrix2=[1 5 2 3;
6 7 10 2;
8 4 10 6];
% Define mask2
mask2=[1 1 1;
0 0 0;
-1 -1 -1];
% Apply valid convolution.
result2=conv2(matrix2,mask2,'valid');
% Show matrix, mask and result.
matrix2
mask2
result2
输出 1:
输出 2:
全卷积
在这种类型的卷积中。
- 滤波器的第一个右底将悬停在矩阵的左上角元素。它们的乘积将被计算出来。其余的过滤器元素将被乘以0,因为矩阵默认情况下是用0来填充的。如果我们使用的是平均过滤器,那么将计算出乘积的平均值。
- 滤波器的底行将在矩阵上从左到右方向滑动。第一行的最后一个操作将在过滤器底行的最左边的元素悬停在矩阵第一行的最右边的元素时被计算。
- 因此,在滑动第1行后,过滤器将下降一个台阶,并再次重复相同的步骤。
- 滤波器将滑动,直到其第一行(顶部)悬停在矩阵的最后一行(底部)。然后将从左到右滑动,直到过滤器的最左边的元素悬停在矩阵的最后一行的最右边的元素上。
示例 1:
Input matrix:
1st row->[1 2 4 3]
2nd row->[2 1 3 5]
3rd row->[3 2 1 6]
4th row->[2 3 4 9]
Filter:
1st row->[1 0 1]
2nd row->[0 1 0]
3rd row->[1 0 1]
Resultant matrix:
1st row->[1 2 5 5 4 3]
2nd row->[2 2 7 10 6 5]
3rd row->[4 6 10 16 10 9]
4th row->[4 7 13 19 13 14]
5th row->[3 4 7 12 10 6]
6th row->[2 3 6 12 4 9]
示例 2:
Matrix (3, 4):
[1 5 2 3]
[6 7 10 2]
[8 4 10 6]
Filter (3,3):
[1 1 1]
[0 0 0]
[-1 -1 -1]
Full convolution result:
[1 6 8 10 5 3]
[6 13 23 19 12 2]
[7 6 14 10 11 3]
[-6 -13 -23 -19 -12 -2]
[-8 -12 -22 -20 -16 -6]
Rows = (3 + 3 -1) = 5
Columns = (4 + 3 - 1) = 6
示例:
% MATLAB code of
% FULL convolution.
% Define mat-1
matrix1=[1 2 4 3;
2 1 3 5;
3 2 1 6;
2 3 4 9];
% Define mask1
mask1=[1 0 1;
0 1 0;
1 0 1];
% Apply FULL convolution.
result1=conv2(matrix1,mask1,'full');
% Show matrix, mask and result.
matrix1
mask1
result1
% Define mat-2
matrix2=[1 5 2 3;
6 7 10 2;
8 4 10 6];
% Define mask2
mask2=[1 1 1;
0 0 0;
-1 -1 -1];
% Apply FULL convolution.
result2=conv2(matrix2,mask2,'full');
% Show matrix, mask and result.
matrix2
mask2
result2
输出 1:
输出 2: