デジタル画像処理: 実験 1

デジタル画像処理

Matlab を使用して画像を処理し、実験を記録します。
参考文献:フーリエ変換画像強調ヒストグラム、イコライゼーション

実験 1: 一般的に使用される数学的変換

1. Matlab は加算を使用して 2 つの異なる画像を重ね合わせます (カスタム)

  1. Matlab プログラム: (バージョン 2016a)
1.	clear;  
2.	clc;  
3.	I= imread('OIP-C.jpg');%读入图片1  
4.	J=imread('OIP-D.jpg');%读入图片2  
5.	Is = stretchlim(I);%计算图片1的灰度图像的最佳输入区间  
6.	Js = stretchlim(J);%同理计算图片2  
7.	Ix=imadjust(I,Is,[0;1]);%调整图片1灰度图像的灰度范围  
8.	Jx=imadjust(J,Js,[0;1]);%同理调整图片2  
9.	P=imadd(Ix,Jx);%实现2副图相加运算  
10.	subplot(1,3,1);imshow(I);%创建子图、显示图像1  
11.	title('图像1');  
12.	subplot(1,3,2),imshow(J);%创建子图、显示图像2  
13.	title('图像2');  
14.	subplot(1,3,3),imshow(P);%创建子图、显示图像3  
15.	title('两幅图像进行相加操作后效果');  

  1. 元画像、加工画像:
    ここに画像の説明を挿入
  2. 処理の説明と処理結果:

[外部リンク画像の転送に失敗しました。ソース サイトには盗難防止リンク メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-rOzwNcJ4-1667490230485)(file:///c:/user/default/) AppData/Local/Temp/msohtmlclip1 /01/clip_image003.gif)]

上記のアルゴリズム フローチャートに示すように、プログラムがワークスペースに保存されたデータを初期化してクリアした後、2 つの異なる画像を重ね合わせる場合は、まず Matlab の関数 imread を通じて 2 つの異なる画像を読み取り、2 つの画像に値を割り当てる必要があります。画像はそれぞれ受信変数 I、J を与えます。

2 つの画像が直接重ね合わされ、二重露光が発生することを考慮すると、画像に対してグレースケール処理を実行する必要があります。つまり、最初に関数ストレッチリムを通じて 2 つの画像のグレースケール画像の最適な入力間隔を計算し、 Is 変数と Js 変数に間隔値を設定します。次に、関数 imadjust を使用して、2 つの画像上の対応するグレースケール画像のグレースケール範囲を調整し、グレースケール処理された 2 つの画像 Ix および XXS を取得します。最後に、関数 imadd を使用して Ix と Jx を重ね合わせ、加算後の 2 つの画像を取得します。 Pの プログラムの終了前に、2 つの元の画像 I と J と加工画像 P がそれぞれ表示され、エフェクト画像から 2 つの画像がうまく重ね合わされていることがわかります。

2. Matlab は減算を使用して、同じシーンの違いがある 2 つのイメージ (カスタマイズされた) を減算します。

  1. Matlab プログラム: (バージョン 2016a)
1.	clear;  
2.	clc;  
3.	I= imread('OIP-C.jpg');%读入图片1  
4.	J=imread('OIP-D.jpg');%读入图片2  
5.	P=imadd(I,J);%得到未进行灰度处理的加法图  
6.	imwrite(P,'OIP-E.jpg');%把处理过的图片写出保存  
7.	%图像相减  
8.	%实现2副存在差异的图相减运算
9.	Px=imsubtract(P,I);
10.	%实现2副相同图做减法运算 
11.	%Px=imsubtract(P,P);
12.	subplot(1,3,1),imshow(P),xlabel('A');  
13.	subplot(1,3,2),imshow(I),xlabel('B');  
14.	subplot(1,3,3),imshow(Px),xlabel('A-B');  

  1. 元の画像、処理された画像。

シナリオ 1: 同じシーンに差分がある 画像の減算:

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-laCs3SvJ-1667490230486)(file:///c:/user/default/AppData) /Local/Temp/msohtmlclip1 /01/clip_image002.jpg)]

シナリオ 2: 同じ 2 つの画像の減算:

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-Q60Dqwhd-1667490230487)(file:///c:/user/default/AppData) /Local/Temp/msohtmlclip1 /01/clip_image004.jpg)]

  1. 処理の説明と処理結果:

ここに画像の説明を挿入

上記のアルゴリズム フローチャートに示すように、プログラムはデータを保存するためにワークスペースを初期化してクリアした後、最初に同じシーンの違いのある 2 つの画像を取得する必要があるため、上記の加算アルゴリズムと、得られた加算画像を他の 2 つの画像と同様に計算する 同じシーン内でも画像の使用方法に違いがあります。

グレースケール操作を行わずにイメージ 3 を取得するには、最初にイメージ 1 と 2 を読み込み、関数 imwrite を使用してイメージ 3 を保存する必要があります。差分のある 2 つのイメージを取得した後、関数 imsubtract を使用して 2 つのイメージを減算し、最後に処理されたイメージを表示します。

減算演算には 2 種類あり、コードを変更することで得られる画像は 2 種類あり、1 つは同じシーン内の差分のある 2 枚の画像を減算するもので、次のような効果が得られます。もう 1 つは、2 つの同一の画像が減算された状況で、減算処理後の画像全体が完全に黒であることがわかります。これは、減算された 2 つの画像が同じであることを意味します。

3. Matlab を使用して、画像のパワー スペクトルと位相スペクトルを計算します (カスタマイズ。明らかなテクスチャ特徴を持つことをお勧めします)。

  1. Matlab プログラム: (バージョン 2016a)
1.	clc;  
2.	clear;  
3.	img = imread('hua.jpg');  
4.	imggray = rgb2gray(img);%灰度处理  
5.	imgf = fft2(imggray);%傅里叶变换二维快速傅里叶变换函数  
6.	imgfshift = fftshift(imgf);%频谱图中零频率成分移动至频谱图中心  
7.	%获得傅里叶变换的幅度谱  
8.	imgA = log(1+abs(imgfshift));%对数变换,压缩动态范围  
9.	%由幅度谱求出功率谱 对信号傅里叶变换--幅度谱--取模求平方--功率谱  
10.	imgB=abs(imgfshift).^2;  
11.	imgB=10 * log10(imgB);  
12.	%获得傅里叶变换的相位谱  
13.	imgPhase = log(angle(imgfshift)*180/pi);  
14.	%变换后图像矩阵大多是复试矩阵,包含实部虚部  
15.	%需要对数组元素进行绝对值处理求其复数矩阵的模,在进行对数变换进行显示  
16.	imgPhase=log(abs(imgPhase)+1);  
17.	subplot(2,2,1);  
18.	imshow(img);  
19.	title('原图像');  
20.	subplot(2,2,2);  
21.	imshow(imggray);  
22.	title('灰度处理后的原图像');  
23.	subplot(2,2,3);  
24.	imshow(imgB,[]); %显示图像的功率谱,参数’[]'是为了将其值线性拉伸  
25.	title('图像功率谱');  
26.	subplot(2,2,4);  
27.	imshow(imgPhase,[]);  
28.	title('图像相位谱');  

  1. 元の画像、処理された画像。
    ここに画像の説明を挿入

  2. 処理のプロセスと結果の説明。

[外部リンク画像の転送に失敗しました。ソース サイトには盗難防止リンク メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-BHhb2NlV-1667490230492)(file:///c:/user/default/) AppData/Local/Temp/msohtmlclip1 /01/clip_image001.gif)]

上記のアルゴリズム フローチャートに示すように、プログラムがデータを保存するためにワークスペースを初期化してクリアした後、最初に画像 1 を読み込み、関数 rgb2gray を使用してそのグレースケール イメージを取得します。グレースケール イメージを取得した後、次に従ってスペクトル図を取得します。フーリエ変換への変換、2 次元高速フーリエ変換関数 fft2 を選択してグレースケール イメージを処理し、スペクトログラムで関数 fftshift を使用してスペクトログラムの 0 周波数成分をスペクトログラムの中心に移動し、次にスペクトログラムからそれぞれパワーマップ、およびスペクトログラムから位相マップへ 画像のパワーダイアグラムとフェーズダイアグラムを計算する式。

プログラムを初めて実行すると、「警告: 複素入力項目の実部を表示します。」というプロンプト メッセージが表示されますが、関連情報を照会した後、フーリエ変換後に関数 imshow によって画像が直接表示されることがわかります。 、上記のエラーが表示されます。したがって、処理された位相マップとパワーマップに対して二次処理を実行する必要があります。つまり、abs 関数を使用してその複素行列の係数を取得し、対数変換により画像表示を最適化する必要があります。

おすすめ

転載: blog.csdn.net/TianHW103/article/details/127680724