第一篇:數字圖像處理圖像變換實驗報告
數字圖象處理實驗指導書
實驗一 圖象變換實驗
實 驗
實驗名稱:圖像處理姓名:劉強
班級:電信
學號:
報 告
1102
1404110128
數字圖象處理實驗指導書
實驗一 圖象變換實驗
實驗一 圖像變換實驗——圖像點運算、幾何變換及正交變換
一、實驗條件
PC機 數字圖像處理實驗教學軟件
大量樣圖
二、實驗目的
1、學習使用“數字圖像處理實驗教學軟件系統”,能夠進行圖像處理方面的簡單操作;
2、熟悉圖像點運算、幾何變換及正交變換的基本原理,了解編程實現的具體步驟;
3、觀察圖像的灰度直方圖,明確直方圖的作用和意義;
4、觀察圖像點運算和幾何變換的結果,比較不同參數條件下的變換效果;
5、觀察圖像正交變換的結果,明確圖像的空間頻率分布情況。
三、實驗原理
1、圖像灰度直方圖、點運算和幾何變換的基本原理及編程實現步驟
圖像灰度直方圖是數字圖像處理中一個最簡單、最有用的工具,它描述了一幅圖像的灰度分布情況,為圖像的相關處理操作提供了基本信息。
圖像點運算是一種簡單而重要的處理技術,它能讓用戶改變圖像數據占據的灰度范圍。點運算可以看作是“從象素到象素”的復制操作,而這種復制操作是通過灰度變換函數實現的。如果輸入圖像為A(x,y),輸出圖像為B(x,y),則點運算可以表示為:
B(x,y)=f[A(x,y)] 其中f(x)被稱為灰度變換(Gray Scale Transformation,GST)函數,它描述了輸入灰度值和輸出灰度值之間的轉換關系。一旦灰度變換函數確定,該點運算就完全確定下來了。另外,點運算處理將改變圖像的灰度直方圖分布。點運算又被稱為對比度增強、對比度拉伸或灰度變換。點運算一般包括灰度的線性變換、閾值變換、窗口變換、灰度拉伸和均衡等。
圖像幾何變換是圖像的一種基本變換,通常包括圖像鏡像變換、圖像轉置、圖像平移、圖像縮放和圖像旋轉等,其理論基礎主要是一些矩陣運算,詳細原理可以參考有關書籍。
實驗系統提供了圖像灰度直方圖、點運算和幾何變換相關內容的文字說明,用戶在操作過程中可以參考。下面以圖像點運算中的閾值變換為例給出編程實現的程序流程圖,如下:
數字圖象處理實驗指導書
實驗一 圖象變換實驗
2、圖像正交變換的基本原理及編程實現步驟 數字圖像的處理方法主要有空域法和頻域法,點運算和幾何變換屬于空域法。頻域法是將圖像變換到頻域后再進行處理,一般采用的變換方式是線性的正交變換(酉變換),主要包括傅立葉變換、離散余弦變換、沃爾什變換、霍特林變換和小波變換等。正交變換被廣泛應用于圖像特征提取、圖像增強、圖像復原、圖像壓縮和圖像識別等領域。
正交變換實驗的重點是快速傅立葉變換(FFT),其原理過于復雜,可以參考有關書籍,這里不再贅述。至于FFT的編程實現,系統采用的方法是:首先編制一個一維FFT程序模塊,然后調用該模塊對圖像數據的列進行一維FFT,再對行進行一維FFT,最后計算并顯示幅度譜。程序流程圖如下:
四、實驗內容
圖像灰度直方圖
點運算:圖像反色、灰度線性變換、閾值變換、窗口變換、灰度拉伸和灰度
數字圖象處理實驗指導書
實驗一 圖象變換實驗
均衡
幾何變換:圖像鏡像變換、圖像轉置、圖像平移、圖像縮放和圖像旋轉 正交變換:傅立葉變換、離散余弦變換、沃爾什變換、霍特林變換和小波正反變換
注意:
1、所有實驗項目均針對8位BMP灰度圖像進行處理,其它格式(如JPG)的圖像可以利用系統提供的圖像格式轉換工具進行轉換,再進行處理;
2、本次實驗的重點是圖像的灰度直方圖和點運算,幾何變換和正交變換只作一般性了解。
五、實驗步驟
以圖像灰度閾值變換為例說明實驗的具體步驟,其它實驗項目的步驟與此類似。
1、打開計算機,在系統桌面上雙擊“數字圖像處理實驗教學軟件系統”的可執行文件“圖象處理”的圖標,進入實驗系統;
2、執行文件→打開,在OPEN對話框中選擇待處理的圖像,按【OK】后系統顯示出圖像;
3、執行查看→圖像基本信息,將顯示圖像基本信息對話框,如圖所示;
數字圖象處理實驗指導書
實驗一 圖象變換實驗
4、執行查看→灰度直方圖,查看圖像的灰度直方圖,如圖所示;
5、執行圖像變換→正交變換→傅立葉變換,查看圖像的頻率域分布情況,如圖所示;
數字圖象處理實驗指導書
實驗一 圖象變換實驗
6、執行圖像變換→正交變換→小波變換,查看圖像經過小波變換的效果,如圖所示;
7、執行圖像變換→點運算→閾值變換,修改閾值變換對話框中的閾值參數,如圖所示;
數字圖象處理實驗指導書
實驗一 圖象變換實驗
8、設置完閾值參數后按【OK】,系統顯示閾值變換后的圖像,與原圖像進行比較,觀察閾值變換的效果,如圖所示;
9、重復步驟4,查看閾值變換后圖像的直方圖分布情況;
數字圖象處理實驗指導書
實驗一 圖象變換實驗
10、重復步驟5,查看閾值變換后圖像的頻率域分布情況;
11、執行文件→保存或另存為,保存處理后的圖像;
12、執行文件→重新加載,重新加載原始圖像,但要注意先前對圖像的處理將會丟失; 注意:
13、在執行步驟2時可能會出現有些圖像文件不能打開的情況,如圖所示,此時可以先利用圖像格式轉換工具將圖像文件轉換為8位BMP圖像,再利用系統進行處理。步驟14和15是使用圖像格式轉換工具的方法;
14、在桌面上雙擊圖像格式轉換工具Jpg2bmp的圖標,進入轉換工具界面,如圖所示;
15、按照界面提示,把JPG格式的圖像文件轉換成8位BMP圖像。
數字圖象處理實驗指導書
實驗一 圖象變換實驗
步驟13示意圖
步驟14示意圖
六、思考題
1、圖像灰度線性變換、閾值變換、窗口變換、灰度拉伸和灰度均衡之間有何區別?
灰度線性變換就是將圖像的像素值通過指定的線性函數進行變換,以此增強或者減弱圖像的灰度。
灰度的閾值變換可以讓一幅圖像變成黑白二值圖。
灰度的窗口變換也是一種常見的點運算。它的操作和閾值變換類似。從實現方法上可以看作是灰度折線變換的特列。窗口灰度變換處理結合了雙固定閾值法,與其不同之處在于窗口內的灰度值保持不變。
灰度拉伸又叫做對比度拉伸,它與線性變換有些類似,不同之處在于灰度拉伸使用的是分段線性變換,所以它最大的優勢是變換函數可以由用戶任意合成。
灰度均衡是增強圖像的有效方法之一。灰度均衡同樣屬于改進圖像的方法,灰度均衡的圖像具有較大的信息量。從變換后圖像的直方圖來看,灰度分布更加均勻。
2、利用圖像鏡像和旋轉變換可以實現圖像轉置嗎?如果可以,應該怎樣實現?
可以。進行一次鏡像變換,順(逆)時針旋轉兩次,再以與第一次相反的方向鏡像變換。
數字圖象處理實驗指導書
實驗一 圖象變換實驗
實驗二 圖像增強及復原實驗
七、實驗條件
PC機 數字圖像處理實驗教學軟件
大量樣圖
八、實驗目的
1、熟練使用“數字圖像處理實驗教學軟件系統”;
2、熟悉圖像增強及復原的基本原理,了解編程實現的具體步驟;
3、觀察圖像中值濾波、平滑、銳化和偽彩色編碼的結果,比較不同參數條件下的圖像增強效果;
4、觀察圖像退化和復原的結果,比較不同復原方法的復原效果。
九、實驗原理
1、圖像增強和復原的基本原理
對降質圖像的改善處理通常有兩類方法:圖像增強和圖像復原。
圖像增強不考慮圖像降質的原因,只將圖像中感興趣的特征有選擇地進行突出,并衰減圖像的次要信息,改善后的圖像不一定逼近原始圖像,只是增強了圖像某些方面的可讀性,如突出了目標輪廓,衰減了各種噪聲等。圖像增強可以用空域法和頻域法分別實現,空域法主要是在空間域中對圖像象素灰度值直接進行運算處理,一般包括中值濾波、模板平滑和梯度銳化等,空域法可以用下式來描述:
g(x,y)=f(x,y)*h(x,y)其中f(x,y)是處理前圖像,g(x,y)表示處理后圖像,h(x,y)為空間運算函數。圖像增強的頻域法是在圖像的頻率域中對圖像的變換值進行某種運算處理,然后變換回空間域,系統涉及的各種濾波器屬于頻域法增強,這是一種間接處理方法,可以用下面的過程模型來描述:
其中:F(u,v)=?[ f(x,y)],G(u,v)= F(u,v)H(u,v),g(x,y)=??1[ G(u,v)],?和??1分別表示頻域正變換和反變換。實驗系統提供了圖像增強相關內容的文字說明,用戶在操作過程中可以參考。
圖像復原是針對圖像降質的原因,設法去補償降質因素,使改善后的圖像盡可能逼近原始圖像,提高了圖像質量的逼真度。關于圖像復原的詳細原理可以參考相關書籍,這里不再贅述。本系統提供了圖像的噪聲退化、卷積退化和運動模糊退化操作,并提供了相應的逆濾波復原、維納復原和運動模糊復原操作。本次
數字圖象處理實驗指導書
實驗一 圖象變換實驗
實驗中圖像復原只作一般性了解。
2、編程實現步驟
下面以圖像增強中的中值濾波操作為例給出編程實現的程序流程圖,如下:
十、實驗內容
圖像增強:中值濾波、圖像模板平滑、理想低通濾波器平滑、巴特沃斯低通濾波器平滑、梯度銳化、拉普拉斯銳化、理想高通濾波器銳化、巴特沃斯高通濾波器銳化和偽彩色編碼
圖像復原:圖像的噪聲退化、卷積退化、卷積加噪聲退化、運動模糊退化、逆濾波復原、維納復原和運動模糊復原
注意:
3、所有實驗項目均針對8位BMP灰度圖像進行處理;
4、本次實驗的重點是圖像增強中的中值濾波和模板平滑,圖像復原只作一般性了解。
十一、實驗步驟
以圖像中值濾波操作為例說明實驗的具體步驟,其它實驗項目的步驟與此類似。
11、打開計算機,在系統桌面上雙擊“數字圖像處理實驗教學軟件系統”的可執行文件“圖象處理”的圖標,進入實驗系統;
12、執行文件→打開,在OPEN對話框中選擇待處理的圖像,按【OK】后系統顯示出圖像;
數字圖象處理實驗指導書
實驗一 圖象變換實驗
13、執行查看→圖像基本信息,將顯示圖像基本信息對話框,如圖所示;
14、執行查看→灰度直方圖,查看圖像的灰度直方圖,如圖所示;
數字圖象處理實驗指導書
實驗一 圖象變換實驗
15、執行圖像變換→正交變換→傅立葉變換,查看圖像的頻率域分布情況,如圖所示;
16、執行圖像增強→中值濾波,選擇或自定義對話框中的濾波器參數,如圖所示;
數字圖象處理實驗指導書
實驗一 圖象變換實驗
17、設置完濾波器參數后按【OK】,系統顯示中值濾波后的圖像,與原圖像進行比較,觀察中值濾波的效果,如圖所示;
18、重復步驟4,查看中值濾波后圖像的直方圖分布情況;
數字圖象處理實驗指導書
實驗一 圖象變換實驗
19、重復步驟5,查看中值濾波后圖像的頻率域分布情況;
10、執行文件→保存或另存為,保存處理后的圖像;
11、執行文件→重新加載,重新加載原始圖像,但要注意先前對圖像的處理將會丟失。
數字圖象處理實驗指導書
實驗一 圖象變換實驗
十二、思考題
1、圖像中值濾波和模板平滑之間有何區別?
圖像平滑處理就是用平滑模板對圖像進行處理,以減少圖像的噪聲。而中值濾波是一種非線性的信號處理方法。
2、圖像增強和圖像復原之間有何區別?
圖像增強:利用一定的技術手段,不用考慮圖像是否失真(即原 始圖像在變換后可能會失真)而且不用分析圖像降質的原因。針對給定圖像的應用場合,有目的地強調圖像的整體或局部特性,將原來不清晰的圖像變得清晰或強調某些感興趣的特征,擴大圖像中不同物體特征之間的差別,抑制不感興趣的特征,使之改善圖像質量、豐富信息量,加強圖像判讀和識別效果,滿足某些特殊分析的需要。
圖像復原:針對質量降低或者失真的圖像,恢復圖像原始的內容或者質量。圖像復原的過程包含對圖像退化模型的分析,再對退化的圖像進行復原。圖像退化是由于成像系統受各種因素的影響,導致了圖像質量的降低,稱之為圖像退化。這些因素包括傳感器噪聲、攝像機聚焦不佳、物體與攝像機之間的相對移動、隨機大氣湍流、光學系統的象差、成像光源和射線的散射等。圖像復原大致可以分為兩種方法:
一種方法適用于缺乏圖像先驗知識的情況,此時可對退化過程建立模型進行描述,進而尋找一種去除或消弱其影響的過程,是一種估計方法;
另一種方法是針對原始圖像有足夠的先驗知識的情況,對原始圖像建立一個數學模型并根據它對退化圖像進行擬合,能夠獲得更好的復原效果。
3、圖像維納復原為什么比逆濾波復原效果好?
維納濾波復原的原理可表示為
對于維納濾波,由上式可知,當
時,由于存在 項,所以數字圖象處理實驗指導書
實驗一 圖象變換實驗
不會出現被0除的情形,同時分子中含有項,在處。當時,此時維納濾波就變成 了逆濾波;當時,表明維納濾波避免了逆濾波中 出現的對噪聲過多的放大作用,也就是說圖像維納復原比逆濾波復原效果好。
第二篇:數字圖像處理——彩色圖像實驗報告
6.3實驗步驟
(1)對彩色圖像的表達和顯示
* * * * * * * * * * * *顯示彩色立方體* * * * * * * * * * * * *
rgbcube(0,0,10);
%從正面觀察彩色立方體
rgbcube(10,0,10);%從側面觀察彩色立方 rgbcube(10,10,10);%從對角線觀察彩色立方體
%* * * * * * * * * *索引圖像的顯示和轉換* * * * * * * * * f=imread('D:PictureFig0604(a)(iris).tif');figure,imshow(f);
%f是RGB真彩圖像
%rgb圖像轉換成8色索引圖像,不采用抖動方式
[X1,map1]=rgb2ind(f,8,'nodither');figure,imshow(X1,map1);
%采用抖動方式轉換到8色索引圖像
[X2,map2]=rgb2ind(f,8,'dither');figure,imshow(X2,map2);%顯示效果要好一些 g=rgb2gray(f);
%f轉換為灰度圖像
g1=dither(g);
%將灰色圖像經過抖動處理,轉換打二值圖像figure,imshow(g);
%顯示灰度圖像
figure,imshow(g1);
%顯示抖動處理后的二值圖像
程序運行結果:
*
彩色立方體原圖
不采用抖動方式轉換到8色索引圖像采用抖動方式轉換到8色索引圖像
灰度圖像抖動處理后的二值圖像
(2)彩色空間轉換
f=imread('D:PictureFig0604(a)(iris).tif');figure,imshow(f);
%轉換到NTSC彩色空間
%f是RGB真彩圖像
ntsc_image=rgb2ntsc(f);
figure,imshow(ntsc_image(:,:,1));%顯示亮度信息 figure,imshow(ntsc_image(:,:,2));%顯示色差信息 figure,imshow(ntsc_image(:,:,3));%顯示色差信息
%轉換到HIS彩色空間
hsi_image=rgb2hsi(f);
figure,imshow(hsi_image(:,:,1));%顯示色度信息 figure,imshow(hsi_image(:,:,2));%顯示飽和度信息 figure,imshow(hsi_image(:,:,3));%顯示亮度信息
程序運行結果:
原圖
轉換到NTSC彩色空間
顯示亮度信息顯示色差信息顯示色差信息
轉換到HIS彩色空間
顯示色差信息顯示飽和度信顯示亮度信息
(3)彩色變換
f=imread('D:PictureFig0614(a)(Chalk Original).tif');
G=ice('image',f);
%打開ice窗口對圖像進行調整
%在窗口中執行以下操作:
%a)得到圖像的補色
%b)拖動映射曲線,對圖像顯示效果進行修改
%c)在顏色通道中選中某一顏色,然后對映射曲線進行修改
程序運行結果(1):
全彩色圖片ICE窗口
它的補色ICE窗口
拖動映射曲線,圖像的顯示效果
ICE窗口
f2=imread('D:Picture JLK Magenta.tif');figure,imshow(f2);%在CMYK彩色空間內打開圖像 選擇Red
ICE窗口
g2=ice('image',f2,'space','CMYK');
%f2的圖像色彩偏紅,拖動映射曲線,%調整映射參數,使圖像的色彩看起來比較正常。
程序運行結果(2)
原圖
在CMYK彩色空間內打開圖像
調整映射參數后
ICE窗口
(4)彩色空間濾波
%* * * * * * * * * * * * * * * * * * * * 彩色圖像平滑 * * * * * * * * * * * * * * * * * * * * * *
fc=imread('D:PictureFig0604(a)(iris).tif');figure,imshow(fc);h=rgb2hsi(fc);
H=h(:,:,1);
S=h(:,:,2);
I=h(:,:,3);
%轉換到HIS彩色空間
%色度分量
%飽和度分量
%亮度分量
%25×25的方形平滑算子 w=fspecial('average',25);
I_filtered=imfilter(I,w,'replicate');%對亮度分量進行平滑操作 H1=cat(3,H,S,I_filtered);%將H、S、I三個分量重新組合起來f=hsi2rgb(H1);
f=min(f,1);
%轉換到RGB彩色空間
%f的值控制在[0,1]之間
figure,imshow(f);
%彩色圖像平滑處理 %* * * **** * * * * * * * * * * * * 彩色圖像銳化 * * * * * * * * * * * * * * * * * * * * * *
fb=imread('D:PictureFig0604(a)(iris).tif');lapmask=[1 1 1;1-8 1;1 1 1];%拉普拉斯算子 g=imfilter(fb,lapmask,'replicate');%拉普拉斯算子處理 figure,imshow(g);
%圖像銳化后與原圖像相減
fen=imsubtract(fb,g);
figure,imshow(fen);%顯示差值圖像
程序運行結果:
原圖彩色圖像平滑處理
拉普拉斯算子處理
銳化處理
(5)彩色圖像分割
%* * * * * * * * * * * * * * * * * 彩色邊緣檢測* * * * * * * * * * * *
close all;clear;clc;
f=imread('iris.tif');%f如圖6-4所示
%直接計算彩色邊緣VG,并得到對單獨彩色平面的二維梯度求和形成的梯度PPG
[VG,A,PPG]=colorgrad(f);
figure,imshow(VG,[ ]);
%顯示彩色梯度圖像 figure,imshow(A,[ ]);
%顯示彩色梯度對應的角度圖像
figure,imshow(PPG,[ ]);
%顯示分量梯度圖像
g=VG-PPG;
%計算兩種梯度方法得到的梯度之差 figure,imshow(g,[ ]);
程序運行結果:
%顯示差值圖像
彩色梯度圖像 彩色梯度對應的角度圖像
分量梯度圖像兩種梯度差值圖像
%* * * * * * * * * * * * * * * * * 彩色圖像分割 * * * * * * * * * * * * * * * * * * * * * * * * *
f=imread('jupitermoon.tif');%f如圖6-4所示 mask=roipoly(f);
%取得選定區域圖像的紅色分量
%手工選定圖中紅色區域
R=immultiply(mask,f(:,:,1));
%取得選定區域圖像的綠色分量
G=immultiply(mask,f(:,:,2));%取得選定區域圖像的藍色分量
B=immultiply(mask,f(:,:,3));
g=cat(3,R,G,B);
%取得選定區域的RGB圖像 figure,imshow(g);
%顯示取得選定區域
[M,N,K]=size(g);
%選定區域的大小
I=reshape(g,M*N,3);
%對g中的像素進行重排,按列序拉成一行 idx=find(mask);
%找到mask中的像素在重排后的圖像g中位置 I=double(I(idx,1:3));
%轉換到double類型 [C,m]=covmatrix(I);
%計算協方差矩陣C主對角線上的元素,即方差 %>>sd=sqrt(d)%求得這些元素的平方根,即均方差
均方差
%用歐式距離對圖像進行彩色分割,閾值為25
E25=colorseg('euclidean',f,25,m);E251=f;E251(E25==0)=0 figure,imshow(E251,[]);
%用馬氏距離對圖像進行彩色分割,閾值為25 M25=colorseg('mahalanobis',f,25,m,C);figure , imshow(M25 , [ ]);程序運行結果:
原圖選定區域
歐氏距離彩色分割馬氏距離彩色分割
6.4 思考題
(1)請將圖6-1所示的彩色圖像轉換到灰度圖像,并根據灰度值對此灰度圖像進行索引化,手工指定索引表中的RGB值,并把此索引圖像顯示出來。
程序代碼如下
%思路:把原圖想轉換為128位索引圖
close all;clear;clc;%將f從灰度圖像轉換為索引圖像,x是索引圖像; %map是索引矩陣,R,G,B的值都相等
f=imread('D:PictureRGB_iris.tif');figure,imshow(f);
%f是RGB圖像 f1=rgb2gray(f);
%將f轉換成灰度圖像 figure,imshow(f1);[x,map]=gray2ind(f1,128);
figure,imshow(x);%將map中的值做下面改變則R,G,B的值不相等,產生彩色
%把灰度圖像轉化成128位的索引圖
map(1,:)=0.5;map(: ,1)=0.5;map(2,:)=0.4;map(1,1)=0;figure,imshow(f1,map);
程序運行結果:
原RGB圖像
灰度圖像
索引圖 修改索引表后的圖像
(2)6.3節的(4)是將圖像轉換到HIS空間后再對亮度分量進行平滑操作,試直接對原圖像的RGB三個分量分別進行平滑操作,并計算兩種操作方法的圖像差值。
程序代碼如下:
f=imread('D:PictureRGB_iris.tif');figure,imshow(f);%直接對原圖像的RGB三個分量分別進行平滑操作 H=f(:,:,1);
S=f(:,:,2);
I=f(:,:,3);
%色度分量
%飽和度分量
%亮度分量
%25×25的方形平滑算子 w=fspecial('average',25);
H_filtered=imfilter(H,w,'replicate');
%對色度分量進行平滑操作 S_filtered=imfilter(S,w,'replicate');
%對飽和度分量進行平滑操作 I_filtered=imfilter(I,w,'replicate');
%對亮度分量進行平滑操作 %將H、S、I三個分量重新組合起來
Ha=cat(3,H_filtered,S_filtered,I_filtered);Ha=im2double(Ha);
%轉化成double類型 figure,imshow(Ha);%轉換到HIS彩色空間 h=rgb2hsi(f);
%轉換到HIS彩色空間
H=h(:,:,1);
S=h(:,:,2);
I=h(:,:,3);
%色度分量
%飽和度分量 %亮度分量 %25×25的方形平滑算子 w=fspecial('average',25);
I_filtered=imfilter(I,w,'replicate');%對亮度分量進行平滑操作 %將H、S、I三個分量重新組合起來 H1=cat(3,H,S,I_filtered);fb=hsi2rgb(H1);
%轉換到RGB彩色空間 fb=min(fb,1);
figure,imshow(fb);
%f的值控制在[0,1]之間
%彩色圖像平滑處理
fen=imsubtract(Ha,fb);figure,imshow(fen);程序運行結果:
%計算兩中方式處理后圖像的差值
原圖
直接對RGB三分量進行平滑操作轉換到HIS空間對亮度進行平滑操作
差值圖像
試驗中的問題和心得體會:
本次實驗是彩色圖像處理。
(1)通過這個實驗我了解了RGB圖像以及索引圖像在MATLAB中的存儲和詢問方式
(2)了解RGB空間到其他彩色空間的轉換方式和轉換方法(3)知道了一些彩色圖像的空間濾波方法(4)了解在RGB向量空間中檢測彩色邊緣的方法(5)了解在RGB向量空間中對圖像進行分割的方法
遇到的問題:在做思考題(2)的時候,計算兩種平滑處理的得到圖像的差值的中程序出現了問題,經過看出錯信息,認真檢查程序后,發現是因為直接平滑處理的圖像是unit8類型的,而轉換到HIS空間后,得到的圖像是double類型,二者的類型不同,導致使用imsubtract函數的時候出現了問題。感覺做matlab的實驗和平時編寫C代碼的時候有很多地方是相同的,都會經歷:編碼,debug,正確這三個過程,這個過程本身就具有挑戰性和趣味性。
第三篇:數字圖像處理實驗報告
數字圖像處理
實驗報告
目錄
1.數字圖像處理簡介
2.實驗目的3.實驗內容
4.實驗結果及代碼展示
5.算法綜述
6.Matlab優勢
7.總結
8.存在問題
一、數字圖像處理簡介
圖像處理,是對圖像進行分析、加工、和處理,使其滿足視覺、心理以及其他要求的技術。圖像處理是信號處理在圖像域上的一個應用。目前大多數的圖像是以數字形式存儲,因而圖像處理很多情況下指數字圖像處理。此外,基于光學理論的處理方法依然占有重要的地位。
圖像處理是信號處理的子類,另外與計算機科學、人工智能等領域也有密切的關系。
傳統的一維信號處理的方法和概念很多仍然可以直接應用在圖像處理上,比如降噪、量化等。然而,圖像屬于二維信號,和一維信號相比,它有自己特殊的一面,處理的方式和角度也有所不同。
二、實驗目的
鞏固所學知識,提高所學能力
三、實驗內容
利用matlab的GUI程序設計一個簡單的圖像處理程序,并含有如下基本功能: 1.讀入一幅RGB圖像,變換為灰度圖像和二值圖像,并在同一個窗口內分成三個子窗口來分別顯示RGB圖像和灰度圖像,注上文字標題 2.對給定圖像進行旋轉
3.對給定的圖像添加噪聲(椒鹽噪聲、高斯噪聲)
四、實驗結果及代碼展示
1.軟件設計界面
2.各模塊功能展示以及程序代碼
(1)讀入一幅RGB圖像,變換為灰度圖像和二值圖像,并在同一個窗口內分成三個子窗口來分別顯示RGB圖像和灰度圖像,注上文字標題
效果展示:
代碼:
a = imread('C:Documents and SettingsAdministrator桌面數字圖像舞美.JPG');
i = rgb2gray(a);I = im2bw(a,0.5);
subplot(3,1,1);imshow(a);title('源圖像')subplot(3,1,2);imshow(i);title('灰度圖像')subplot(3,1,3);imshow(I);title('二值圖像')
(2)圖像旋轉 原圖
效果展示:
代碼:
clc;clear all;close all;
Img=imread('D:My DocumentsMy Pictures5.JPG');Img=double(Img);[h w]=size(Img);alpha=pi/4;
wnew=w*cos(alpha)+h*sin(alpha);hnew=w*sin(alpha)+h*cos(alpha);wnew=ceil(wnew);
hnew=ceil(hnew);u0=w*sin(alpha);
T=[cos(alpha),sin(alpha);-sin(alpha),cos(alpha)];Imgnew2=zeros(hnew,wnew);Imgnew1=zeros(hnew,wnew);for u=1:hnew
for v=1:wnew
tem=T*([u;v]-[u0;0]);x=tem(1);y=tem(2);if x>=1&&x<=h&&y>=1&&y<=w x_low=floor(x);x_up=ceil(x);y_low=floor(y);y_up=ceil(y);if(x-x_low)<=(x_up-x)x=x_low;
else
x=x_up;
end
if(y-y_low)<=(y_up-y)y=y_low;
else
y=y_up;
end
p1=Img(x_low,y_low);p2=Img(x_up,y_low);p3=Img(x_low,y_low);p4=Img(x_up,y_up);s=x-x_low;t=y-y_low;Imgnew1(u,v)=Img(x,y);
Imgnew2(u,v)=(1-s)*(1-t)*p1+(1-s)*t*p3+(1-t)*s*p2+s*t*p4;end
end end
figure;imshow(Imgnew2,[]);B=imrotate(Img,alpha/pi*180);figure;imshow(B,[]);
(3)對給定的圖像添加噪聲(斑點噪聲、高斯噪聲)效果展示:
代碼:
I= imread('D:My DocumentsMy Pictures5.JPG');figure,subplot(211);imshow(I);title('原圖');J1=imnoise(I,'gaussian',0,0.02);
subplot(223);imshow(J);title('添加高斯噪聲');J=imnoise(I,'speckle',0.04);
subplot(224);imshow(J);title('添加斑點噪聲');
五、算法綜述 灰度圖像:
一幅完整的圖像,是由紅色、綠色、藍色三個通道組成的。紅色、綠色、藍色三個通道的縮覽圖都是以灰度顯示的。用不同的灰度色階來表示“ 紅,綠,藍”在圖像中的比重。通道中的純白,代表了該色光在此處為最高亮度,亮度級別是255。
通道是整個Photoshop顯示圖像的基礎。色彩的變動,實際上就是間接在對通道灰度圖進行調整。通道是Photoshop處理圖像的核心部分,所有的色彩調整工具都是圍繞在這個核心周圍使用的。
在計算機領域中,灰度數字圖像是每個像素只有一個采樣顏色的圖像。這類圖像通常顯示為從最暗黑色到最亮的白色的灰度,盡管理論上這個采樣可以任何顏色的不同深淺,甚至可以是不同亮度上的不同顏色。灰度圖像與黑白圖像不同,在計算機圖像領域中黑白圖像只有黑色與白色兩種顏色;灰度圖像在黑色與白色之間還有許多級的顏色深度。但是,在數字圖像領域之外,“黑白圖像”也表示“灰度圖像”,例如灰度的照片通常叫做“黑白照片”。在一些關于數字圖像的文章中單色圖像等同于灰度圖像,在另外一些文章中又等同于黑白圖像。灰度圖像經常是在單個電磁波頻譜如可見光內測量每個像素的亮度得到的。
用于顯示的灰度圖像通常用每個采樣像素 8 位的非線性尺度來保存,這樣可以有 256 級灰度。這種精度剛剛能夠避免可見的條帶失真,并且非常易于編程。在醫學圖像與遙感圖像這些技術應用中經常采用更多的級數以充分利用每個采樣 10 或 12 位的傳感器精度,并且避免計算時的近似誤差。在這樣的應用領域每個采樣 16 位即 65536 級得到流行。
二值圖像:
是指每個像素不是黑就是白,其灰度值沒有中間過渡的圖像。二值圖像一般用來描述文字或者圖形,其優點是占用空間少,缺點是,當表示人物,風景的圖像時,二值圖像只能描述其輪廓,不能描述細節。這時候要用更高的灰度級。
二值圖像是每個像素只有兩個可能值的數字圖像。人們經常用黑白、B&W、單色圖像表示二值圖像,但是也可以用來表示每個像素只有一個采樣值的任何圖像,例如灰度圖像等。
二值圖像中所有的像素只能從0和1這兩個值中取,因此在MATLAB中,二值圖像用一個由0和1組成的二維矩陣表示。這兩個可取的值分別對應于關閉和打開,關閉表征該像素處于背景,而打開表征該像素處于前景。以這種方式來操作圖像可以更容易識別出圖像的結構特征。二值圖像操作只返回與二值圖像的形式或結構有關的信息,如果希望對其他類型的圖像進行同樣的操作,則首先要將其轉換為二進制的圖像格式,可以通過調用MATLAB提供的im2bw()來實現。
二值圖像經常出現在數字圖像處理中作為圖像掩碼或者在圖像分割、二值化和dithering的結果中出現。一些輸入輸出設備,如激光打印機、傳真機、單色計算機顯示器等都可以處理二值圖像。
二值圖像經常使用位圖格式存儲。
二值圖像可以解釋為二維整數格Z,圖像變形處理領域很大程度上就是受到這個觀點啟發。
圖像旋轉:
圖像旋轉是指圖像以某一點為中心旋轉一定的角度,形成一幅新的圖像的過程。當然這個點通常就是圖像的中心。既然是按照中心旋轉,自然會有這樣一個屬性:旋轉前和旋轉后的點離中心的位置不變.根據這個屬性,我們可以得到旋轉后的點的坐標與原坐標的對應關系。由于原圖像的坐標是以左上角為原點的,所以我們先把坐標轉換為以圖像中心為原點。假設原圖像的寬為w,高為h,(x0,y0)為原坐標內的一點,轉換坐標后的點為(x1,y1)。那么不難得到: x1 = x0-w/2;y1 =-y0 + h/2;在新的坐標系下,假設(x0,y0)距離原點的距離為r,點與原點之間的連線與x軸的夾角為b,旋轉的角度為a,旋轉后的點為(x1,y1)
噪聲:
是電路或系統中不含信息量的電壓或電流。在工業與自然界中,存在著各種干擾源(噪聲源),如大功率電力電子器件的接入、大功率用電設備的開啟與斷開、雷擊閃電等都會使空間電場和磁場產生有序或無序的變化,這些都是干擾源(或噪聲源)。這些源產生的電磁波或尖峰脈沖通過磁、電耦合或是通過電源線等路徑進入放大電路,各種電氣設備,形成各種形式的干擾。
斑點噪聲:
斑點噪聲是SAR成像系統的一大特色,源自基本分辨單元內地物的隨機散射,在圖像上表現為信號相關(如在空間上相關)的小斑點,它既降低了圖像的畫面質量,又嚴重影響圖像的自動分割、分類、目標檢測以及其它定量專題信息的提取。
SAR圖像斑點噪聲的去除一方面要抑制圖像均勻區域斑點噪聲,另一方面要保持圖像邊緣和紋理細節信息。SAR斑點噪聲的抑制可通過非相干多視處理,也可使用空間域濾波實現。非相干多視處理會降低圖像的地面分辨率。因此,涌現出了一系列空間域濾波方法,如均值濾波、中值濾波、Lee濾波、Kuan濾波、Frost濾波、Sigma濾波以及Gamma Map濾波等。但這類算法存在自身無法克服的矛盾:一方面為增強斑點去噪效果需選較大的濾波窗口,另一方面為保持圖像的實際分辨率要求所選的窗口較小。
高斯噪聲:
所謂高斯噪聲是指它的概率密度函數服從高斯分布(即正態分布)的一類噪聲。如果一個噪聲,它的幅度分布服從高斯分布,而它的功率譜密度又是均勻分布的,則稱它為高斯白噪聲。高斯白噪聲的二階矩不相關,一階矩為常數,是指先后信號在時間上的相關性。高斯白噪聲包括熱噪聲和散粒噪聲。
實驗中是通過MATLAB自帶的函數產生噪聲,各函數如下: J1=imnoise(I,'salt & pepper',0.05);%添加椒鹽噪聲
J2=imnoise(I,'gaussian',0,0.03);
%添加均值為0,方差為0.03的高斯噪聲。
六、Matlab優勢
MATLAB是一個包含大量算法的集合。其可以快捷的實現用戶所需的各種計算功能。函數中所使用的算法都是科研和工程計算中的最新研究成果,而前經過了各種優化和差錯處理。在通常情況下,可以用它來代替底層編程語言,如C和C++。在計算要求相同的情況下,使用MATLAB的編程工作量會大大減少。MATLAB的這些函數集包括從最簡單最基本的函數到諸如矩陣,特征向量、快速傅立葉變換的復雜函數。函數所能解決的問題其大致包括矩陣運算和線性方程組的求解、微分方程及偏微分方程的組的求解、符號運算、傅立葉變換和數據的統計分析、工程中的優化問題、稀疏矩陣運算、復數的各種運算、三角函數和其他初等數學運算、多維數組操作以及建模動態仿真等。圖形處理功能
圖形處理功能MATLAB自產生之日起就具有方便的數據可視化功能,以將向量和矩陣用圖形表現出來,并且可以對圖形進行標注和打印。高層次的作圖包括二維和三維的可視化、圖象處理、動畫和表達式作圖。可用于科學計算和工程繪圖。新版本的MATLAB對整個圖形處理功能作了很大的改進和完善,使它不僅在一般數據可視化軟件都具有的功能(例如二維曲線和三維曲面的繪制和處理等)方面更加完善,而且對于一些其他軟件所沒有的功能(例如圖形的光照處理、色度處理以及四維數據的表現等),MATLAB同樣表現了出色的處理能力。同時對一些特殊的可視化要求,例如圖形對話等,MATLAB也有相應的功能函數,保證了用戶不同層次的要求。另外新版本的MATLAB還著重在圖形用戶界面(GUI)的制作上作了很大的改善,對這方面有特殊要求的用戶也可以得到滿足
模塊集合工具箱
MATLAB對許多專門的領域都開發了功能強大的模塊集和工具箱。一般來說,它們都是由特定領域的專家開發的,用戶可以直接使用工具箱學習、應用和評估不同的方法而不需要自己編寫代碼。目前,MATLAB已經把工具箱延伸到了科學研究和工程應用的諸多領域,諸如數據采集、數據庫接口、概率統計、樣條擬合、優化算法、偏微分方程求解、神經網絡、小波分析、信號處理、圖像處理、系統辨識、控制系統設計、LMI控制、魯棒控制、模型預測、模糊邏輯、金融分析、地圖工具、非線性控制設計、實時快速原型及半物理仿真、嵌入式系統開發、定點仿真、DSP與通訊、電力系統仿真等,都在工具箱(Toolbox)家族中有了自己的一席之地。
七、總結
運用matlab軟件對圖像進行處理,讓我鞏固了之前所學的知識,同時也在這次作業中更加了解到matlab語言在生活中的運用環境和掌握這門語言的重要性
八、存在問題
1.在進行圖像增強時要不要講圖像先進行平滑處理? 2.如何增加這個算法的準確度
3.在此次作業中,為何添加椒鹽噪聲時無法顯示
第四篇:數字圖像處理實驗報告
數字圖像處理
實驗報告
班級:通信103 學號:201027201 姓名:計富威 指導教師:孫潔
實驗一 MATLAB數字圖像處理初步
一、實驗目的與要求
1.熟悉及掌握在MATLAB中能夠處理哪些格式圖像。2.熟練掌握在MATLAB中如何讀取圖像。
3.掌握如何利用MATLAB來獲取圖像的大小、顏色、高度、寬度等等相關信息。
4.掌握如何在MATLAB中按照指定要求存儲一幅圖像的方法。5.圖像間如何轉化。
二、實驗內容及步驟
1.利用imread()函數讀取一幅圖像,假設其名為”第一個.tif”,存入一個數組中;
>>I=imread('第一個.tif');2.利用whos命令提取該讀入圖像”第一個.tif”的基本信息; >>whos I 3.利用imshow()函數來顯示這幅圖像; >>imshow(I);
第一個.tif 4.利用imfinfo函數來獲取圖像文件的壓縮,顏色等等其他的詳細信息;
>>imfinfo('第一個.tif');5.利用imwrite()函數來壓縮這幅圖象,將其保存為一幅壓縮了像素的jpg文件,設為flower.jpg;語法:imwrite(原圖像,新圖像,‘quality’,q), q取0-100。
>>imwrite(I,'第一個.jpg','quality',50)6.同樣利用imwrite()函數將最初讀入的tif圖象另存為一幅bmp圖像,設為flower.bmp。>>imwrite(I,'第一個.bmp');7.用imread()讀入圖像:Lenna256.jpg 和camemaman.jpg; >>b=imread('lena256.bmp');>>c=imread('cameraman.tif');8.用imfinfo()獲取圖像Lenna256.jpg和camemaman.jpg 的大小; >>imfinfo('lena256.bmp');>>imfinfo('cameraman.tif');9.用figure,imshow()分別將Lenna256.jpg和camemaman.jpg顯示出來,觀察兩幅圖像的質量。>>figure >>imshow(b);>>figure >>imshow(c);
(Lena256.jpg圖像截圖)
(cameraman.jpg圖像截圖)
10.用im2bw將一幅灰度圖像轉化為二值圖像,并且用imshow顯示出來觀察圖像的特征。>> d=im2bw(b);>>figure >>imshow(b);>>figure >>imshow(d);
(二值化截圖)
三、實驗總結
通過實驗MatLab軟件的基本使用有了基本的了解,學會了使用MatLab軟件來讀取一個特定格式的圖像,并通過相關的命令語句對圖像進行格式轉換、圖像壓縮、二值化等的處理,掌握了利用MATLAB來獲取圖像的大小、顏色、高度、寬度等等相關信息,掌握在MATLAB中如何通過imshow()語句來讀取圖像等等。
第二 圖像基本運算
一、實驗目的
1.了解圖像的算術運算在數字圖像處理中的初步應用。2.體會圖像算術運算處理的過程和處理前后圖像的變化。
二、實驗原理
圖像的代數運算是圖像的標準算術操作的實現方法,是兩幅輸入圖像之間進行的點對點的加、減、乘、除運算后得到輸出圖像的過程。如果輸入圖像為A(x,y)和B(x,y),輸出圖像為C(x,y),則圖像的代數運算有如下四種形式:
C(x,y)= A(x,y)+ B(x,y)C(x,y)= A(x,y)-B(x,y)C(x,y)= A(x,y)* B(x,y)C(x,y)= A(x,y)/ B(x,y)
三、實驗步驟 1.圖像的加法運算
在MATLAB中,如果要進行兩幅圖像的加法,或者給一幅圖像加上一個常數,可以調用imadd函數來實現。imadd函數將某一幅輸入圖像的每一個像素值與另一幅圖像相應的像素值相加,返回相應的像素值之和作為輸出圖像。imadd函數的調用格式如下:
Z = imadd(X,Y)首先讀入兩幅圖像
>>a=imread('第二個原圖1.jpg');>>b=imread('第二個原圖2.jpg')通過一個加法操作:>> c=imadd(a,b);
給圖像的每一個像素加上一個常數可以使圖像的亮度增加。如截圖
第一張為原圖,第二張為亮度加50,第三張為亮度減50 2.圖像的減法運算
在MATLAB中,使用imsubtract函數可以將一幅圖像從另一幅圖像中減去,或者從一幅圖像中減去一個常數。imsubtract函數將一幅輸入圖像的像素值從另一幅輸入圖像相應的像素值中減去,再將這個結果作為輸出圖像相應的像素值。imsubtract函數的調用格式如下:
Z = imsubtract(X,Y); 讀入一幅畫后通過減法 >>a3=imsubtract(a,50);
3.圖像的乘法運算
在MATLAB中,使用immultiply函數實現兩幅圖像的乘法。immultiply函數將兩幅圖像相應的像素值進行元素對元素的乘法操作(MATLAB點乘),并將乘法的運算結果作為輸出圖形相應的像素值。immulitply函數的調用格式如下:
Z = immulitply(X,Y)讀入一幅圖后通過乘法操作 >> a=imread('cameraman.tif');>> b=immultiply(a,1.5);
4.圖像的除法運算
在MATLAB中使用imdivide函數進行兩幅圖像的除法。imdivide函數對兩幅輸入圖像的所有相應像素執行元素對元素的除法操作(點除),并將得到的結果作為輸出圖像的相應像素值。imdivide函數的調用格式如下:
Z = imdivide(X,Y)讀入一幅圖后通過除法操作
四、實驗總結
通過對圖像的四則運算了結圖像的不同變化過程,對軟件的進一步使用也有了更加深刻的認識。
實驗三 圖像增強—空域濾波
一、實驗目的
進一步了解MatLab軟件/語言,學會使用MatLab對圖像作濾波處理,使學生有機會掌握濾波算法,體會濾波效果。
了解幾種不同濾波方式的使用和使用的場合,培養處理實際圖像的能力,并為課堂教學提供配套的實踐機會。
二、實驗設備與軟件
(1)IBM-PC計算機系統
(2)MatLab軟件/語言包括圖像處理工具箱(Image Processing Toolbox)
(3)實驗所需要的圖片
三、實驗內容與步驟
a)調入并顯示原始圖像“原圖像.jpg”。>>I=imread('原圖像.jpg');b)利用imnoise命令在圖像“原圖像.jpg”上加入高斯(gaussian)噪聲
>>J = imnoise(I,'gauss',0.02);
%添加高斯噪聲 c)利用預定義函數fspecial命令產生平均(average)濾波器 d)分別采用3x3和5x5的模板,分別用平均濾波器以及中值濾波器,對加入噪聲的圖像進行處理并觀察不同噪聲水平下,上述濾波器處理的結果;
>>ave1=fspecial('average',3);
%產生3×3的均值模版 >>ave2=fspecial('average',5);
%產生5×5的均值模版 >>K = filter2(ave1,J)/255;
%均值濾波3×3 >>L = filter2(ave2,J)/255;
%均值濾波5×5 e)選擇不同大小的模板,對加入某一固定噪聲水平噪聲的圖像進行處理,觀察上述濾波器處理的結果。
>>M = medfilt2(J,[3 3]);
%中值濾波3×3模板 >>N = medfilt2(J,[4 4]);
%中值濾波4×4模板
f)利用imnoise命令在圖像Sample2-1.jpg 上加入椒鹽噪聲(salt & pepper)>>J = imnoise(I,'salt& pepper',0.02);
%添加椒鹽噪聲
四、實驗總結
椒鹽噪聲是由圖像傳感器,傳輸信道,解碼處理等產生的黑白相間的亮暗點噪聲。椒鹽噪聲往往由圖像切割引起,去除脈沖干擾及椒鹽噪聲最常用的算法是中值濾波。椒鹽噪聲是指兩種噪聲,一種是鹽噪聲,另一種是胡椒噪聲。鹽=白色,椒=黑色。前者是高灰度噪聲,后者屬于低灰度噪聲。一般兩種噪聲同時出現,呈現在圖像上就是黑白雜點。這點我們通過實驗結果可以明顯看到。中值濾波對于濾除圖像的椒鹽噪聲非常有效。
實驗四圖像分割
一、實驗目的
使用MatLab 軟件進行圖像的分割。使學生通過實驗體會一些主要的分割算子對圖像處理的效果,以及各種因素對分割效果的影響。
二、實驗要求
要求學生能夠自行評價各主要算子在無噪聲條件下和噪聲條件下的分割性能。能夠掌握分割條件(閾值等)的選擇。完成規定圖像的處理并要求正確評價處理結果,能夠從理論上作出合理的解釋。
三、實驗內容與步驟
(1)使用Roberts 算子的圖像分割實驗,使用的原圖是cameraman.jpg,截圖如下
(2)使用Prewitt 算子的圖像分割實驗 截圖如下
(3)使用Sobel 算子的圖像分割實驗
(4)使用LoG(拉普拉斯-高斯)算子的圖像分割實驗
四、實驗結果
對Roberts算子、Prewitt 算子、Sobel 算子、LoG(拉普拉斯-高斯)算子的運算對圖像的結果有了基本的認識,加深學習效果。
實驗五 形態學運算
1、實驗目的
學習常見的數學形態學運算基本方法,了解腐蝕、膨脹、開運算、閉運算取得的效果,培養處理實際圖像的能力,并為課堂教學提供配套的實踐機會。
2、實驗要求
利用MatLab工具箱中關于數學形態學運算的函數,計算本指導書中指定二值圖像進行處理。
3、實驗設備與軟件
1.LC-PC計算機系統
2.MatLab軟件/語言包括圖像處理工具箱(Image Processing Toolbox)3.實驗所需要的圖片
4、實驗內容與步驟
1.調入并顯示圖像“原圖.jpg”; 2.調入并顯示圖像“原圖.jpg”;
3.選取合適的閾值,得到二值化圖像“原圖.jpg”; >>bw = im2bw(I,level);
%二值化 4.設置結構元素;
5.對得到的二值圖像“原圖.jpg”進行腐蝕運算; >>BW2 = imerode(bw,SE1);
%腐蝕 6.對得到的二值圖像“原圖.jpg”進行膨脹運算; >>BW1 = imdilate(bw,SE);
%膨脹 7.對得到的二值圖像“原圖.jpg”進行開運算;
>>BW3 = bwmorph(bw, 'open');
%開運算 8.對得到的二值圖像“原圖.jpg”進行閉運算; >>BW4 = bwmorph(bw, 'close');
%閉運算 9.將兩種處理方法的結果作比較;
五、實驗總結
通過本次實驗,學習了常見的數學形態學運算基本方法,了解腐蝕、膨脹、開運算、閉運算取得的效果,培養處理實際圖像的能力,通過自己動手的實驗,對課本上的知識有了更加深刻的理解。
第五篇:數字圖像處理實驗報告
實驗一 數字圖像的獲取
一、實驗目的
1、了解圖像的實際獲取過程。
2、鞏固圖像空間分辨率和灰度級分辨率、鄰域等重要概念。
3、熟練掌握圖像讀、寫、顯示、類型轉換等 matlab 函數的用法。
二、實驗內容
1、讀取一幅彩色圖像,將該彩色圖像轉化為灰度圖像,再將灰度圖像轉化為索引圖像并顯示所有圖像。
2、編程實現空間分辨率變化的效果。
三、實驗原理
1、圖像讀、寫、顯示 I=imread(‘image.jpg’)Imview(I)Imshow(I)Imwrite(I,’wodeimage.jpg’)
2、圖像類型轉換
I=mat2gray(A,[amin,amax]);按指定的取值區間[amin,amax]將數據矩陣 A 轉化為灰度
圖像 I,amin 對應灰度 0,amax 對應 1,也可以不指定該區間。
[x,map]=gray2ind(I,n);按指定的灰度級 n 將灰度圖像轉化為索引圖像,n 默認為 64 I=ind2gray(x,map);索引圖像轉化為灰度圖像 I=grb2gray(RGB);真彩色圖像轉化為灰度圖像
[x,map]=rgb2ind(RGB);真彩色圖像轉化為索引圖像 RGB=ind2rgb(x,map);索引圖像轉化為真彩色圖像
BW=im2bw(I,level);將灰度圖像轉化為二值圖像,level 取值在[0,1]之間
BW=im2bw(x,map,level);將索引圖像轉化為二值圖像,level 取值在[0,1]之間 BW=im2bw(RGB,level);將真彩色圖像轉化為二值圖像,level 取值在[0,1]之間
四、實驗代碼及結果
1、in=imread('peppers.png');i=rgb2gray(in);[x,map]=gray2ind(i,128);subplot(131),imshow(in)subplot(132),imshow(i)subplot(133),imshow(x),colormap(map)
、%空間分辨率變化的效果
clc,close all,clear i=imread('cameraman.tif');
i=imresize(i,[256,256]);i1=i(1:2:end,1:2:end);[m1,n1]=size(i)i2=i1(1:2:end,1:2:end);[m2,n2]=size(i2)i3=i2(1:2:end,1:2:end);[m3,n3]=size(i3)subplot(221),imshow(i),xlabel('256 x 256')subplot(222),imshow(i1),xlabel('128 x 128')subplot(223),imshow(i2),xlabel('64 x 64')subplot(224),imshow(i3),xlabel('32 x 32')256 x 25664 x 64128 x 12832 x 32
實驗二
圖像的幾何變換
一、實驗目的
掌握圖像的基本幾何變換的方法
1、圖像的平移
2、圖像的旋轉
二、實驗內容
練習用matalb命令實現圖像的平移、旋轉操作
1、.編寫實現圖像平移的函數
2、用imread命令從你的硬盤讀取一幅256×256灰度圖;
3、調用平移函數,將256×256灰度圖平移100行200列,在同一個窗口中顯示平移前和平移后的圖像。
4、再開辟一個窗口,分別用最近鄰插值法、雙線性插值法實現圖像順勢針旋轉50°,顯示在同一窗口中,并比較兩種效果圖(在報告中)
三、實驗原理
提示:圖片平移就是實現運算
?x'??10x0??x? ?'????? ?y???01y0???y??1??001??1? ??????
?x'?x?x0即:??y'?y?y0
四、實驗代碼及結果
1、function [I]=hmove(i,x0,y0);%編寫實現圖像平移的函數hmove,平移量為 [r,c]=size(i);
%x0,y0,平移前圖像矩陣為i,I(r+x0,c+y0)=0;
%平移后圖像矩陣為I for x=1:r;
for y=1:c;
x1=x+x0;
y1=y+y0;
I(x1,y1)=i(x,y);
end;end;參考程序 subplot(2,2,1)imshow(RGB)subplot(2,2,3)gray1=rgb2gray(RGB);imagesc(gray1),colormap(gray);
subplot(2,2,2)I1=hmove(gray1,100,20);subimage(gray1),axis('image');subplot(2,2,4),imagesc(I1),colormap(gray),axis([1,700],[1,820]);
2、顯示圖像的傅立葉頻譜 ? a=0:800;b=0:600;
? %[x,y]=meshgrid([-20:0.2:20],[-20:0.2:20]);? [x,y]=meshgrid(a,b);? i=imread('hr.jpg');? I=rgb2gray(i);
? subplot(1,2,1),subimage([0,800],[0,600],i);? subplot(1,2,2);? s=fft2(I,601,801);? mesh(x,y,log(abs(s)));%圖像的傅立葉幅度頻譜以三維圖形顯示 ? colormap(hsv);
實驗三 圖像空域變換增強(1)
一、實驗目的
1、掌握直方圖均衡化算法。
2、鞏固灰度變換、直方圖修正、圖像算術和邏輯運算等基礎知識。
3、熟練掌握空域變換增強的matlab 相關函數用法,并能利用算法自己編寫matlab 程序實現圖像空域變換增強。
二、實驗內容
1、用函數imcomplement 對灰度圖像cameraman.tif 取反。
2、利用如下分段變換曲線對canmeraman.tif 做線性灰度變換。
3、利用直方圖求取算法計算以及顯示pout.tif 的直方圖,并和imhist 函數生成的直方圖作比較。
三、實驗原理
在圖像處理中,空域是指由像素組成的空間,空域增強方法是指直接作用于像素的增強方法。空域處理可以表示為:
g(x, y)=T[ f(x, y)]
j=imcomplement(i);對圖像取反 imhist();顯示圖像的直方圖 histeq();直方圖均衡化函數
imnoise(I,type,parameters);給圖像加噪聲 bitand();圖像位與運算 bitor();圖像位或運算
四、實驗代碼與結果
1、i=imread('cameraman.tif');
j=imcomplement(i);subplot(121),imshow(i)subplot(122),imshow(j)
2、clear,close all,clc in1=imread('cameraman.tif');
f0=0;g0=0;f1=100;g1=60;f2=150;g2=220;f3=255;g3=255;figure,plot([f0,f1,f2,f3],[g0,g1,g2,g3])axis tight,xlabel('f'),ylabel('g')title('intensity transformation')r1=(g1-g0)/(f1-f0);b1=g0-r1*f0;r2=(g2-g1)/(f2-f1);b2=g1-r2*f1;r3=(g3-g2)/(f3-f2);b3=g2-r3*f2;[m,n]=size(in1);in2=double(in1);for i=1:m for j=1:n f=in2(i,j);g(i,j)=0;if(f>=0)&(f<=f1)g(i,j)=r1*f+b1;elseif(f>=f1)&(f<=f2)g(i,j)=r2*f+b2;elseif(f>=f2)&(f<=f3)g(i,j)=r3*f+b3;end end end figure,subplot(121),imshow(in1)subplot(122),imshow(mat2gray(g))
3、clc,clear,close all in=imread('pout.tif');[m,n]=size(in);num=zeros(1,256);% num 是每個灰度級對應的像素個數 p=zeros(1,256);% p 是每個灰度級出現的概率 for i=1:m for j=1:n num(1,in(i,j)+1)=num(1,in(i,j)+1)+1;% 統計個數 end end p=num./(m*n)% 求概率 x=1:256;subplot(121),plot(x,p),axis([1 256 0 0.06])subplot(122),imhist(in)
實驗四 圖像空域變換增強(2)
一、實驗目的
1、掌握直方圖均衡化算法。
2、鞏固灰度變換、直方圖修正、圖像算術和邏輯運算等基礎知識。
3、熟練掌握空域變換增強的matlab 相關函數用法,并能利用算法自己編寫matlab 程序實現圖像空域變換增強。實現頻域線性變換,非線性變換增強
二、實驗內容
1、利用直方圖均衡化算法對圖像pout.tif 進行增強運算。
2、對圖像lena.jpg 作邏輯與和邏輯或運算。
三、實驗原理
j=imcomplement(i);對圖像取反 imhist();顯示圖像的直方圖 histeq();直方圖均衡化函數
imnoise(I,type,parameters);給圖像加噪聲 bitand();圖像位與運算 bitor();圖像位或運算
四、實驗代碼與結果
1、clear;close all;clc;tu=imread('pout.tif');% 輸入圖像
%tu=rgb2gray(tu);% 轉換為灰度圖像
N=zeros(1,256);% N 為原始圖像各灰度級像素個數 P=zeros(1,256);% P 為原始成圖像直方圖
q=zeros(1,256);% q 為原始圖像直方圖累積分布函數
newN=zeros(1,256);% newN 為新生成圖像各灰度級像素個數 newP=zeros(1,256);% newP 為新生成圖像直方圖
newq=zeros(1,256);% newq 為新生成圖像直方圖累積分布函數 [h w]=size(tu);new_tu=zeros(h,w);% 計算原始圖像各灰度級像素個數 for x=1:h for y=1:w N(1,tu(x,y))=N(1,tu(x,y))+1;end end P=N./sum(N);% 計算原始直方圖 P % 計算原始累積分布直方圖 q(1,1)=P(1,1);for i=2:256 q(1,i)=q(1,i-1)+P(1,i);end % 計算原始直方圖對應的新的灰度 t ,建立映射關系 for i=1:256 t(1,i)=floor(254*q(1,i)+1+0.5);end % 計算直方圖均衡化后的新圖 new_tu for x=1:h for y=1:w new_tu(x,y)=t(1,tu(x,y));end end % 統計新生成圖像各灰度級像素個數 for x=1:h for y=1:w newN(1,new_tu(x,y))=newN(1,new_tu(x,y))+1;end end newP=newN./(h*w);% 計算新的灰度直方圖 newP % 計算新生成圖像累積分布直方圖 newq(1,1)=newP(1,1);for i=2:256 newq(1,i)=newq(1,i-1)+newP(1,i);end % 顯示信息
subplot(231),imshow(tu)subplot(232),plot(P),axis([1 256 0 0.06])subplot(233),plot(q),axis([1 256 0 1])subplot(234),imshow(new_tu,[])subplot(235),plot(newP),axis([1 256 0 0.06])subplot(236),plot(newq),axis([1 256 0
1])
2、clc,clear,close all in=imread('lena.jpg');in=rgb2gray(in);[m,n]=size(in);in=double(in);out1=ones(m,n)*255;out1(20:150,30:170)=0;chu1=zeros(m,n);chu1(20:150,30:170)=255;for i=1:m for j=1:n out2(i,j)=bitor(in(i,j),out1(i,j));chu2(i,j)=bitand(in(i,j),chu1(i,j));end end in=uint8(in);out1=uint8(out1);out2=uint8(out2);chu1=uint8(chu1);chu2=uint8(chu2);subplot(231),imshow(in)subplot(232),imshow(out1)subplot(233),imshow(out2)subplot(234),imshow(chu1)subplot(235),imshow(chu2)
實驗五 圖像濾波增強
一、實驗目的
1、掌握各種空域和頻域圖像濾波增強算法已經模板運算的基本方法。
2、鞏固卷積定理、濾波處理等基礎知識。
3、熟練掌握空域和頻域濾波增強的matlab 相關函數用法。
二、實驗內容
1、利用均值濾波算法對已被噪聲污染的圖像rice.png 進行濾波除噪處理。、利用標準中值濾波算法對已被噪聲污染的圖像rice.png 進行濾波除噪處理。3、用prewitt 算子對圖像cameraman.tif 進行銳化濾波處理。
三、實驗原理
H=fspecial(type);H=fspecial(type,parameters);用于創建一個指定的濾波器模板,type 指濾波器的類型。
parameters 是與指定的濾波器有關的參數。Y=filter2(B,X);用于進行二維線性數字濾波,使用矩陣B 中的二維濾波器對數據X進行濾波。結果Y 是通過二維互相關計算出來的,大小與X 一樣。
Y=filter2(B,X,’shape’);結果Y 的大小由參數shape確定,shape的取值如下: Full:返回二維戶相關的全部結果,size(Y)>size(X)Same:返回二維戶相關結果的中間部分,Y 的大小與X 相同 Valid:返回二維戶相關未使用邊緣補0 的部分,size(Y) 四、實驗代碼與結果 1、clc,clear in1=imread('rice.png');f=imnoise(in1,'salt & pepper',0.1);%f=imnoise(in1,'gaussian',0,0.02)%g 是標準均值濾波器的輸出圖像 g=biaozhunjunzhi(f,3);subplot(221),imshow(in1)%,xlabel('(a)原始圖像')subplot(222),imshow(f)%,xlabel('(b)加噪圖像')subplot(223),imshow(g)%,xlabel('(c)標準均值濾波圖像')function g=biaozhunjunzhi(f,k)[m,n]=size(f);%f1 是對邊緣像素補0 后得到的圖像 f1=zeros(m+(k-1),n+(k-1));[m1,n1]=size(f1);%f1 的邊緣像素值為0中間的像素值依然為f f1((1+(k-1)/2):(m1-(k-1)/2),(1+(k-1)/2):(n1-(k-1)/2))=f;%注意這條指令絕對不能少 ga=f;%取出窗口內的像素值并作標準均值濾波處理 for i=(k+1)/2:(m1-(k-1)/2) for j=(k+1)/2:(n1-(k-1)/2)a=0;x=1;for p=1:k for q=1:k a(x)=f1(i+(p-(k+1)/2),j+(q-(k+1)/2));x=x+1;end end %hsum 表示窗口內所有像素值的和 hsum=0;for h=1:(k^2)hsum=hsum+a(h);end ga(i,j)=round(hsum/(k^2));end end %ga 的大小和f1 的大小一致所以必須取出中間部分像素值作為輸出 g=ga((1+(k-1)/2):(m1-(k-1)/2),(1+(k-1)/2):(n1-(k-1)/2)); 2、clc,clear in1=imread('rice.png');f=imnoise(in1,'salt & pepper',0.1);%f=imnoise(in1,'gaussian',0,0.02)%g 是標準中值濾波器的輸出圖像 g=biaozhunzhongzhi(f,3);subplot(131),imshow(in1)%,xlabel('(a)原始圖像')subplot(132),imshow(f)%,xlabel('(b)加噪圖像')subplot(133),imshow(g)%,xlabel('(c)標準均值濾波圖像')function g=biaozhunzhongzhi(f,k)[m,n]=size(f);%f1 是對邊緣像素補0 后得到的圖像 f1=zeros(m+(k-1),n+(k-1));[m1,n1]=size(f1);%f1 的邊緣像素值為0中間的像素值依然為f f1((1+(k-1)/2):(m1-(k-1)/2),(1+(k-1)/2):(n1-(k-1)/2))=f;%注意這條指令絕對不能少 ga=f;for i=(k+1)/2:(m1-(k-1)/2)for j=(k+1)/2:(n1-(k-1)/2)a=0;x=1;for p=1:k for q=1:k a(x)=f1(i+(p-(k+1)/2),j+(q-(k+1)/2));x=x+1; end end a=sort(a);ga(i,j)=a((k^2+1)/2);end end %ga 的大小和f1 的大小一致所以必須取出中間部分像素值作為輸出 g=ga((1+(k-1)/2):(m1-(k-1)/2),(1+(k-1)/2):(n1-(k-1)/2)); 3、clc,clear,close all f=imread('cameraman.tif');[m,n]=size(f);g=f;h1=[-1-1-1;0 0 0;1 1 1];h2=[-1 0 1;-1 0 1;-1 0 1];x1=h1;x2=h2;for i=2:1:m-1 for j=2:1:n-1 sum1=0;sum2=0;sum=0;for p=1:1:3 for q=1:1:3 x1(p,q)=f(i+(p-2),j+(q-2));x2(p,q)=f(i+(p-2),j+(q-2));sum1=sum1+x1(p,q)*h1(p,q);sum2=sum2+x2(p,q)*h2(p,q);sum=sum1+sum2;end end if sum<1 g(i,j)=abs(sum);else g(i,j)=sum;end end end subplot(121),imshow(f)subplot(122),imshow(g) 實驗六 圖像復原 一、實驗目的 1、掌握各種空域和頻域圖像濾波增強算法已經模板運算的基本方法。 2、鞏固卷積定理、濾波處理等基礎知識。 3、熟練掌握空域和頻域濾波增強的matlab 相關函數用法并能利用算法自己編寫matlab程序實現圖像空域變換增強。 二、實驗內容 利用大氣湍流引起的圖像退化模型對camerman.tif 進行退化和復原仿真,采用逆濾波的方法復原。利用勻速直線運動的圖像退化模型對camerman.tif 進行退化和復原仿真,采用逆濾波的方法復原。根據逆諧波均值濾波器的輸入輸出方程對輸入圖像camerman.tif 進行空域濾波還原處理。 三、實驗原理 Psf=fspecial(type,parameters);返回指定濾波器的單位沖擊響應 Imfilter(c,psf,’circular’,’conv’);根據psf 對圖像進行濾波處理 Fr=deconvwnr(g,psf,ncorr,icorr);對圖像進行維納濾波處理 Fr=deconvreg(g,psf,noisepower,range);對圖像進行最小二乘方濾波處理 Tform=maketform(transform_type,transform_parameters);對圖像進行幾何失真校正 四、實驗代碼與結果 1、%基于大氣湍流造成的模糊圖像及其還原 clear;close all;clc in=imread('cameraman.tif');subplot(131),imshow(in),title('原始圖像')f=fft2(in);[N1,N2]=size(f);k1=0.00005;%退化模型中的常數 %根據退化模型對輸入圖像進行退化處理并輸出退化后的圖像 for i=1:N1 for j=1:N2 h(i,j)=exp((-k1*(i^2+j^2))^(5/6));out(i,j)=f(i,j)*h(i,j);end end out1=ifft2(out);outreal=uint8(real(out1));subplot(132),imshow(outreal),title('大氣湍流退化圖')%根據退化模型對已經退化的圖像進行恢復處理 k2=0.00006;%退化模型中的常數 for i=1:N1 for j=1:N2 h(i,j)=exp((-k2*(i^2+j^2))^(5/6));chu(i,j)=out(i,j)/h(i,j);end end chu1=ifft2(chu);chureal=uint8(real(chu1));subplot(133),imshow(chureal),title('大氣湍流還原圖') 2、%基于勻速直線運動造成的模糊圖像及其還原 clear;close all;clc in=imread('cameraman.tif');%in=rgb2gray(in1);subplot(131),imshow(in),title('原始圖像')f=fft2(in);[N1,N2]=size(f);t=1;a=0.06;b=0.04;pi=3.1415926;for u=1:N1 for v=1:N2 fenzhi=cos(pi*(u*a+v*b))-i*sin(pi*(u*a+v*b));h(u,v)=t*sin(pi*(u*a+v*b))*fenzhi/(pi*(u*a+v*b));out(u,v)=f(u,v)*h(u,v);end end out1=ifft2(out);outreal=uint8(real(out1));subplot(132),imshow(outreal),title('勻速直線運動退化圖')for u=1:N1 for v=1:N2 h(u,v)=t*sin(pi*(u*a+v*b))*(cos(pi*(u*a+v*b))-j*sin(pi*(u*a+v*b)))/(pi*(u*a+v*b));chu(u,v)=out(u,v)/h(u,v);end end chu1=ifft2(chu);chureal=uint8(real(chu1)); subplot(133),imshow(chureal),title('勻速直線運動還原圖') a=0.06;b=0;時的運行結果: a=0;b=0.06;時的運行結果:: 3、%逆諧波均值濾波舉例 clc,close all,clear in=imread('cameraman.tif');f=imnoise(in,'gaussian',0,0.05);g=nixiebojunzhi(f,3);subplot(131),imshow(in)subplot(132),imshow(f)subplot(133),imshow(g)%逆諧波函數 function g=nixiebojunzhi(f,k)[m,n]=size(f);r=2;%r 為逆諧波函數中的Q 值 %f1 是對邊緣像素補0 后得到的圖像 f1=zeros(m+(k-1),n+(k-1));[m1,n1]=size(f1);%f1 的邊緣像素值為0中間的像素值依然為f f1((1+(k-1)/2):(m1-(k-1)/2),(1+(k-1)/2):(n1-(k-1)/2))=f;%注意這條指令絕對不能少 ga=f;%取出窗口內的像素值并作標準均值濾波處理 for i=(k+1)/2:(m1-(k-1)/2)for j=(k+1)/2:(n1-(k-1)/2)a=0;x=1;for p=1:k for q=1:k a(x)=f1(i+(p-(k+1)/2),j+(q-(k+1)/2));x=x+1;end end %hsum 表示窗口內所有像素值的和 hsum1=0;hsum2=0;for h=1:(k^2)hsum1=hsum1+a(h)^(r+1);hsum2=hsum2+a(h)^r;end ga(i,j)=round(hsum1/hsum2);end end %ga 的大小和f1 的大小一致所以必須取出中間部分像素值作為輸出 g=ga((1+(k-1)/2):(m1-(k-1)/2),(1+(k-1)/2):(n1-(k-1)/2)); 實驗七 彩色圖像處理 一、實驗目的 1、了解三色成像及各種顏色模型。 2、能用處理灰度圖像的算法和技術對真彩色圖像進行增強、去噪、復原等處理。 3、理解偽彩色圖像處理技術并掌握密度分層法、灰度級彩色變換法、頻域濾波等偽彩色圖像處理算法。 二、實驗內容 1、生成一幅256x256 的RGB 圖像,該圖像左上角為紅色,右上角為藍色,左下角為綠色,右下角為黑色。 2、給彩色圖像加噪并去噪,可以采用灰度圖像去噪處理的任何方法。 3、密度分層偽彩色處理仿真。 4、灰度級-彩色變換法偽彩色處理仿真。 三、實驗原理 B=cat(dim,A1,A2,A3,...),dim 為維數,cat 函數將A1,A2,A3 等矩陣連接成維數為dim的矩陣。 四、實驗代碼與結果 1、clc,clear,close all rin=zeros(256,256);%紅色分量 rin(1:128,1:128)=1;%左上角 gin=zeros(256,256);%綠色分量 gin(129:256,1:128)=1;%左下角 bin=zeros(256,256);%藍色分量 bin(1:128,129:256)=1;%右上角 %將三個分量進行組合 out1=cat(3,rin,gin,bin);%也可以不用matlab 函數 out2(:,:,1)=rin;out2(:,:,2)=gin;out2(:,:,3)=bin;subplot(121),imshow(out1)subplot(122),imshow(out2) 2、%給彩色圖像加噪并去噪 clc,clear,close all in1=imread('peppers.png');in=imnoise(in1,'salt & pepper',0.8);out(:,:,1)=gaijinjunzhi(in(:,:,1),5);out(:,:,2)=gaijinjunzhi(in(:,:,2),5);out(:,:,3)=gaijinjunzhi(in(:,:,3),5);subplot(221),imshow(in1)subplot(222),imshow(in)subplot(223),imshow(out)%采用改進均值濾波算法,函數如下 function g=gaijinjunzhi(f,k)[m,n]=size(f);%f1 是對邊緣像素補0 后得到的圖像 f1=zeros(m+(k-1),n+(k-1));[m1,n1]=size(f1);%f1 的邊緣像素值為0中間的像素值依然為f f1((1+(k-1)/2):(m1-(k-1)/2),(1+(k-1)/2):(n1-(k-1)/2))=f;%注意這條指令絕對不能少 ga=f;%取出窗口內的像素值并作改進均值濾波處理 for i=(k+1)/2:(m1-(k-1)/2)for j=(k+1)/2:(n1-(k-1)/2)a=0;x=1;for p=1:k for q=1:k a(x)=f1(i+(p-(k+1)/2),j+(q-(k+1)/2));x=x+1;end end mina=min(a);maxa=max(a);%tan 表示窗口內既不是最大也不是最小像素值的個數 %he 表示窗口內所有既不是最大也不是最小像素值的和 tan=0;he=0;%hsum 表示窗口內所有像素值的和 hsum=0;%取出不是最大也不是最小的像素值并求和以及個數 for h=1:(k^2)hsum=hsum+a(h);if a(h)~=mina & a(h)~=maxa tan=tan+1;he=he+a(h);else end end %在噪聲密度較大的情況下有可能窗口內所有的值都是最大值或最小值 %對其進行判斷,如果是這種情況,就采用普通的均值濾波算法求當前要求的像素點的值 if tan~=0 ga(i,j)=round(he/tan);else ga(i,j)=round(hsum/(k^2)); end end end %ga 的大小和f1 的大小一致,所以必須取出中間部分像素值作為輸出 g=ga((1+(k-1)/2):(m1-(k-1)/2),(1+(k-1)/2):(n1-(k-1)/2)); 3、clc,clear,close all %[i0,map]=imread('trees.tif');d=[0.54,0.24,0.81;0.44,0.136,0.123;0.45,0.73,0.145;...0.21,0.12,0.56;0.45,0.54,0.33;0.33,0.23,0.141;...0.42,0.23,0.1;0.101,0.51,0.31;0.22,0.88,0.21;0.23,0.93,0.33];in=imread('pout.tif');[m,n]=size(in);for i=1:m for j=1:n % out(i,j,1)=map(in(i,j),1);% out(i,j,2)=map(in(i,j),2);% out(i,j,3)=map(in(i,j),3);ind=fix(in(i,j)/26);out(i,j,1)=d(ind,1);out(i,j,2)=d(ind,2);out(i,j,3)=d(ind,3);end end subplot(121),imshow(in)subplot(122),imshow(out) 4、clear,close all,clc in1=imread('moon.tif');%in1=rgb2gray(in1);%第一個獨立的變換 f10=0;g10=0;f11=127;g11=0;f12=191;g12=255;f13=255;g13=255;figure(11),plot([f10,f11,f12,f13],[g10,g11,g12,g13],'r')axis tight,xlabel('f'),ylabel('g')title('intensity transformation')r11=(g11-g10)/(f11-f10);b11=g10-r11*f10;r12=(g12-g11)/(f12-f11);b12=g11-r12*f11;r13=(g13-g12)/(f13-f12);b13=g12-r13*f12;[m,n]=size(in1);in2=double(in1);for i=1:m for j=1:n f=in2(i,j);g1(i,j)=0;if(f>=0)&(f<=f11)g1(i,j)=r11*f+b11;elseif(f>=f11)&(f<=f12)g1(i,j)=r12*f+b12;elseif(f>=f12)&(f<=f13)g1(i,j)=r13*f+b13;end end end g1=uint8(g1);figure(12),subplot(121),imshow(in1)subplot(122),imshow(g1)%imshow(mat2gray(g1))%第二個獨立的變換 f20=0;g20=0;f21=63;g21=255;f22=191;g22=255;f23=255;g23=0;figure(21),plot([f20,f21,f22,f23],[g20,g21,g22,g23],'r')axis tight,xlabel('f'),ylabel('g')title('intensity transformation')r21=(g21-g20)/(f21-f20);b21=g20-r21*f20;r22=(g22-g21)/(f22-f21);b22=g21-r22*f21;r23=(g23-g22)/(f23-f22);b23=g22-r23*f22;[m,n]=size(in1);in2=double(in1);for i=1:m for j=1:n f=in2(i,j);g2(i,j)=0;if(f>=0)&(f<=f21)g2(i,j)=r21*f+b21;elseif(f>=f21)&(f<=f22)g2(i,j)=r22*f+b22;elseif(f>=f22)&(f<=f23)g2(i,j)=r23*f+b23;end end end g2=uint8(g2);figure(22),subplot(121),imshow(in1)subplot(122),imshow(g2)%imshow(mat2gray(g2))%第三個獨立的變換 f30=0;g30=255;f31=63;g31=255;f32=127;g32=0;f33=255;g33=0;figure(31),plot([f30,f31,f32,f33],[g30,g31,g32,g33],'r')axis tight,xlabel('f'),ylabel('g')title('intensity transformation')r31=(g31-g30)/(f31-f30);b31=g30-r31*f30;r32=(g32-g31)/(f32-f31);b32=g31-r32*f31;r33=(g33-g32)/(f33-f32);b33=g32-r33*f32;[m,n]=size(in1);in2=double(in1);for i=1:m for j=1:n f=in2(i,j);g3(i,j)=0;if(f>=0)&(f<=f31)g3(i,j)=r31*f+b31;elseif(f>=f31)&(f<=f32)g3(i,j)=r32*f+b32;elseif(f>=f32)&(f<=f33)g3(i,j)=r33*f+b33;end end end g3=uint8(g3);figure(32),subplot(121),imshow(in1)subplot(122),imshow(g3)%imshow(mat2gray(g3))%彩色合成 for i=1:m for j=1:n out(i,j,1)=g1(i,j);out(i,j,2)=g2(i,j);out(i,j,3)=g3(i,j);end end figure,imshow(out) 實驗八 圖像檢測與分割 一、實驗目的 1、了解圖像的實際獲取過程。 2、鞏固圖像空間分辨率和灰度級分辨率、鄰域等重要概念。 3、熟練掌握圖像讀、寫、顯示、類型轉換等matlab 函數的用法。 二、實驗內容 1、應用一階算子roberts 檢測邊緣。 2、用一階算子sobel 檢測邊緣并對邊界處的像素進行處理。 3、用上面描述的Otsu 算法編寫matlab 程序實現圖像分割。 三、實驗原理 [g,t]=edge(image,method,threshold,direction)其中image 為輸入圖像method 為采用的方法類型:threshold 為閾值,如果給定閾值,則t= threshold,否則有函數自動計算出來并把其值返回給t;direction 為所尋找邊緣的方向,其值可以為horizontal,vertical,both 默認為both;g 為返回的二值圖像。 四、實驗代碼與結果 1、clc,clear,close all f=imread('lena.jpg');t=50;g=robertsf(f,t);subplot(121),imshow(f),title('原圖')subplot(122),imshow(g),title('roberts 算子')%用roberts 算子對圖像進行邊緣檢測的函數 function g=robertsf(f,t)[m,n]=size(f);g=f;h1=[-1 0;0 1];h2=[0-1;1 0];x1=h1;x2=h2;for i=2:1:m-1 for j=2:1:n-1 sum1=0;sum2=0;sum=0;for p=1:2 for q=1:2 x1(p,q)=f(i+(p-2),j+(q-2));x2(p,q)=f(i+(p-2),j+(q-2));sum1=sum1+x1(p,q)*h1(p,q);sum2=sum2+x2(p,q)*h2(p,q);sum=(sum1^2+sum2^2)^(1/2);end end if sum else end end end 2、clc,clear,close all f=imread('cameraman.tif');k=3;[m,n]=size(f);b1=[-1-2-1 0 0 0 1 2 1];b2=[-1 0 1-2 0 2-1 0 1];t=150;%f1 是對邊緣像素補0 后得到的圖像 f1=zeros(m+(k-1),n+(k-1));[m1,n1]=size(f1);%f1 的邊緣像素值為0中間的像素值依然為f f1((1+(k-1)/2):(m1-(k-1)/2),(1+(k-1)/2):(n1-(k-1)/2))=f;%注意這條指令絕對不能少 ga=f1;%取出窗口內的像素值并作標準均值濾波處理 for i=(k+1)/2:(m1-(k-1)/2)for j=(k+1)/2:(n1-(k-1)/2)a=0;%a 是一維數組1xk^2 x=1;%x 是數組的序號 for p=1:k for q=1:k a(x)=f1(i+(p-(k+1)/2),j+(q-(k+1)/2));x=x+1;end end sum1=0;sum2=0;for w=1:k^2 sum1=sum1+a(w)*b1(w);sum2=sum2+a(w)*b2(w);end sum=(sum1^2+sum2^2)^(1/2); if sum 3、%利用Otsu 法閾值選擇的方法分割圖像 clc,clear,close all k=8;%k 表示無符號整型數的位數 L=2^k;in=imread('pout.tif');[m,n]=size(in);num=zeros(1,256);% num 是每個灰度級對應的像素個數 p=zeros(1,256);% p 是每個灰度級出現的概率 %p=zeros(1,256);% q 是每個灰度級出現的概率的累積分布函數 for i=1:m for j=1:n num(1,in(i,j)+1)=num(1,in(i,j)+1)+1;% 統計個數 end end p=num./(m*n);% 求概率 ut=0;%ut 是整幅圖像的均值 for i=1:L ut=ut+(i-1)*p(i);end for t=0:L-1 w0=0;w1=0;for i=1:t w0=w0+p(i);end w1=1-w0;u0=0; for i=1:t if w0>0 u0=u0+i*p(i)/w0;else u0=u0+0;end end u1=0;for i=(t+1):L if w1>0 u1=u1+i*p(i)/w1;else u1=u1+0;end end rou(t+1)=w0*w1*(u0-u1)^2;%類間方差的求取 end maxrou=max(rou);%類間方差的最大值 for i=1:L if rou(i)==maxrou r=i-1;end end r %類間方差最大所對應的灰度值 for i=1:m for j=1:n if in(i,j)>r out(i,j)=1;else out(i,j)=0;end end end subplot(121),imshow(in)subplot(122),imshow(out)運行結果得到的閾值為:114