Matlabでの関数colfiltの使用とデジタル画像の非線形空間フィルタリングの概念
Use Function Colfilt Matlab
非線形空間フィルタリング
非線形空間フィルタリングは、近傍の画像を処理します。 m×nフィルターの中心点を使用して、画像上をスライドします。このプロセスでは、フィルターで囲まれたピクセルに対していくつかの非線形操作を実行することが、非線形空間フィルタリングです。たとえば、各中心点での応答を近傍の最大ピクセル値または最小ピクセル値として処理したり、近傍のピクセルの幾何平均として処理したりする場合、これらの操作はすべて非線形空間フィルタリングの方法です。
線形空間フィルタリングはこの記事を参照できます Matlabでの関数imfilterの使用、および線形空間フィルタリングでの相関と畳み込みの区別
colfilt
関数colfiltは、画像の非線形フィルタリングを実現します。この関数は、データを列に編成し、より高速と引き換えにより多くのメモリを使用します。これは、ほとんどの画像処理アプリケーションに適しています。
画像fのサイズがM×Nで、近傍のサイズがm×nの場合、関数colfiltは、最大サイズがmn×MNの行列Aを生成します。行列Aの各列は、画像内の近傍に囲まれたピクセルです。
たとえば、5×5の画像の場合、近隣のサイズを3×3として選択します。
ゼロフィルして取得する
長方形のボックス内の要素は行列Aの最初の列の要素であるため、行列Aの行数はmnであるため、Aの各列の要素数はmnであり、これは近傍と同じです。行列Aの列の数はMNであり、列の数は画像のサイズとまったく同じです。
通話形式
g = colfilt(f、[m n]、 ‘sliding’、fun)
mとnはフィルタリング領域の寸法を表し、「sliding」は処理プロセスがm×n領域が画像f内のピクセルごとにスライドすることを示し、funは関数ハンドル、つまり実行することを示します。非線形フィルタリングの方法では、funは、近傍のピクセルの最大値または最小値を見つけるなどの非線形操作にすることができます。
関数colfiltを呼び出すときは、入力画像を明示的に入力する必要があります。塗りつぶしは、関数padarrayによって実現されます。
形式は次のとおりです。fp= padarray(f、[r c]、method、direction)
fは入力画像、fpは塗りつぶされた画像、[r c]は塗りつぶしに使用される行と列の数を表し、メソッドと方向はオプションのパラメーターです。オプションが異なれば、充填効果も異なります。
オプション | 説明 |
---|---|
方法 | 対称、複製、円形 |
対称 | 画像のサイズは境界鏡の反射によって拡大されます |
複製 | 外側の境界の値をコピーすることにより、画像のサイズが拡大されます |
円形 | 画像を2次元周期関数の周期として扱うことにより、画像のサイズを拡大します。 |
方向 | 前、後、両方 |
ために | 各ディメンションの最初の要素の前に入力します |
役職 | 各ディメンションの最後の要素の後に入力します |
両方とも | 各寸法の最初の要素の前と最後の要素の後に塗りつぶします |
たとえば、f = [1 23 4]の場合、fp = padarray(f、[3 2]、 ‘replicate’、 ‘post’)を実行すると、次のようになります。
使用例
f = imread('figure1.jpg') g = rgb2gray(f) h = uint8(colfilt(g,[3 5],'sliding',@mean)) subplot(1,2,1) imshow(f) title('Original image') subplot(1,2,2) imshow(h) title('Non-linear filtering graph')
上記のコードでは、非線形フィルタリングは対応する方法として近隣平均値を使用し、画像の表示効果は次のとおりです。