メディアンフィルタ適用時特定の要素を除外する方法

medfilt2関数で[9 9]の範囲にメディアンフィルタ処理を行う際、0の要素を計算対象外に指定したいのですが可能なのか分かりません。
ご存じの方いらっしゃればご教授お願いします。

 Akzeptierte Antwort

Akira Agata
Akira Agata am 7 Okt. 2024

0 Stimmen

関数 nlfilter を使って実現することができます。
たとえば 2次元配列 I に対して [9 9] の範囲で値が 0 の要素を計算対象外とした median フィルタ処理をするには、以下のようになります。
% 値が 0 の要素を計算対象外とした median フィルタ処理
myMedfilt = @(x) median(x(x~=0));
J = nlfilter(I, [9 9], myMedfilt);

3 Kommentare

Takanori Aihara
Takanori Aihara am 9 Okt. 2024
Akira Agata 様
ご教授頂きありがとうございます。
追加でお伺いしたいのですが、medianの部分をmax,min,averageに変更すれば最大値、最小値、平均値フィルタでも同様の処理が可能と捉えています。
認識に誤りはありませんでしょうか。
Akira Agata
Akira Agata am 9 Okt. 2024
はい、ご理解のとおりです。
ちなみに、万が一 [9 9] の範囲内がすべて 0 の領域があった場合、その部分は出力が nan となってしまう点ご注意下さい。もしそのようなケースにも対応する (たとえば nan ではなく 0 を出力する) には、myMedfilt の部分を無名関数ではなくカスタム関数として作成するのが良いかと思います。
Takanori Aihara
Takanori Aihara am 9 Okt. 2024
Akira Agata 様
承知いたしました。
先にご教授いただいたメディアンフィルタの処理、当方の求めていた処理が可能になりました。
ありがとうございます。

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Produkte

Version

R2024a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!