Main Content

im2col

イメージ ブロックを列行列に再配置

説明

B = im2col(A,[m n])mn 列のスライディング イメージ近傍をゼロ パディングしない列に再配置します。行列 B の連結した列を返します。

B = im2col(A,[m n],blockType) は、さらに、引数 blockType を使用して、ブロックが個別ブロックであるかスライディング近傍であるかを指定します。

個別ブロック処理の場合、関数 im2col は、必要に応じてイメージ A をパディングします。パディング値の詳細については、ヒントを参照してください。

B = im2col(A,"indexed",[m n],blockType)A をインデックス付きイメージとして解釈します。

すべて折りたたむ

行列を作成します。

A = reshape(linspace(0,1,16),[4 4])'
A = 4×4

         0    0.0667    0.1333    0.2000
    0.2667    0.3333    0.4000    0.4667
    0.5333    0.6000    0.6667    0.7333
    0.8000    0.8667    0.9333    1.0000

値を列方向の配置に再配置します。

B = im2col(A,[2 2])
B = 4×9

         0    0.2667    0.5333    0.0667    0.3333    0.6000    0.1333    0.4000    0.6667
    0.2667    0.5333    0.8000    0.3333    0.6000    0.8667    0.4000    0.6667    0.9333
    0.0667    0.3333    0.6000    0.1333    0.4000    0.6667    0.2000    0.4667    0.7333
    0.3333    0.6000    0.8667    0.4000    0.6667    0.9333    0.4667    0.7333    1.0000

平均を計算します。

M = mean(B)
M = 1×9

    0.1667    0.4333    0.7000    0.2333    0.5000    0.7667    0.3000    0.5667    0.8333

値を元の行方向の配置に戻します。

newA = col2im(M,[1 1],[3 3])
newA = 3×3

    0.1667    0.2333    0.3000
    0.4333    0.5000    0.5667
    0.7000    0.7667    0.8333

入力引数

すべて折りたたむ

イメージ。2 次元グレースケール イメージ、2 次元バイナリ イメージまたは 2 次元インデックス付きイメージとして指定します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

ブロックのサイズ。2 要素ベクトルとして指定します。ここで、m はブロックの行数で、n は列数です。

ブロック タイプ。スライディング近傍を示す場合は "sliding"、個別ブロックを示す場合は "distinct" として指定します。

出力引数

すべて折りたたむ

イメージ ブロック。m*n 行の数値行列または logical 行列として返されます。列数はイメージ ブロックが離散ブロックかスライディング近傍かどうかで決まります。B の各列には、列ベクトルとして再構築された A のブロックまたは近傍が含まれます。

  • 個別ブロック処理では、B には、Amn 列のブロックと同数の列があります。たとえば、A のサイズが [mm nn] である場合、B には (mm/m)*(nn/n) の列があります。

  • スライディング近傍処理では、B には、Amn 列の近傍にあるのと同数の列があります。たとえば、A のサイズが [mm nn] である場合、B には ((mm-m+1)*(nn-n+1)) の列があります。

行列 B の列の順序は、イメージ A を列方向に走査することによって決定されます。たとえば、A が個別ブロック Aij (A = [A11 A12; A21 A22] の配置) で構成される場合、B = [A11(:) A21(:) A12(:) A22(:)] となります。

ヒント

  • 個別ブロック処理の場合、必要に応じて、im2colA をゼロ パディングし、サイズを mn 列の整数倍にします。パディング値は 0 です (A がデータ型 uint8uint16 または logical の場合)。他のデータ型では、パディング値は A がインデックス付きイメージとして解釈されるかどうかで決まります。

    • パディング値は 1 です (A がインデックス付きイメージとして解釈される場合)。

    • パディング値は 0 です (A がインデックス付きイメージとして解釈されない場合)。

  • im2colB の列を、reshape に従って行列の形に再構成できるように順序を付けます。

    たとえば、sum(B) など、B の各列にスカラーを返す関数を使用するとします。次の呼び出しを使用して、結果をサイズ (mm-m+1) 行 (nn-n+1) 列の行列に直接保存できます。

    B = im2col(A,[m n],"sliding");
    C = reshape(sum(B),mm-m+1,nn-n+1);

バージョン履歴

R2006a より前に導入