Main Content

conv2

説明

C = conv2(A,B) は、行列 AB2 次元の畳み込みを返します。

  • A が行列で B が行ベクトルの場合 (または A が行ベクトルで B が行列の場合)、C は行列の各行とベクトルの畳み込みです。

  • A が行列で B が列ベクトルの場合 (または A が列ベクトルで B が行列の場合)、C は行列の各列とベクトルの畳み込みです。

C = conv2(u,v,A) は、まず A の各列とベクトル u の畳み込みを計算してから、その結果の各行とベクトル v の畳み込みを計算します。この動作は、u または v が行ベクトルか列ベクトルかに関係なく適用されます。

C = conv2(___,shape) は、shape に従って、畳み込みのサブセクションを返します。たとえば、C = conv2(A,B,"same") は畳み込みの中央部分を A と同じサイズで返します。

すべて折りたたむ

イメージ処理などの用途で、畳み込みの入力を出力と直接比較する場合に便利です。関数 conv2 により、出力のサイズを制御できます。

3 行 3 列の乱数行列 A と 4 行 4 列の乱数行列 B を作成します。AB の完全な畳み込みを計算します。これは 6 行 6 列の行列になります。

A = rand(3);
B = rand(4);
Cfull = conv2(A,B)
Cfull = 6×6

    0.7861    1.2768    1.4581    1.0007    0.2876    0.0099
    1.0024    1.8458    3.0844    2.5151    1.5196    0.2560
    1.0561    1.9824    3.5790    3.9432    2.9708    0.7587
    1.6790    2.0772    3.0052    3.7511    2.7593    1.5129
    0.9902    1.1000    2.4492    1.6082    1.7976    1.2655
    0.1215    0.1469    1.0409    0.5540    0.6941    0.6499

畳み込みの中央部分 Csame を計算します。これは Cfull の部分行列で A と同じサイズであり、CsameCfull(3:5,3:5) と等価です。

Csame = conv2(A,B,"same")
Csame = 3×3

    3.5790    3.9432    2.9708
    3.0052    3.7511    2.7593
    2.4492    1.6082    1.7976

ソーベル エッジ検出演算は、2 次元の畳み込みを使用して、イメージやその他の 2 次元データ内でエッジを検出します。

内部の高さが 1 と等しい 2 次元台座を作成してプロットします。

A = zeros(10);
A(3:7,3:7) = ones(5);
mesh(A)

A の行とベクトル u の畳み込みを計算した後に、その結果の行とベクトル v の畳み込みを計算します。この畳み込みによって、台座の水平エッジを抽出します。

u = [1 0 -1]';
v = [1 2 1];
Ch = conv2(u,v,A);
mesh(Ch)

台座の垂直エッジを抽出するには、uv の畳み込みの順序を逆にします。

Cv = conv2(v,u,A);
mesh(Cv)

台座のエッジを合成したものを計算してプロットします。

figure
mesh(sqrt(Ch.^2 + Cv.^2))

入力引数

すべて折りたたむ

入力配列。ベクトルまたは行列として指定します。

データ型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical
複素数のサポート: あり

2 番目の入力配列。A と畳み込みを行うベクトルまたは行列として指定します。配列 BA と同じサイズである必要はありません。

データ型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical
複素数のサポート: あり

入力ベクトル。行ベクトルまたは列ベクトルとして指定します。uA の各列の畳み込みが計算されます。

データ型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical
複素数のサポート: あり

2 番目の入力ベクトル。行ベクトルまたは列ベクトルとして指定します。A の列と u の畳み込みを行った各行と、v の畳み込みが計算されます。

データ型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical
複素数のサポート: あり

畳み込みのサブセクション。次の値のいずれかとして指定します。

  • "full" — 完全な 2 次元の畳み込みを返します。

  • "same" — 畳み込みの中央部分を A と同じサイズで返します。

  • "valid" — 畳み込みのうち、ゼロが加えられたエッジを含まずに計算された部分のみを返します。

出力引数

すべて折りたたむ

2 次元の畳み込み。ベクトルまたは行列として返されます。AB が行列である場合、畳み込み C = conv2(A,B) のサイズは size(A)+size(B)-1 です。[m,n] = size(A)p = length(u)q = length(v) である場合、畳み込み C = conv2(u,v,A)m+p-1n+q-1 列です。

conv2 の 1 つ以上の入力引数が single 型である場合、出力は single 型になります。それ以外の場合、conv2 は入力を double 型に変換して double 型を返します。

データ型: double | single

詳細

すべて折りたたむ

2 次元の畳み込み

2 次元の離散行列 A と B について、次の式は A と B の畳み込みを定義します。

C(j,k)=pqA(p,q)B(jp+1,kq+1)

p と q は、A(p,q) と B(j-p+1,k-q+1) の添字が適正になるすべての値をとります。

この定義を使用して、conv2 は FFT ベースの畳み込みではなく、2 つの行列の直接畳み込みを計算します。

拡張機能

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。

GPU コード生成
GPU Coder™ を使用して NVIDIA® GPU のための CUDA® コードを生成します。

バージョン履歴

R2006a より前に導入

参考

|