Matlabによる画像のフーリエ変換の例

1.実験の目的

1.画像変換の意味と手段を理解する;
2.フーリエ変換の基本的な特性を
理解する; 3. FFTの方法とアプリケーションを
理解する; 4.実験を通じて2次元スペクトルの分布特性を理解する;
5.この実験を通じて利用を習得するデジタル画像のフーリエ変換を実現するためのMATLABプログラミング。

2.実験装置

1.コンピューター;
2. MATLABプログラム;
3.モバイルメモリ(フロッピーディスク、Uディスクなど);
4.記録用のペンと紙。

3.実験原理

1.フーリエ変換を用いた画像処理
フーリエ変換は、線形システム解析の強力なツールであり、デジタルシステム、サンプリングポイント、電子増幅器、コンボリューションフィルター、ノイズ、表示ポイントの影響を定量的に分析できます。 。実験を通してこのスキルを養うことは、ほとんどの画像処理問題の解決に役立ちます。仕事にデジタル画像技術を効果的に適用したい人にとっては、フーリエ変換の学習と習得に時間を費やす必要があります。
2.
フーリエ変換の定義2次元信号の場合、2次元フーリエ変換は次のように定義されます。
2次元フーリエ変換
逆変換:
二次元離散フーリエ
2次元離散フーリエ変換は次のとおりです:
2次元離散フーリエ変換
逆変換:
逆変換
画像のフーリエ変換と1次元信号のフーリエ変換フーリエ変換のように高速なアルゴリズムがありますが、詳細は参考文献を参照してくださいフーリエ変換の高速なアルゴリズムのプログラムを見つけるのは難しくありません。実際、現在フーリエ変換を実装するチップがあり、リアルタイムでフーリエ変換を実装できます。
3. MATLABソフトウェアを使用してデジタル画像のフーリエ変換とDCT変換を実現するためのプログラム。

4.実験手順

1.コンピューターの電源を入れ、MATLABプログラムをインストールして起動します。処理する画像ファイルは、プログラムグループの「work」フォルダーにある必要があります
。2。MATLABツールボックスの関数を使用して、FFTスペクトル表示の関数を描画します。3。a
)呼び出し、画像を表示する;
b)画像上でFFTおよびDCTを実行し、自己編集機能を使用してスペクトルを表示する;
c)異なる画像コンテンツとFFTおよびDCTスペクトルの間の対応を議論する。
4.実験レポートを記録して整理します。

V.実験的なコンテンツ

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

clear
clc
img=imread('peppers.png');
subplot(2,2,1);imshow(img);title('原图');
f=rgb2gray(img);    %对于RGB图像必须做的一步,也可以用im2double函数
F=fft2(f);          %傅里叶变换
F1=log(abs(F)+1);   %取模并进行缩放
subplot(2,2,2);imshow(F1,[]);title('傅里叶变换频谱图');
Fs=fftshift(F);      %将频谱图中零频率成分移动至频谱图中心
S=log(abs(Fs)+1);    %取模并进行缩放
subplot(2,2,3);imshow(S,[]);title('频移后的频谱图');
fr=real(ifft2(ifftshift(Fs)));  %频率域反变换到空间域,并取实部
ret=im2uint8(mat2gray(fr));    %更改图像类型
subplot(2,2,4);imshow(ret),title('逆傅里叶变换');

6.実験結果

MATLABで実行した後の実験結果は次のとおりです
。図1の左上隅は、MATLABプログラムに読み込まれた元の画像を示し、右上隅は、2次元フーリエ高速変換後のスペクトル画像を示し、左下隅は、スペクトルのゼロ周波数成分を行列の中心に移動した後のスペクトル画像です。右下隅は逆フーリエ変換後の画像を示しています。

図1 MATLABプログラムを実行した後の結果
図1 MATLABプログラムを実行した後の結果

7.実験で発生した問題と実験プロセスに関する考察

1. imshow関数について:
imshow関数を使用してイメージを表示する場合は、イメージマトリックスのタイプに注意してください。ダブルタイプには、imshow(I、[])を使用して、データマトリックスの値の範囲に応じて、グレーイメージの表示範囲を自動的に設定します。
詳細については、MATLAB公式Webサイトの参照ドキュメントを参照してください:表示イメージ-MATLAB imshow-MathWorks中国

2.実行時に
表示される可能性がある警告について:画像がフーリエ変換の直後にimshow関数で表示される場合、コマンドラインに表示されることがあります:警告:複素数入力の実部を表示(警告:複素数入力項目の実部を表示) )。これは、フーリエ変換後の画像行列が、実数部と虚数部を含むほとんどが複雑な行列であるためです。このとき、画像を表示する場合は、absを使用して、表示する前に複素行列の係数を取得する必要があります。
モジュラスが取得された後、イメージマトリックスの値は通常非常に大きく、関数imshowで直接表示することはできません。現時点では、log(abs(F)+1)などの対数を取得するためにlog関数を使用できるため、スペクトルをスケーリングできます。 。なぜlog(F + 1)が使用されるのかについては、下の図に示すように、(0、1)の間のx値は対数を取ると負の値になり、log(x + 1)はすべてのx値を変換します正の数値の範囲にマップします。
図2ログ
図2ログ

3.最初のim2double関数とrgb2gray関数の使用について:
RGBトゥルーカラーイメージの場合、3次元マトリックスは読み取り後に保存されます。この時点でフーリエ変換を直接実行すると、スペクトログラムは空白または密集しています。したがって、RGB画像のフーリエ変換の前に、型変換が必要です。im2doubleを使用してdouble型に変換できます(画像操作が整数型を持つことはほとんどないため、最初にこの関数を使用して画像を変換することは控えめです) 、またはrgb2grayを使用してグレースケールイメージに変換します。
異なる関数を使用すると、変換効果が異なります。たとえば、im2doubleが使用されている場合、スペクトルはフーリエ変換後の白色トーンになり、rgb2grayが使用されている場合、スペクトルは灰色トーンになります。

4.最後に、im2uint8を使用してイメージタイプを変換します。
この手順では、逆変換によって得られた行列をグレースケールイメージ(mat2gray)に変換し、イメージタイプをuint8に変換します。実際、このステップが呼び出されるかどうかは、最初の2つのタイプ変換関数の使用に関連しています。RGBイメージが最初にグレースケールイメージに変換されている場合、このステップを省略して、逆変換後のイメージを直接表示できます。最初にim2doubleを呼び出すと、このステップを省略した後にカラー画像を表示できます。もちろん、このステップはさまざまな側面でさまざまな役割を果たし、取得されたグレースケール画像は後続の操作の基礎を提供します。

関数の詳細については、MATLAB Webサイトを参照してくださいMATLAB-function

間違いがあったら訂正してください

元の13件の記事を公開 いいね32 10,000+を訪問

おすすめ

転載: blog.csdn.net/weixin_43637490/article/details/89196212