[コンピューター ビジョンの基礎] イメージの線形フィルター、フィルター カーネル、イメージ ノイズ、イメージの非線形フィルターなどのイメージ フィルター操作のための MATLAB プログラム | CSDN クリエイティブ チェックイン

MATLAB プログラムを使用して、次の要件を満たします。

  1. カラーまたはグレースケール画像から関心領域をキャプチャして表示します。
  2. 要件 1 の関心領域にさまざまな程度のノイズを追加するには、ガウス、ソルトアンドペッパー、局所分散など、少なくとも 3 種類のノイズを追加する必要があり、各種類のノイズを追加する必要があります。 2 つの異なるノイズ パラメータの形式で。
  3. 要件 2 で追加されたノイズ画像のノイズを除去するための線形フィルタリング方法を設計します (1 種類のノイズで十分です)。元の画像情報を最大限に保持しながらノイズを除去する必要があります。
  4. 要件 2 で追加されたノイズ画像のノイズを除去する非線形フィルタリング手法を設計します (ノイズは 1 種類で十分です)。元の画像情報を最大限に保持しながらノイズを除去する必要があります。

 MATLAB プログラム コードは次のとおりです。

%% 1、截取感兴趣区域
I=imread('lenag.bmp');
Ix=I(100:180,100:180);
%Ix=imcrop(I); %可交互式选择感兴趣区域
figure('Name','截取感兴趣区域','NumberTitle','off')
subplot(1,2,1),imshow(I),title('原图像')
subplot(1,2,2),imshow(Ix),title('感兴趣区域')
%% 2、分别添加三种噪声
%Gaussian noise
gn=imnoise(Ix,'gaussian',0,0.02);
gn1=imnoise(Ix,'gaussian',0,0.1);
figure('Name','添加高斯噪声','NumberTitle','off')
subplot(2,3,1),imshow(Ix),title('原感兴趣区域');
subplot(2,3,2),imshow(gn),title('方差0.02高斯噪声');
subplot(2,3,3),imshow(gn1),title('方差0.1高斯噪声');
subplot(2,3,4),imhist(Ix),title('原图直方图');
subplot(2,3,5),imhist(gn),title('方差0.02高斯噪声图像直方图');
subplot(2,3,6),imhist(gn1),title('方差0.1高斯噪声图像直方图');
%Salt & pepper noise
sp=imnoise(Ix,'salt & pepper',0.05);
sp1=imnoise(Ix,'salt & pepper',0.1);
figure('Name','添加椒盐噪声','NumberTitle','off')
subplot(2,3,1),imshow(Ix),title('原感兴趣区域');
subplot(2,3,2),imshow(sp),title('噪声密度0.05椒盐噪声');
subplot(2,3,3),imshow(sp1),title('噪声密度0.1椒盐噪声');
subplot(2,3,4),imhist(Ix),title('原图直方图');
subplot(2,3,5),imhist(sp),title('密度0.05椒盐噪声图像直方图');
subplot(2,3,6),imhist(sp1),title('密度0.1椒盐噪声图像直方图');
%Speckle noise
sn=imnoise(Ix,'speckle',0.02);
sn1=imnoise(Ix,'speckle',0.1);
figure('Name','添加斑点噪声','NumberTitle','off')
subplot(2,3,1),imshow(Ix),title('原感兴趣区域');
subplot(2,3,2),imshow(sn),title('方差0.02斑点噪声');
subplot(2,3,3),imshow(sn1),title('方差0.1斑点噪声');
subplot(2,3,4),imhist(Ix),title('原图直方图');
subplot(2,3,5),imhist(sn),title('方差0.02斑点噪声图像直方图');
subplot(2,3,6),imhist(sn1),title('方差0.1斑点噪声图像直方图');
%% 3、线性滤波
figure('Name','高斯噪声高斯平滑滤波','NumberTitle','off')
gs=fspecial('gaussian',[4 4],1.9);
w1=imfilter(gn,gs);
subplot(2,3,1),imshow(Ix),title('原感兴趣区域');
subplot(2,3,2),imshow(gn),title('方差0.02高斯噪声');
subplot(2,3,3),imshow(w1),title('高斯平滑滤波');
subplot(2,3,4),imhist(Ix),title('原感兴趣区域直方图');
subplot(2,3,5),imhist(w1),title('高斯平滑滤波直方图');
%% 4、非线性滤波
sel=strel(ones(2)); 
C1=imopen(sp,sel); 
D=imclose(C1,sel);
figure('Name','椒盐噪声图像形态学运算滤波','NumberTitle','off')
subplot(1,3,1),imshow(Ix),title('原感兴趣区域');
subplot(1,3,2),imshow(sp),title('噪声密度0.02椒盐噪声');
subplot(1,3,3),imshow(D),title('形态学滤波');

プログラムアルゴリズムの原理は次のとおりです。

1. 関心領域をインターセプトするために、グレースケール画像「lenag.bmp」を選択し、事前にプログラムのパスに保存し、関数 imread を使用して画像を読み取り、直接インターセプトする方法を使用しました。画像行列 画像内の対象領域をインターセプトするには、関数 imcrop を使用して対象画像をインタラクティブにインターセプトすることもできます。ここでは便宜上前者を使用します。最後に、関数 imshow を使用して、選択した画像とインターセプトされた対象の画像をそれぞれ表示します。

2. 3 種類のノイズをそれぞれ追加します。関数 imnoise を使用して、パラメーターを変更することで、インターセプトされた画像の対象領域に、さまざまなタイプのノイズをさまざまなパラメーター条件で追加することにしました。まず、ノイズ タイプを「ガウス」として選択します。 ' 分散 0.02 とガウス ノイズ 0.1 (平均値は 0) で画像に分散を追加し、異なる分散が追加されたガウス ノイズを持つ 2 つの画像を取得します。その後、ノイズ タイプとして「ソルト & ペッパー」を選択してソルトを追加します。ノイズ密度がそれぞれ 0.05 と 0.1 のペッパー ノイズを画像に追加し、異なるノイズ密度が追加されたソルト ノイズとペッパー ノイズを含む 2 つの画像を取得します。最後に、ノイズ タイプを「スペックル」として選択して、分散 0.02 と 0.1 のスペックル ノイズを追加します。それぞれの画像にスペックルノイズを追加し、異なる分散を追加した 2 つの画像を取得します; それぞれ関数 imhist を使用します 元の画像と上記の処理の結果を示すヒストグラムを比較および分析します 画像の異なる視覚的特徴を分析します実験の概要にさまざまなパラメーターを使用してさまざまなタイプのノイズを追加することによって得られます。

3. 線形フィルタリングでは、私が選択する線形フィルタリング方法はガウス平滑化フィルタです。このフィルタリング方法を使用して、分散 0.02 のガウス ノイズで画像をフィルタリングします。関数 fspecial を使用して、指定されたフィルタ カーネル サイズと標準を取得します。ガウス フィルタ次に、関数 imfilter を使用してこのフィルターを使用してノイズイメージ、ガウス平滑化フィルター カーネルのサイズと標準偏差の値を調整して画像を複数回フィルターして、より良いフィルター効果を得ることができます。 、元の画像の情報を最大限に保持するために、最後に、サイズ 4×4、標準偏差 1.9 のガウス平滑化フィルターを選択して画像をフィルター処理しました。ガウスノイズを追加した画像で、フィルタリング効果がより優れています。

4. 非線形フィルタリングで、私が選択した非線形フィルタリング方法は形態学的操作フィルタリングであり、ノイズ画像に対して形態学的開閉操作を連続して実行することでフィルタリングの目的を達成します。このフィルタリング方法を使用して、塩と胡椒をフィルタリングするようにノイズ密度を追加します。ノイズ画像が 0.05 の場合、最初に関数 strel を使用して 2×2 の形態構造要素を生成し、次に関数 imopen を使用して形態構造要素を使用してノイズ画像を開き、ノイズ画像を滑らかで切断します。 不連続性を狭くし、小さな不連続性を除去します。膨らみを抽出し、関数 imclose を使用して、形態学的構造要素を使用して、オープン操作によって得られた結果に対してクローズ操作を実行します。これにより、狭い不連続性と細いギャップが除去され、小さな穴が除去され、エッジ ラインが埋められます。最後に、フィルタリングされた画像から追加されたノイズを最大限に除去し、元の画像の情報を保持します。

プログラムを実行した結果は次のようになります。

1. 関心領域をインターセプトする

2. 3種類のノイズをそれぞれ追加

 3. 線形フィルタリング

4. 非線形フィルタリング

 これを見た友達は、帰る前に「いいね」を忘れずに!ありがとう!

ブロガーをフォローして、コンピューター ビジョンと MATLAB 画像処理の知識の基礎をさらに学びましょう。

オリジナルコンテンツを許可なく複製することはできません。

おすすめ

転載: blog.csdn.net/qq_59049513/article/details/122641988