MATLAB中的卷积形状(完整/相同/有效)
卷积是一种数学运算。它用于 MatLab 中的图像处理。掩码/过滤器用于对图像进行卷积以进行图像检测。但是 MatLab 提供了三种类型的卷积。这里我们将解释简单的卷积。
过滤器从左到右在图像矩阵上滑动。矩阵和过滤器的对应值相乘相加。滤波器中心值下的矩阵值被卷积运算的结果代替。
根据在矩阵上滑动的滤波器的性质,MatLab 具有三种不同类型的卷积。
示例 1:
Given an image matrix:
1st row->[1 2 4]
2nd row->[2 1 3]
3rd row->[3 2 1]
Given filter:
1st row->[1 0 1]
2nd row->[1 0 1]
3rd row->[1 0 1]
Here we are going to apply the 'same' convolution.
The resultant matrix is:[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]
让我们以相同卷积为例,并在其上应用掩码,
例子:
Matlab
% 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
Matlab
% 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
Matlab
% 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:
有效卷积
在这种类型的卷积中,结果矩阵的大小会减小。过滤器/面罩放置在矩阵上,这样过滤器的任何部分都不会悬空。过滤器完全悬停在矩阵上,然后在行中从左到右滑动,在列中从上到下滑动。
例子:
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
% 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:
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
% 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: