MATLAB卷積運算(conv、conv2、convn)
阿新 • • 發佈:2019-01-26
conv(向量卷積運算)
所謂兩個向量卷積,說白了就是多項式乘法。
比如:p=[1 2 3],q=[1 1]是兩個向量,p和q的卷積如下:
把p的元素作為一個多項式的係數,多項式按升冪(或降冪)排列,比如就按升冪吧,寫出對應的多項式:1+2x+3x^2;同樣的,把q的元素也作為多項式的係數按升冪排列,寫出對應的多項式:1+x。
卷積就是“兩個多項式相乘取係數”。
(1+2x+3x^2)×(1+x)=1+3x+5x^2+3x^3
所以p和q卷積的結果就是[1 3 5 3]。
記住,當確定是用升冪或是降冪排列後,下面也都要按這個方式排列,否則結果是不對的。
你也可以用matlab試試
p=[1 2 3]
q=[1 1]
conv(p,q)
看看和計算的結果是否相同。
conv2(二維矩陣卷積運算)
a=[1 1 1;1 1 1;1 1 1];
b=[1 1 1;1 1 1;1 1 1];
>> conv2(a,b)
ans =
1 2 3 2 1
2 4 6 4 2
3 6 9 6 3
2 4 6 4 2
1 2 3 2 1
>> conv2(a,b,'valid')
ans =
9
>> conv2(a,b,'same')
ans =
4 6 4
6 9 6
4 6 4
>> conv2(a,b,'full')
ans =
1 2 3 2 1
2 4 6 4 2
3 6 9 6 3
2 4 6 4 2
1 2 3 2 1
>> a=ones(5,5,5)
a(:,:,1) =
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
a(:,:,2) =
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
a(:,:,3) =
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
a(:,:,4) =
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
a(:,:,5) =
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
>> b=ones(5,5,5);
>> convn(a,b,'valid')
ans =
125
>> convn(a,b,'same')
ans(:,:,1) =
27 36 45 36 27
36 48 60 48 36
45 60 75 60 45
36 48 60 48 36
27 36 45 36 27
ans(:,:,2) =
36 48 60 48 36
48 64 80 64 48
60 80 100 80 60
48 64 80 64 48
36 48 60 48 36
ans(:,:,3) =
45 60 75 60 45
60 80 100 80 60
75 100 125 100 75
60 80 100 80 60
45 60 75 60 45
ans(:,:,4) =
36 48 60 48 36
48 64 80 64 48
60 80 100 80 60
48 64 80 64 48
36 48 60 48 36
ans(:,:,5) =
27 36 45 36 27
36 48 60 48 36
45 60 75 60 45
36 48 60 48 36
27 36 45 36 27
>> convn(a,b)
ans(:,:,1) =
1 2 3 4 5 4 3 2 1
2 4 6 8 10 8 6 4 2
3 6 9 12 15 12 9 6 3
4 8 12 16 20 16 12 8 4
5 10 15 20 25 20 15 10 5
4 8 12 16 20 16 12 8 4
3 6 9 12 15 12 9 6 3
2 4 6 8 10 8 6 4 2
1 2 3 4 5 4 3 2 1
ans(:,:,2) =
2 4 6 8 10 8 6 4 2
4 8 12 16 20 16 12 8 4
6 12 18 24 30 24 18 12 6
8 16 24 32 40 32 24 16 8
10 20 30 40 50 40 30 20 10
8 16 24 32 40 32 24 16 8
6 12 18 24 30 24 18 12 6
4 8 12 16 20 16 12 8 4
2 4 6 8 10 8 6 4 2
ans(:,:,3) =
3 6 9 12 15 12 9 6 3
6 12 18 24 30 24 18 12 6
9 18 27 36 45 36 27 18 9
12 24 36 48 60 48 36 24 12
15 30 45 60 75 60 45 30 15
12 24 36 48 60 48 36 24 12
9 18 27 36 45 36 27 18 9
6 12 18 24 30 24 18 12 6
3 6 9 12 15 12 9 6 3
ans(:,:,4) =
4 8 12 16 20 16 12 8 4
8 16 24 32 40 32 24 16 8
12 24 36 48 60 48 36 24 12
16 32 48 64 80 64 48 32 16
20 40 60 80 100 80 60 40 20
16 32 48 64 80 64 48 32 16
12 24 36 48 60 48 36 24 12
8 16 24 32 40 32 24 16 8
4 8 12 16 20 16 12 8 4
ans(:,:,5) =
5 10 15 20 25 20 15 10 5
10 20 30 40 50 40 30 20 10
15 30 45 60 75 60 45 30 15
20 40 60 80 100 80 60 40 20
25 50 75 100 125 100 75 50 25
20 40 60 80 100 80 60 40 20
15 30 45 60 75 60 45 30 15
10 20 30 40 50 40 30 20 10
5 10 15 20 25 20 15 10 5
ans(:,:,6) =
4 8 12 16 20 16 12 8 4
8 16 24 32 40 32 24 16 8
12 24 36 48 60 48 36 24 12
16 32 48 64 80 64 48 32 16
20 40 60 80 100 80 60 40 20
16 32 48 64 80 64 48 32 16
12 24 36 48 60 48 36 24 12
8 16 24 32 40 32 24 16 8
4 8 12 16 20 16 12 8 4
ans(:,:,7) =
3 6 9 12 15 12 9 6 3
6 12 18 24 30 24 18 12 6
9 18 27 36 45 36 27 18 9
12 24 36 48 60 48 36 24 12
15 30 45 60 75 60 45 30 15
12 24 36 48 60 48 36 24 12
9 18 27 36 45 36 27 18 9
6 12 18 24 30 24 18 12 6
3 6 9 12 15 12 9 6 3
ans(:,:,8) =
2 4 6 8 10 8 6 4 2
4 8 12 16 20 16 12 8 4
6 12 18 24 30 24 18 12 6
8 16 24 32 40 32 24 16 8
10 20 30 40 50 40 30 20 10
8 16 24 32 40 32 24 16 8
6 12 18 24 30 24 18 12 6
4 8 12 16 20 16 12 8 4
2 4 6 8 10 8 6 4 2
ans(:,:,9) =
1 2 3 4 5 4 3 2 1
2 4 6 8 10 8 6 4 2
3 6 9 12 15 12 9 6 3
4 8 12 16 20 16 12 8 4
5 10 15 20 25 20 15 10 5
4 8 12 16 20 16 12 8 4
3 6 9 12 15 12 9 6 3
2 4 6 8 10 8 6 4 2
1 2 3 4 5 4 3 2 1
所謂兩個向量卷積,說白了就是多項式乘法。
比如:p=[1 2 3],q=[1 1]是兩個向量,p和q的卷積如下:
把p的元素作為一個多項式的係數,多項式按升冪(或降冪)排列,比如就按升冪吧,寫出對應的多項式:1+2x+3x^2;同樣的,把q的元素也作為多項式的係數按升冪排列,寫出對應的多項式:1+x。
卷積就是“兩個多項式相乘取係數”。
(1+2x+3x^2)×(1+x)=1+3x+5x^2+3x^3
所以p和q卷積的結果就是[1 3 5 3]。
記住,當確定是用升冪或是降冪排列後,下面也都要按這個方式排列,否則結果是不對的。
你也可以用matlab試試
p=[1 2 3]
q=[1 1]
conv(p,q)
看看和計算的結果是否相同。
conv2(二維矩陣卷積運算)
a=[1 1 1;1 1 1;1 1 1];
b=[1 1 1;1 1 1;1 1 1];
>> conv2(a,b)
ans =
1 2 3 2 1
2 4 6 4 2
3 6 9 6 3
2 4 6 4 2
1 2 3 2 1
>> conv2(a,b,'valid')
ans =
9
>> conv2(a,b,'same')
ans =
4 6 4
6 9 6
4 6 4
>> conv2(a,b,'full')
ans =
1 2 3 2 1
2 4 6 4 2
3 6 9 6 3
2 4 6 4 2
1 2 3 2 1
convn(n維矩陣卷積運算)
a(:,:,1) =
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
a(:,:,2) =
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
a(:,:,3) =
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
a(:,:,4) =
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
a(:,:,5) =
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
>> b=ones(5,5,5);
>> convn(a,b,'valid')
ans =
125
>> convn(a,b,'same')
ans(:,:,1) =
27 36 45 36 27
36 48 60 48 36
45 60 75 60 45
36 48 60 48 36
27 36 45 36 27
ans(:,:,2) =
36 48 60 48 36
48 64 80 64 48
60 80 100 80 60
48 64 80 64 48
36 48 60 48 36
ans(:,:,3) =
45 60 75 60 45
60 80 100 80 60
75 100 125 100 75
60 80 100 80 60
45 60 75 60 45
ans(:,:,4) =
36 48 60 48 36
48 64 80 64 48
60 80 100 80 60
48 64 80 64 48
36 48 60 48 36
ans(:,:,5) =
27 36 45 36 27
36 48 60 48 36
45 60 75 60 45
36 48 60 48 36
27 36 45 36 27
>> convn(a,b)
ans(:,:,1) =
1 2 3 4 5 4 3 2 1
2 4 6 8 10 8 6 4 2
3 6 9 12 15 12 9 6 3
4 8 12 16 20 16 12 8 4
5 10 15 20 25 20 15 10 5
4 8 12 16 20 16 12 8 4
3 6 9 12 15 12 9 6 3
2 4 6 8 10 8 6 4 2
1 2 3 4 5 4 3 2 1
ans(:,:,2) =
2 4 6 8 10 8 6 4 2
4 8 12 16 20 16 12 8 4
6 12 18 24 30 24 18 12 6
8 16 24 32 40 32 24 16 8
10 20 30 40 50 40 30 20 10
8 16 24 32 40 32 24 16 8
6 12 18 24 30 24 18 12 6
4 8 12 16 20 16 12 8 4
2 4 6 8 10 8 6 4 2
ans(:,:,3) =
3 6 9 12 15 12 9 6 3
6 12 18 24 30 24 18 12 6
9 18 27 36 45 36 27 18 9
12 24 36 48 60 48 36 24 12
15 30 45 60 75 60 45 30 15
12 24 36 48 60 48 36 24 12
9 18 27 36 45 36 27 18 9
6 12 18 24 30 24 18 12 6
3 6 9 12 15 12 9 6 3
ans(:,:,4) =
4 8 12 16 20 16 12 8 4
8 16 24 32 40 32 24 16 8
12 24 36 48 60 48 36 24 12
16 32 48 64 80 64 48 32 16
20 40 60 80 100 80 60 40 20
16 32 48 64 80 64 48 32 16
12 24 36 48 60 48 36 24 12
8 16 24 32 40 32 24 16 8
4 8 12 16 20 16 12 8 4
ans(:,:,5) =
5 10 15 20 25 20 15 10 5
10 20 30 40 50 40 30 20 10
15 30 45 60 75 60 45 30 15
20 40 60 80 100 80 60 40 20
25 50 75 100 125 100 75 50 25
20 40 60 80 100 80 60 40 20
15 30 45 60 75 60 45 30 15
10 20 30 40 50 40 30 20 10
5 10 15 20 25 20 15 10 5
ans(:,:,6) =
4 8 12 16 20 16 12 8 4
8 16 24 32 40 32 24 16 8
12 24 36 48 60 48 36 24 12
16 32 48 64 80 64 48 32 16
20 40 60 80 100 80 60 40 20
16 32 48 64 80 64 48 32 16
12 24 36 48 60 48 36 24 12
8 16 24 32 40 32 24 16 8
4 8 12 16 20 16 12 8 4
ans(:,:,7) =
3 6 9 12 15 12 9 6 3
6 12 18 24 30 24 18 12 6
9 18 27 36 45 36 27 18 9
12 24 36 48 60 48 36 24 12
15 30 45 60 75 60 45 30 15
12 24 36 48 60 48 36 24 12
9 18 27 36 45 36 27 18 9
6 12 18 24 30 24 18 12 6
3 6 9 12 15 12 9 6 3
ans(:,:,8) =
2 4 6 8 10 8 6 4 2
4 8 12 16 20 16 12 8 4
6 12 18 24 30 24 18 12 6
8 16 24 32 40 32 24 16 8
10 20 30 40 50 40 30 20 10
8 16 24 32 40 32 24 16 8
6 12 18 24 30 24 18 12 6
4 8 12 16 20 16 12 8 4
2 4 6 8 10 8 6 4 2
ans(:,:,9) =
1 2 3 4 5 4 3 2 1
2 4 6 8 10 8 6 4 2
3 6 9 12 15 12 9 6 3
4 8 12 16 20 16 12 8 4
5 10 15 20 25 20 15 10 5
4 8 12 16 20 16 12 8 4
3 6 9 12 15 12 9 6 3
2 4 6 8 10 8 6 4 2
1 2 3 4 5 4 3 2 1