web-dev-qa-db-ja.com

Matlabで画像を平滑化する平均フィルター

Matlabでいくつかの基本的な画像処理技術をテストする必要があります。特に、平均フィルターと中央値フィルターの2種類のフィルターをテストして比較する必要があります。

中央値フィルタリングを使用して画像を滑らかにするために、画像処理ツールボックスの優れた関数medfilt2があります。平均フィルターに同様の機能はありますか?または、filter2関数を使用して平均フィルターを作成する方法は?

私にとって最も重要なことの1つは、フィルターの半径を設定できることです。つまり中央値フィルターの場合、[3 x 3]半径(マスク)が必要な場合は、

imSmoothed = medfilt2(img, [3 3]);

平均フィルターについても同様のものを実現したいと思います。

15
Gacek
_h = fspecial('average', n);
filter2(h, img);
_

_doc fspecial_を参照してください:h = fspecial('average', n)は平均化フィルターを返します。 nは、hの行と列の数を指定する1行2列のベクトルです。

28
rcs

すでに良い答えが出ているように見えますが、特別な関数やツールボックスを使用せずに、MATLABで平均フィルタリングを実行する方法を提供するだけでいいのではないかと思いました。これは、畳み込みカーネルを明示的に設定する必要があるため、プロセスがどのように機能するかを正確に理解するのにも非常に役立ちます。平均フィルターカーネルは幸い非常に簡単です。

I = imread(...)
kernel = ones(3, 3) / 9; % 3x3 mean kernel
J = conv2(I, kernel, 'same'); % Convolve keeping size of I

カラー画像の場合、これを画像の各チャンネルに適用する必要があることに注意してください。

7
Hannes Ovrén
I = imread('peppers.png');
H = fspecial('average', [5 5]);
I = imfilter(I, H);
imshow(I)

フィルタはfilter2を使用して強度画像(2Dマトリックス)に適用でき、多次元画像(RGB画像または3Dマトリックス)ではimfilterが使用されることに注意してください。

また、Intelプロセッサでは、imfilterはIntel Integrated Performance Primitives(IPP)ライブラリを使用して実行を加速できます。

5
Amro

畳み込みは、変換領域での乗算によって定義されます。

conv2(x,y) = fftshift(ifft2(fft2(x).*fft2(y)))

1つのチャネルが考慮される場合...より多くのチャネルの場合、これはすべてのチャネルで実行する必要があります

2
Chris
f=imread(...);

h=fspecial('average', [3 3]);
g= imfilter(f, h);
imshow(g);
0
Afsaneh