| 5 | 1/1 | 返回列表 |
| 查看: 7546 | 回復: 19 | ||||||||||||
| 【獎勵】 本帖被評價18次,作者wayping增加金幣 13.8 個 | ||||||||||||
| 當前只顯示滿足指定條件的回帖,點擊這里查看本話題的所有回帖 | ||||||||||||
[資源]
分享matlab的一些代碼(入門貼)
|
||||||||||||
|
小可在使用matlab的過程中,有些常用的程序經常反復輸入,不甚其煩。相信有的童鞋也遇到過相似的情況,所以總結了一下,以饗各位。屬于入門貼,歡迎高手交流~~ 1、圖像的讀取 MATLAB中從圖像文件中讀取數據用函數imread(),這個函數的作用就是將圖像文件的數據讀入矩陣中,此外還可以用imfinfo()函數查看圖像文件的信息(見例1) 2、灰度直方圖及直方圖均衡化 灰度直方圖用于顯示圖像的灰度值分布情況,是數字圖像處理中最簡單和最實用的工具。MATLAB中提供了專門繪制直方圖的函數imhist()。用它可以很簡單的繪制出一幅圖像的灰度直方圖(見例2)。 在圖像處理中,點運算是簡單而又重要的一種技術,其中最常用的一種應用就是直方圖的均衡化(見例3)。 3、圖像的代數運算 代數運算是指對兩幅輸入圖像進行點對點的加、減、乘和除計算而得到輸出圖像的運算。對于相加和相乘的情形,可能不止有兩幅圖像參加運算。圖像相加的一個重要應用是對同一場景的多幅圖像求平均值。這點被經常用來有效地降低加性(additive)隨機噪聲的影響(見例4) 4、圖像濾波處理 在數字圖像處理中,常常會遇到圖像中混雜有許多的噪聲。因此,在進行圖像處理中,有時要先進行祛除噪聲的工作。最常用的祛除噪聲的方法是用濾波器進行濾波處理。MATLAB的圖像處理工具箱里也設計了許多的濾波器。如均值濾波器、中值濾波器、維納濾波器等。用戶可以很方便的運用一些函數完成數字濾波工作。(見例5)。 5、傅立葉變換 傅立葉變換是線性系統分析的一個有力的工具。它在圖像處理,特別是在圖像增強、復原和壓縮中,扮演著非常重要的作用。實際中一般采用一種叫做快速傅立葉變換(FFT)的方法,MATLAB中的fft2指令用于得到二維FFT的結果,ifft2指令用于得到二維FFT逆變換的結果。(見例6) 6、圖像壓縮 在圖像的變換和壓縮中,常常用到離散余弦變換(DCT)。DCT具有能使圖像的最重要的信息集中在DCT的幾個系數上的性能。正是基于此,DCT通常應用于圖像的壓縮。(見例7) 1、圖像的讀取 MATLAB中從圖像文件中讀取數據用函數imread(),這個函數的作用就是將圖像文件的數據讀入矩陣中,此外還可以用imfinfo()函數查看圖像文件的信息(見例1) %例1:圖像數據及圖像信息的讀取 imfinfo c:\lilizong\boat.bmp %讀取圖像信息 [A,M]=imread('c:\lilizong\boat.bmp'); %圖像數據的讀取,將圖像數據放入矩陣A中,顏色數據放入矩陣M中 imshow(A,M);title('原圖像'); M(:,1)=0; %將顏色數據矩陣的一列置零 figure imshow(A,M);title('改變顏色后的圖像') MATLAB還提供了將數據寫入一個文件的函數imwrite以及不同類型文件相互轉換的函數,可以參考MATLAB 的幫助文件。 2、灰度直方圖及直方圖均衡化 灰度直方圖用于顯示圖像的灰度值分布情況,是數字圖像處理中最簡單和最實用的工具。MATLAB中提供了專門繪制直方圖的函數imhist()。用它可以很簡單的繪制出一幅圖像的灰度直方圖(見例2)。 %例2:直方圖的顯示 imshow('c:\lilizong\boat.bmp');title('原圖像') %顯示原圖像 A=imread('e:\matlabwork\tuxiang\Girl.bmp','bmp'); figure;imhist(A),title('對應直方圖') 在圖像處理中,點運算是簡單而又重要的一種技術,其中最常用的一種應用就是直方圖的均衡化(見例3)。 %例3:直方圖均衡化 imshow('c:\lilizong\boat1.bmp');title('原圖像') I=imread('c:\lilizong\boat1.bmp'); figure;imhist(I),title('對應直方圖') %從得到的直方圖可以看出,圖像的對比度很低,灰度級集中在70-160范圍內,如果只取 %這個范圍內的灰度,并擴展到[0,255],則會明顯增強圖像對比度 J=imadjust(I,[70/255 160/255],[]); figure;imshow(J),title('經灰度級調整后的圖') figure;imhist(J),title('灰度級調整后的直方圖') %MATLAB還提供了histeq函數(自動直方圖均衡化) K=histeq(I); figure;imshow(K),title('經直方圖均衡化后的圖') figure;imhist(K),title('直方圖均衡化后的直方圖') 3、圖像的代數運算 代數運算是指對兩幅輸入圖像進行點對點的加、減、乘和除計算而得到輸出圖像的運算。對于相加和相乘的情形,可能不止有兩幅圖像參加運算。圖像相加的一個重要應用是對同一場景的多幅圖像求平均值。這點被經常用來有效地降低加性(additive)隨機噪聲的影響(見例4) %例4:圖象加噪聲再通過多次相加求平均的方法祛除噪聲 [I,M]=imread('c:\boat.png'); J=imnoise(I,'salt & pepper',0.005); subplot(1,2,1),imshow(I,M),title('原圖象'); subplot(1,2,2),imshow(J,M),title('加噪聲后圖象'); K=zeros(256); for i=1:100 J=imnoise(I,'salt & pepper',0.005); J1=im2double(J); % K=K+J1; K=K+J1; end K=K/100; figure,imshow(K),title('相加求平均后的圖象'); 4、圖像濾波處理 在數字圖像處理中,常常會遇到圖像中混雜有許多的噪聲。因此,在進行圖像處理中,有時要先進行祛除噪聲的工作。最常用的祛除噪聲的方法是用濾波器進行濾波處理。MATLAB的圖像處理工具箱里也設計了許多的濾波器。如均值濾波器、中值濾波器、維納濾波器等。用戶可以很方便的運用一些函數完成數字濾波工作。(見例5)。 %例5:用濾波器祛除圖象噪聲(分別用均值濾波,中值濾波,及維納濾波器祛除加入高斯噪聲的圖象) I=imread('C:\boat.png'); J=imnoise(I,'gaussian',0,0.002); %加入高斯噪聲 %進行均值濾波 h=fspecial('average',3); %fspecial函數用于產生預定義濾波器 I2=uint8(round(filter2(h,I))); %filter2函數用于圖像濾波,此處h是濾波參數(均值),I是要處理的圖像 %進行中值濾波 I3=medfilt2(J,[3,3]); %medfilt2函數用于圖像的中值濾波 %進行維納濾波 I4=wiener2(J,[3,3]);%進行一次維納濾波 I5=wiener2(I4,[3,3]);%進行二次維納濾波 subplot(2,3,1),imshow(I),title('原圖象') subplot(2,3,2),imshow(J),title('加噪聲圖象') subplot(2,3,3),imshow(I2),title('均值濾波后圖象') subplot(2,3,4),imshow(I3),title('中值濾波后圖象') subplot(2,3,5),imshow(I4),title('維納濾波后圖象') subplot(2,3,6),imshow(I5),title('兩次維納濾波后圖象') 5、傅立葉變換 傅立葉變換是線性系統分析的一個有力的工具。它在圖像處理,特別是在圖像增強、復原和壓縮中,扮演著非常重要的作用。實際中一般采用一種叫做快速傅立葉變換(FFT)的方法,MATLAB中的fft2指令用于得到二維FFT的結果,ifft2指令用于得到二維FFT逆變換的結果。(見例6) %例6:近似沖擊函數的二維快速傅立葉變換(FFT) x=1:99;y=1:99; [X,Y]=meshgrid(x,y); A=zeros(99,99); A(49:51,49:51)=1; B=fft2(A); subplot(1,2,1),imshow(A),xlabel('空域圖象'); subplot(1,2,2),imshow(B),xlabel('時域圖象'); figure subplot(1,2,1),mesh(X,Y,A),xlabel('空域'),grid on; subplot(1,2,2),mesh(X,Y,abs(B)),xlabel('時域'),grid on; 6、圖像壓縮 在圖像的變換和壓縮中,常常用到離散余弦變換(DCT)。DCT具有能使圖像的最重要的信息集中在DCT的幾個系數上的性能。正是基于此,DCT通常應用于圖像的壓縮。(見例7) JPEG圖像壓縮算法: 輸入圖像被分成8*8或16*16的小塊,然后對每一小塊進行二維DCT(離散余弦變換)變換,變換后的系數量化、編碼并傳輸; JPEG文件解碼量化了的DCT系數,對每一塊計算二維逆DCT變換,最后把結果塊拼接成一個完整的圖像。在DCT變換后舍棄那些不嚴重影響圖像重構的接近0的系數。 DCT變換的特點是變換后圖像大部分能量集中在左上角,因為左上放映原圖像低頻部分數據,右下反映原圖像高頻部分數據。而圖像的能量通常集中在低頻部分。 %例7:DCT變換用于圖象的壓縮實例 I=imread('d:\lilizong\test.jpg'); %該圖片在安裝matlab的目錄中找,原圖為灰度圖象 I=im2double(I);%圖像存儲類型轉換 T=dctmtx(8);%離散余弦變換矩陣 B=blkproc(I,[8 8],'P1*x*P2',T,T'); %對原圖像進行DCT變換 mask=[1 1 1 1 0 0 0 0 1 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]; B2=blkproc(B,[8 8],'P1.*x',mask); %數據壓縮,丟棄右下角高頻數據 I2=blkproc(B2,[8 8],'P1*x*P2',T',T); %進行DCT反變換,得到壓縮后的圖像 imshow(I) title('原始圖像') figure; imshow(I2) title('壓縮后的圖像') 應用到的函數: I=imread('圖像文件名') :讀取圖像數據,保存在矩陣I中; imshow(I) :顯示灰度圖像I,其他用法見matlab幫助; I2=im2double(I1) :把圖像數組I1轉換成double精度類型; D=dctmtx(n) :二維離散余弦變換函數,返回n*n離散余弦變換矩陣。 一個n*n的變換矩陣T被定義成: Tpq=1/sqrt(n) ,當p=0,0<=q<=M-1; Tpq=sqrt(2/n)*cos[pi*(2q+1)*p/2n] ,當1<=p<=M-1,0<=q<=M-1。 B=blkproc(A,[m n],fun,P1,P2...) :塊操作函數。對圖像A的每個不同的m*n塊應用fun函數,P1,P2等為fun函數參數。在圖像邊緣用0來擴展;只有當fun的返回矩陣是m*n矩陣時,B和A的大小才相同。 figure:強制生成一個新的個繪圖窗口; 可以看出,盡管由于85%的DCT系數被拋棄而使恢復后的圖像質量有所降低,圖像內容仍能清晰可辨,達到了圖像壓縮的目的。 發(fā)表于 @ 2007年04月06日 14:25:00|評論(3)|編輯 新一篇: 部分matlab代碼 | 舊一篇: MATLAB圖像處理命令 logerer 發(fā)表于2008年1月6日 20:43:43 IP:舉報 不錯不錯,感謝博主。圖片也發(fā)上來就更好了。為什么 (378209553@QQ.com) 發(fā)表于2008年5月28日 0:48:09 IP:舉報 imshow('C:\Documents and Settings\系統維護\桌面\a.jpg');title('原圖像') I=imread('C:\Documents and Settings\系統維護\桌面\a.jpg'); figure;imhist(I),title('對應直方圖') %從得到的直方圖可以看出,圖像的對比度很低,灰度級集中在70-160范圍內,如果只取 %這個范圍內的灰度,并擴展到[0,255],則會明顯增強圖像對比度 J=imadjust(I,[70/255 160/255],[]); figure;imshow(J),title('經灰度級調整后的圖') figure;imhist(J),title('灰度級調整后的直方圖') %MATLAB還提供了histeq函數(自動直方圖均衡化) K=histeq(I); figure;imshow(K),title('經直方圖均衡化后的圖') figure;imhist(K),title('直方圖均衡化后的直方圖') ??? Error using ==> iptcheckinput Function IMHIST expected its first input, I or X, to be two-dimensional. Error in ==> imhist>parse_inputs at 270 iptcheckinput(a, {'double','uint8','logical','uint16','int16','single'}, ... Error in ==> imhist at 57 [a, n, isScaled, top, map] = parse_inputs(varargin{:}); |
matlab學習專輯 | 模擬與仿真 | matlab | matlab |
科研軟件資料 | 數理基礎收集 | 數字圖像處理 | 科研相關 |
氧化鋅的例子 | source |
| 最具人氣熱帖推薦 [查看全部] | 作者 | 回/看 | 最后發(fā)表 | |
|---|---|---|---|---|
|
[考研] 0856,材料與化工321分求調劑 +7 | 大饞小子 2026-03-27 | 8/400 |
|
|---|---|---|---|---|
|
[考研] 340求調劑 +4 | jhx777 2026-03-27 | 4/200 |
|
|
[考研] 07化學280分求調劑 +10 | 722865 2026-03-23 | 10/500 |
|
|
[考博] 26申博 +3 | 加油沖啊! 2026-03-26 | 3/150 |
|
|
[考研] 279 分 求調劑 +4 | 睡個好覺_16 2026-03-24 | 4/200 |
|
|
[考研] 一志愿太原理工安全工程300分,求調劑 +4 | 0857求調劑. 2026-03-24 | 4/200 |
|
|
[考研] 考研調劑 +9 | 小蠟新筆 2026-03-26 | 9/450 |
|
|
[考研] 324求調劑 +5 | hanamiko 2026-03-26 | 5/250 |
|
|
[考研] 349求調劑 +4 | 李木子啊哈哈 2026-03-25 | 4/200 |
|
|
[考研] 生物學 296 求調劑 +4 | 朵朵- 2026-03-26 | 6/300 |
|
|
[考研] 機械學碩310分,數一英一,一志愿211本科雙非找調劑信息 +3 | @357 2026-03-25 | 3/150 |
|
|
[考研]
|
WWW西西弗斯 2026-03-24 | 8/400 |
|
|
[考研] 290分調劑求助 +3 | 吉祥止止陳 2026-03-25 | 3/150 |
|
|
[考研] 生物技術與工程 +3 | 1294608413 2026-03-25 | 4/200 |
|
|
[考研] 求調劑 +3 | 李李不服輸 2026-03-25 | 3/150 |
|
|
[考研] B區(qū)考研調劑 +4 | yqdszhdap- 2026-03-22 | 5/250 |
|
|
[考研] 305分求調劑(食品工程) +5 | Sxy112 2026-03-21 | 7/350 |
|
|
[考研] 環(huán)境學碩288求調劑 +8 | 皮皮皮123456 2026-03-22 | 8/400 |
|
|
[考研] 接收2026碩士調劑(學碩+專碩) +4 | allen-yin 2026-03-23 | 6/300 |
|
|
[考研]
|
Grand777 2026-03-21 | 3/150 |
|