実験 4: 画像周波数領域の強調と画像復元
1. 実験の意義と目的
(1) 画像処理ツール Matlab をさらに使いこなし、Matlab をベースとした画像処理機能に慣れる。
(2) 直交変換に基づく様々な画像周波数領域強調手法を習得する。
(3) 画像修復の基本的な方法を習得する。
2. 実験内容
前の機能に基づいて、次の機能があります。
1. ノイズの多い画像の場合は、理想的なローパス フィルタリング、バターワース ローパス フィルタリング、理想的なハイパス フィルタリング、バターワース ハイパス フィルタリング、およびハイパス エンハンスメントを実行します。
実験的な比較: 異なるノイズ (ガウス、ソルト、ペッパー) を重ね合わせ、異なるカットオフ周波数を使用し、処理結果を比較します。
– 2. fspcial 関数を使用して、画像上のさまざまな劣化効果 (モーション ブラー、ガウス ブラー、平均ブラー) をシミュレートします。
– 3. ぼやけた画像に対してウィナーフィルター復元を実行する
実験的比較: 重畳ノイズがある場合とない場合の、ぼやけた画像のフィルタリング結果を比較します。
3. アルゴリズム原理
- 画像フィルタリング: 入力画像を処理してノイズを除去し、細部を滑らかにします。このうち、理想ローパス フィルタリング、バターワース ローパス フィルタリング、理想ハイパス フィルタリング、バターワース ハイパス フィルタリング、ハイパス エンハンスメントは異なるフィルタ タイプです。ローパス フィルターは、画像全体の明るさの変化など、画像内の低周波情報を抽出できます。一方、ハイパス フィルターは、画像内のエッジやテクスチャなどの高周波の詳細情報を強調表示できます。
- 画像シミュレーションの劣化: 関数 fspcial を使用して、モーション ブラー、ガウス ブラー、平均ブラーが異なるブラー カーネル タイプである劣化効果をシミュレートします。モーション ブラーは、カメラまたはオブジェクトの動きによって引き起こされる画像のブラーです。これは、動いているオブジェクトの撮影や手持ち撮影の際にカメラが揺れるときによく発生します。ガウス ブラーは、画像がガウス ノイズによって汚染されることによって発生します。平均ブラーは、単純なぼかしです。線形ぼかし法 各ピクセルの値を周囲のピクセルの平均値に置き換えます。
- ウィーナー フィルター復元: ウィーナー フィルターは、最小平均二乗誤差 (MSE) 基準に基づく復元方法であり、劣化やノイズの影響を受けた画像を復元するために使用できます。画像の詳細な情報を保持しながら、周波数領域で画像を加重平均することにより、ノイズや劣化による影響を軽減します。
4. プログラムの流れ
さまざまなフィルターを使用してノイズのある画像を処理するプログラム フロー:
- ノイズの多い画像で読んでください。
- 画像に対して理想ローパスフィルタリング、バターワースローパスフィルタリング、理想ハイパスフィルタリング、バターワースハイパスフィルタリング、ハイパス強調処理を行い、それぞれの方法で処理した画像を記録します。
- 処理画像ごとにガウスノイズとごま塩ノイズを重畳し、それぞれ処理結果を記録します。
- カットオフ周波数を変更し、上記のプロセスを再実行し、メソッドごとに異なるカットオフ周波数での結果を記録します。
- さまざまなパラメーターの下で各フィルターの処理効果を比較します。
関数 fspcial を使用してさまざまな劣化効果とウィナー フィルター復元をシミュレートするプログラム フローは次のとおりです。
- 画像を読み込み、元の画像を表示します。
- fspcial 関数を使用して、画像に対してモーション ブラー、ガウス ブラー、平均ブラーを実行し、それぞれの方法で処理された画像を記録します。
- 処理画像ごとにガウスノイズとごま塩ノイズを重畳し、それぞれ処理結果を記録します。
- 各ぼかし処理方法に対応するノイズを含む画像をウィナーフィルタ復元法を用いて処理し、処理結果を記録する。
- それぞれのぼかし方法とフィルタリングされた復元効果をノイズと比較します。
5. アルゴリズム各部の主要コードとコメント(実行結果)
1.1
f=imread('ライス.png');
f=ダブル(f);
I1=imnoise(f,'gaussian',0.1,0.1); %ガウス ノイズ汚染を画像に追加します
I4=imnoise(f,'salt&pepper'); %画像に塩とコショウのノイズ汚染を追加します
F=fftshift(fft2(f));% 画像をフーリエ変換し、周波数領域の中心を中点にシフトします。
d0=20; % カットオフ周波数
[m,n]=size(f); %理想的なローパス フィルター
h=0;
u=1:mの場合
v=1:nの場合
if sqrt((um/2)*(um/2)+(vn/2)*(vn/2))<=d0
h=1;
それ以外
h=0;
終わり
FH(u,v)=F(u,v)*h;
終わり
終わり
fh=ifft2(FH); %バターワース ローパス フィルター
nb=1;
u=1:mの場合
v=1:nの場合
hb=1/(1+(sqrt(2)-1)*(sqrt((um/2)*(um/2)+(vn/2)*(vn/2))/d0)^(2*注));
FHB(u,v)=F(u,v)*hb;
終わり
終わり
形
subplot(2,4,1),imshow(uint8(f)); title('元の画像');
subplot(2,4,2),imshow(uint8(abs(fh)),[]);title('理想的なローパスフィルター')
subplot(2,4,3),imshow(abs(fhb),[]);title('バターワース ローパス フィルター')
1.2
f=imread('ライス.png');
f=ダブル(f);
I1=imnoise(f,'gaussian',0.1,0.1); %ガウス ノイズ汚染を画像に追加します
I4=imnoise(f,'salt&pepper'); %画像に塩とコショウのノイズ汚染を追加します
F=fftshift(fft2(I1));% 画像をフーリエ変換し、周波数領域の中心を中点にシフトします。
d0=10; % カットオフ周波数
[m,n]=size(I1); %理想的なローパス フィルター
h=0;
u=1:mの場合
v=1:nの場合
if sqrt((um/2)*(um/2)+(vn/2)*(vn/2))<=d0
h=1;
それ以外
h=0;
終わり
FH(u,v)=F(u,v)*h;
終わり
終わり
fh=ifft2(FH); %バターワース ローパス フィルター
nb=1;
u=1:mの場合
v=1:nの場合
hb=1/(1+(sqrt(2)-1)*(sqrt((um/2)*(um/2)+(vn/2)*(vn/2))/d0)^(2*注));
FHB(u,v)=F(u,v)*hb;
終わり
終わり
形
subplot(2,4,1),imshow(uint8(f)); title('元の画像');
subplot(2,4,2),imshow(I1),title('ガウスノイズが汚染された画像');
subplot(2,4,3),imshow(I4),title('塩胡椒ノイズで汚染された画像');
subplot(2,4,4),imshow(uint8(abs(fh)),[]);title('ガウスノイズ汚染後の理想的なローパスフィルタリング')
subplot(2,4,5),imshow(abs(fhb),[]);title('バターワース ローパス フィルター')
1.3
f=imread('ライス.png');
f=ダブル(f);
F=fftshift(fft2(f));% 画像をフーリエ変換し、周波数領域の中心を中点にシフトします。
d0=10; % カットオフ周波数
[m,n]=size(f); %理想的なハイパス フィルタリング
h=0;
u=1:mの場合
v=1:nの場合
if sqrt((um/2)*(um/2)+(vn/2)*(vn/2))<=d0
h=0;
それ以外
h=1;
終わり
FH(u,v)=F(u,v)*h;
終わり
終わり
fh=ifft2(FH); %バターワース ハイパス フィルター
nb=1;
u=1:mの場合
v=1:nの場合
hb=1/(1+(sqrt(2)-1)*(d0/sqrt((um/2)*(um/2)+(vn/2)*(vn/2)))^(2*注));
FHB(u,v)=F(u,v)*hb;
終わり
終わり
fhb=ifft2(FHB);
Figure,subplot(1,3,1),imshow(uint8(f)); title('元の画像');
subplot(1,3,2),imshow(uint8(abs(fh)),[]);title('理想的なハイパスフィルター');;
subplot(1,3,3),imshow(abs(fhb),[]);title('バターワース ハイパス フィルター')
1.4
f=imread('ライス.png');
f=ダブル(f);
I1=imnoise(f,'gaussian',0.1,0.1); %ガウス ノイズ汚染を画像に追加します
I4=imnoise(f,'salt&pepper'); %画像に塩とコショウのノイズ汚染を追加します
F=fftshift(fft2(I4));% 画像をフーリエ変換し、周波数領域の中心を中点にシフトします。
d0=10; % カットオフ周波数
[m,n]=size(I4); %理想的なハイパス フィルタリング
h=0;
u=1:mの場合
v=1:nの場合
if sqrt((um/2)*(um/2)+(vn/2)*(vn/2))<=d0
h=0;
それ以外
h=1;
終わり
FH(u,v)=F(u,v)*h;
終わり
終わり
fh=ifft2(FH); %バターワース ハイパス フィルター
nb=1;
u=1:mの場合
v=1:nの場合
hb=1/(1+(sqrt(2)-1)*(d0/sqrt((um/2)*(um/2)+(vn/2)*(vn/2)))^(2*注));
FHB(u,v)=F(u,v)*hb;
終わり
終わり
fhb=ifft2(FHB);
形
subplot(2,3,1),imshow(uint8(f)); title('元の画像');
subplot(2,3,2),imshow(I1),title('ガウスノイズが汚染された画像');
subplot(2,3,3),imshow(I4),title('塩胡椒ノイズで汚染された画像');
subplot(2,3,4),imshow(uint8(abs(fh)),[]);title('塩胡椒ノイズ公害後の理想的なハイパス フィルタリング');
subplot(2,3,5),imshow(abs(fhb),[]);title('塩胡椒騒音公害のバターワース ハイパス フィルタリング');
2.1
%画像にノイズを追加します
I=imread('レナ.bmp');
%I=rgb2gray(I);
PSF=fspecial('モーション',31,11);
J=imfilter(I,PSF,'conv');
Figure,subplot(2,2,1),imshow(I);title('ソース画像')
subplot(2,2,2),imshow(J),title('モーションブラーイメージ')
PSF=fspecial('ディスク',5); J=imfilter(I,PSF,'conv');
subplot(2,2,3),imshow(J),title('平均ぼかし画像')
PSF=fspecial('ガウス',31,3); J=imfilter(I,PSF,'conv');
subplot(2,2,4),imshow(J),title('ガウスぼかし画像')
3.1
I=imread('レナ.bmp');
psf=fspecial('モーション',31,11);
Blured=imfilter(I,psf,'full');
wnr=deconvwnr(ぼやけた,psf,0.1);
Figure,subplot(2,2,1),imshow(I),title('元の画像')
subplot(2,2,2),imshow(ぼやけた),title('モーションブラー画像')
subplot(2,2,3),imshow(wnr),title('ウィーナーフィルター復元画像')
3.2
I=imread('レナ.bmp');
psf=fspecial('モーション',21,11);
Blured=imfilter(I,psf,'full');
ノイズ=0.1*randn(size(blurred)); %ランダムノイズ行列を生成
bn=imadd(blurred,im2uint8(noise)); %bn はノイズのあるぼやけた画像です
nsr=sum(noise(:).^2)/sum(im2double(I(:)).^2); %信号対雑音比の計算
wnr=deconvwnr(bn,psf,0.1); wnr1=deconvwnr(bn,psf,nsr);
NP=abs(fftn(noise).^2); % ノイズのある画像のエネルギーを計算します
IP=abs(fftn(im2double(I)).^2); % 元の画像のエネルギーを計算し、元の画像をノイズの多いぼやけた画像に置き換えることができます
NCORR=fftshift(real(ifftn(NP))); % ノイズ画像の相関係数を計算します
ICORR=fftshift(real(ifftn(IP))); % 元の画像の相関係数を計算します
wnr2=deconvwnr(bn,psf,NCORR,ICORR);
Figure,subplot(2,3,1),imshow(I),title('元の画像')
subplot(2,3,2),imshow(ぼやけた),title('モーションブラー画像')
subplot(2,3,3),imshow(bn),title('ノイズの多いモーション ブラー イメージ')
subplot(2,3,4),imshow(wnr),title('ノイズを考慮せずに画像を復元')
subplot(2,3,5),imshow(wnr1),title('既知の信号対雑音比で復元されたイメージ')
subplot(2,3,6),imshow(wnr2),title('既知の NCORR および ICORR 復元イメージ')
6. 結果の分析
- ノイズ画像に対する理想的なローパス フィルタリング、バターワース ローパス フィルタリング、理想的なハイパス フィルタリング、バターワース ハイパス フィルタリング、およびハイパス エンハンスメントの実験比較の結果は次のとおりです。
この実験では、同じノイズの多い画像に異なる種類のフィルターを適用し、ガウス ノイズとごま塩ノイズを追加するときに異なるカットオフ周波数を適用することで処理結果を比較します。理想的なフィルターは応答が無限大であるため、実際のアプリケーションで実装するのは難しく、画像が黒く表示されます。バターワース フィルターは、カットオフ周波数を変更することでフィルター効果を制御できます。理想的なローパス フィルターは、高周波ノイズを効果的に除去できますが、画像がぼやけます。バターワース ローパス フィルターは、ノイズ抑制と画像の明瞭さのバランスをとることができ、そのパフォーマンスはよりスムーズです。理想的なハイパス フィルターは、画像内の高周波の詳細を強調できますが、ノイズも強調する可能性があります。バターワース ハイパス フィルターは、低周波情報を抑制し、高周波情報を強調します。ハイパス強化フィルターは、高周波の詳細を可能な限り保持しながら低周波ノイズを除去できますが、この 2 つのバランスを取る適切なゲイン係数を見つける必要があります。
2. fspcial 関数を使用して、画像上のさまざまな劣化効果をシミュレートします。モーション ブラー、ガウス ブラー、平均ブラーの結果は次のように分析されます。
この実験では、同じ画像に異なる種類のぼかしフィルターを適用することで、さまざまな画像劣化効果をシミュレートします。モーション ブラーは、カメラまたはターゲット オブジェクトの動きによって生じるブラーであり、リニア モーション ブラー フィルターによってシミュレートできます。ガウス ブラーは、画像内のピクセルがランダム ノイズの影響を受けることによって生じるブラーであり、次のようにシミュレートできます。ガウス フィルター; 平均ぼかしは、画像内のピクセルを周囲のピクセルの平均で置き換えることによって引き起こされるぼやけであり、平均フィルターによってシミュレートできます。
3. ウィーナーフィルターによるぼやけた画像の復元結果の分析は次のとおりです。
1つ目は画質です。実験では、ぼやけた画像に対してウィナーフィルタ復元を実行し、処理後の画像と元の画像を比較して、処理後の画像の品質を評価しました。通常、フィルタリングされた画像は、過度の歪みがなく、鮮明度が高く、ノイズが少なく、詳細が良好である必要があります。
2つ目はフィルタリング効果です。実験では、ノイズが重畳された場合と重畳されていない場合のぼやけた画像のフィルタリング結果を比較しました。2 つのケースでフィルタリングされた画像を比較すると、ノイズが重畳されたぼやけた画像の場合は、ウィーナー フィルタリングの方がノイズをより効果的に除去して詳細を復元でき、ノイズが重畳されていないぼやけた画像の場合は、ウィーナー フィルタリングでも画像品質を向上できると結論付けることができます。ノイズが重畳されたぼやけた画像ほど劇的ではない可能性があります。
7. まとめ
画像処理を実行する場合、さまざまな種類のフィルターを使用してさまざまな効果を実現できます。この実験では、理想ローパス フィルタリング、バターワース ローパス フィルタリング、理想ハイパス フィルタリング、バターワース ハイパス フィルタリング、ハイパス エンハンスメントなどの手法を使用してノイズ画像を処理し、さまざまなカットオフ周波数と重ね合わせを行いました。さまざまなノイズを比較しました。ローパス フィルター処理により、画像内の高周波情報が除去され、低周波情報が保持され、画像が滑らかになることがわかります。一方、ハイパス フィルタリングは、画像内の高周波情報を強化し、画像をより鮮明に見せることができます。つまり、画像処理では、適切なフィルターとパラメーターを選択することが非常に重要です。実験では Matlab の fspcial 関数も使用され、モーション ブラー、ガウス ブラー、平均ブラーなど、さまざまな種類の劣化効果をシミュレートしました。これらの効果をシミュレートすることで、これらのぼかし効果が画像に及ぼす影響をよりよく理解できます。同時に、ぼやけた画像をウィーナーフィルタリングで復元する方法も学びました。この方法では、画像のノイズやぼやけを効果的に除去し、画像の鮮明さと品質を向上させることができます。全体として、この実験では関連知識をより深く理解することができ、同時に実際の応用におけるいくつかのテクニックと詳細を体験することもできました。