1. 程式人生 > >MATLAB卷積運算(conv、conv2、convn)

MATLAB卷積運算(conv、conv2、convn)

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


convn(n維矩陣卷積運算)

>> 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