Main Content

colfilt

説明

B = colfilt(A,[m n],block_type,fun)Amn 列の各ブロックを一時行列の列に再配置してから関数 fun をこの行列に適用することによって、イメージ A を処理します。colfilt は必要に応じて、A をゼロ パディングします。

B = colfilt(A,[m n],[mblock nblock],block_type,fun)Amblocknblock 列のブロックに領域を分割し、メモリを節約します。[mblock nblock] 引数を使用しても演算の結果は変わりません。

たとえば、[mblock nblock][3 4] で、各ブロックのサイズが 16 行 16 列ピクセルの場合、colfilt はイメージを 48 行 64 列ピクセルの領域に分割し、各領域を個別に処理します。

B = colfilt(A,'indexed',___) は、A をインデックス付きイメージとして処理します。A のクラスが uint8uint16 または logical の場合は 0 をパディングし、その他の場合は 1 をパディングします。

すべて折りたたむ

この例では、列方向の近傍処理を使用して、各出力ピクセルを入力ピクセルの 5 行 5 列の近傍の平均値に設定する方法を説明します。

グレースケール イメージをワークスペースに読み取ります。

I = imread('tire.tif');

列方向フィルター処理を実行します。関数 mean は 5 行 5 列のピクセル近傍ごとに呼び出されます。

I2 = uint8(colfilt(I,[5 5],'sliding',@mean));

元のイメージとフィルター処理されたイメージを表示します。

imshow(I)
title('Original Image')

figure
imshow(I2)
title('Filtered Image')

入力引数

すべて折りたたむ

イメージ。fun でサポートされる任意のクラスの配列として指定します。

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

ブロック グループ サイズ。正の整数の 2 要素ベクトルとして指定します。mblock は垂直方向のグループでのブロック数で、nblock は水平方向のグループでのブロック数です。

ブロック タイプ。スライディング近傍では 'sliding'、個別ブロックでは 'distinct' を指定します。

データ型: char | string

関数ハンドル。ハンドルとして指定します。この関数の入力および出力引数は block_type の値で決まります。詳細については、アルゴリズムを参照してください。

関数ハンドルの詳細については、関数ハンドルの作成を参照してください。

出力引数

すべて折りたたむ

フィルター処理されたイメージ。数値行列として返されます。

アルゴリズム

イメージを処理するために colfilt によって使用されるアルゴリズムは、block_type の値によって異なります。

説明

'distinct'

  • まず colfiltAmn 列の各ブロックを、関数 im2col を使用して一時行列の列に再配置します。

  • 次に、colfilt は関数 fun をこの一時行列に適用します。fun は、一時行列と同じサイズの行列を返さなければなりません。

  • 最後に、colfilt は、fun で返される行列の列を、関数 col2im を使用して mn 列の個別ブロックに再配置します。

'sliding'

  • まず、colfiltAmn 列の各近傍を、関数 im2col を使用して一時行列の列に再配置します。

  • 次に、colfilt は関数 fun をこの一時行列に適用します。fun は、一時行列の各列の単一値を含む行ベクトルを返さなければなりません (sum などの列圧縮関数は適切なタイプの出力を返します)。

  • 最後に、colfiltfun で返されるベクトルを、関数 reshape を使用して A と同じサイズの行列に形状を変更します。

関数 colfilt はメモリを節約するために A をサブイメージに分割し、一度に 1 サブイメージずつ処理する場合があります。これは、fun が複数回呼び出される可能性があることと、呼び出しのたびに fun の最初の引数の列数が異なる可能性があることを意味します。

バージョン履歴

R2006a より前に導入