デジタル画像処理---適応メディアン フィルタリングの実験 (ソース コードによる MATLAB の実現)

適応メディアン フィルターの実験 (MATLAB 実装)

【目的】

1. メディアン フィルターと適応メディアン フィルターの原理とフィルター処理プロセスをマスターする
2. 適応メディアン フィルターのアルゴリズム設計をマスターする
3. MATLAB プログラミングにさらに慣れる

【実験原理】

メディアン フィルタリングの考え方は、特定の領域内のピクセル値の大小を比較し、その中央値をこの領域内の中心ピクセルの新しい値として取り出すことです。特定の領域内のすべてのピクセルが小さいものから大きいものへとソートされていると仮定すると、塩胡椒ノイズなどの孤立したノイズ ポイントがある場合、小さいものから大きいものへとソートされた配列内で、それらの孤立したノイズは両側に分布している必要があります。中央の値ポイントは、ノイズ ポイントの影響をフィルタリングしながら、ピクセル情報を適切に保存できます。
メディアン フィルターはフィルター ウィンドウのサイズに大きく影響され、ノイズを除去して画像の細部を保護するために使用されますが、この 2 つの間には競合が発生します。ウィンドウ サイズが小さい場合は、画像の一部の細部をよりよく保護できますが、ノイズ フィルター効果が損なわれます。逆に、ウィンドウ サイズが大きい場合、ノイズ フィルター効果は向上しますが、画像にも影響します。画像 特定のぼかし効果を引き起こし、詳細情報の一部が失われます。
適応メディアン フィルターを使用する目的は、事前に設定された条件に従ってメディアン フィルターのウィンドウ サイズを動的に変更し、ノイズ除去と細部の保護の効果を同時に考慮することです。同時に、現在のピクセルがノイズであるかどうかを一定の条件に従って判断し、ノイズであれば近傍の中央値に置き換え、そうでない場合は変更しません。
適応メディアン フィルタには 3 つの目的があります:
(1)塩胡椒ノイズをフィルタリングする
(2)他の非インパルス ノイズを平滑化する
(3)画像内の画像の細部と境界情報を可能な限り保護し、微細なノイズを回避する画像の端の細部が太くなる、または太くなります。
(4)検出されたノイズがそれほど強くない場合、ウィンドウのサイズを大きくする必要がないため、適応性が反映されるだけでなく、時間のオーバーヘッドが削減され、速度が向上します。

【実験内容】

グレースケール イメージ I(x,y) の場合:
(1) I(x,y) に塩コショウ ノイズを追加します;
(2) 元のイメージとノイズを追加した後のイメージを描画します;
(3) 適応メディアン フィルタリングを使用し、従来のメディアン フィルタリングを使用して塩胡椒ノイズ画像をフィルタリングし、比較しました。

【結果の分析】

画像のエッジが塗りつぶされるので、画像のエッジの余分な領域もメディアンフィルタリングで処理され、エッジノイズが小さくなります。メディアン フィルターと適応メディアン フィルターのどちらでも、画像内のノイズを除去できます。適応メディアン フィルターの効果は優れていますが、メディアン フィルターには除去されないノイズがまだ含まれています。さらに、従来のメディアン フィルターによって引き起こされるぼやけはより明白ですが、適応型メディアン フィルターは画像の細部をよく保存します。図 1 に示すように:
ここに画像の説明を挿入
**n 番目の従来のメディアン フィルターの場合、画像からごま塩ノイズを除去する効果はより優れていますが、画像はよりぼやけて滑らかになります。**図 2 に示すように:
ここに画像の説明を挿入

【実験コード】

clc;
I=imread('15.jpg');
I=rgb2gray(I);
I_noise = imnoise(I,'salt & pepper', 0.25);
subplot(231),imshow(I),xlabel("原始图像");
subplot(232),imshow(I_noise),xlabel("受椒盐噪声干扰的图像");
[Im,In]=size(I_noise);
nmin = 3;
nmax = 7;
I_out = I_noise;
%% 边界扩充
I_ex = [zeros((nmax-1)/2,In+(nmax-1));zeros(Im,(nmax-1)/2),I_noise,zeros(Im,(nmax-1)/2);zeros((nmax-1)/2,In+(nmax-1))];
%% 自适应中值滤波
for x =1:Im
    for y = 1:In
        for n = nmin:2:nmax
            Sxy = I_ex(x+(nmax-1)/2-(n-1)/2:x+(nmax-1)/2+(n-1)/2,y+(nmax-1)/2-(n-1)/2:y+(nmax-1)/2+(n-1)/2);
            Smin = min(min(Sxy));
            Smax = max(max(Sxy));
            Smed = median(median(Sxy));
            if Smed > Smin && Smed < Smax                              
                if I_out(x,y) <= Smin || I_out(x,y) >= Smax                                     
                    I_out(x,y) = Smed;                 
                end
                break             
            end
        end     
        I_out(x,y) = Smed;   
    end
end
subplot(233),imshow(I_out),xlabel('尺寸大小为7的中值滤波效果')

%% 传统中值滤波器
Iout = medfilt2(I_noise,[3 3]);
subplot(234),imshow(Iout),xlabel('尺寸为3*3的一次中值滤波')
Iout_1 = medfilt2(Iout,[3 3]);
subplot(235),imshow(Iout_1),xlabel('尺寸为3*3的二次中值滤波')
Iout_2 = medfilt2(Iout_1,[3 3]);
subplot(236),imshow(Iout_2),xlabel('尺寸为3*3的三次中值滤波')

おすすめ

転載: blog.csdn.net/weixin_45818370/article/details/124654001
おすすめ