MATLAB中圖像函數大全1

圖像增強

1. 直方圖均衡化的 Matlab 實現

 

1.1  imhist 函數

功能:計算和顯示圖像的色彩直方圖

格式:imhist(I,n)

        imhist(X,map)

說明:imhist(I,n) 其中,n 爲指定的灰度級數目,缺省值爲256;imhist(X,map) 就算和顯示索引色圖像 X 的直方圖,map 爲調色板。用 stem(x,counts) 同樣可以顯示直方圖。

 

1.2 imcontour 函數

功能:顯示圖像的等灰度值圖

格式:imcontour(I,n),imcontour(I,v)

說明:n 爲灰度級的個數,v 是有用戶指定所選的等灰度級向量。

 

1.3 imadjust 函數

功能:通過直方圖變換調整對比度

格式:J=imadjust(I,[low high],[bottom top],gamma)

        newmap=imadjust(map,[low high],[bottom top],gamma)

說明:J=imadjust(I,[low high],[bottom top],gamma) 其中,gamma 爲校正量r,[low high] 爲原圖像中要變換的灰度範圍,[bottom top] 指定了變換後的灰度範圍;newmap=imadjust(map,[low high],[bottom top],gamma) 調整索引色圖像的調色板 map 。此時若 [low high] 和 [bottom top] 都爲2×3的矩陣,則分別調整 R、G、B 3個分量。

 

1.4  histeq 函數

功能:直方圖均衡化

格式:J=histeq(I,hgram)

        J=histeq(I,n)

        [J,T]=histeq(I,...)

        newmap=histeq(X,map,hgram)

        newmap=histeq(X,map)

        [new,T]=histeq(X,...)

說明:J=histeq(I,hgram) 實現了所謂“直方圖規定化”,即將原是圖象 I 的直方圖變換成用戶指定的向量 hgram 。hgram 中的每一個元素都在 [0,1] 中;J=histeq(I,n) 指定均衡化後的灰度級數 n ,缺省值爲 64;[J,T]=histeq(I,...) 返回從能將圖像 I 的灰度直方圖變換成圖像 J 的直方圖的變換 T ;newmap=histeq(X,map) 和 [new,T]=histeq(X,...) 是針對索引色圖像調色板的直方圖均衡。

 

2. 噪聲及其噪聲的 Matlab 實現

        imnoise 函數

格式:J=imnoise(I,type)

        J=imnoise(I,type,parameter)

說明:J=imnoise(I,type) 返回對圖像 I 添加典型噪聲後的有噪圖像 J ,參數 type 和 parameter 用於確定噪聲的類型和相應的參數。

 

3. 圖像濾波的 Matlab 實現

 

3.1 conv2 函數

功能:計算二維卷積

格式:C=conv2(A,B)

        C=conv2(Hcol,Hrow,A)

        C=conv2(...,'shape')

說明:對於 C=conv2(A,B) ,conv2 的算矩陣 A  和 B 的卷積,若 [Ma,Na]=size(A), [Mb,Nb]=size(B), 則 size(C)=[Ma+Mb-1,Na+Nb-1]; C=conv2(Hcol,Hrow,A) 中,矩陣 A 分別與 Hcol 向量在列方向和 Hrow 向量在行方向上進行卷積;C=conv2(...,'shape') 用來指定 conv2 返回二維卷積結果部分,參數 shape 可取值如下:

        》full 爲缺省值,返回二維卷積的全部結果;

        》same 返回二維卷積結果中與 A 大小相同的中間部分;

        valid 返回在卷積過程中,未使用邊緣補 0  部分進行計算的卷積結果部分,當 size(A)>size(B) 時,size(C)=[Ma-Mb+1,Na-Nb+1]。

 

3.2 conv 函數

功能:計算多維卷積

格式:與 conv2 函數相同

 

3.3 filter2函數

功能:計算二維線型數字濾波,它與函數 fspecial 連用

格式:Y=filter2(B,X)

        Y=filter2(B,X,'shape')

說明:對於 Y=filter2(B,X) ,filter2 使用矩陣 B 中的二維 FIR 濾波器對數據 X 進行濾波,結果 Y 是通過二維互相關計算出來的,其大小與 X 一樣;對於 Y=filter2(B,X,'shape') ,filter2 返回的 Y 是通過二維互相關計算出來的,其大小由參數 shape 確定,其取值如下:

        》full 返回二維相關的全部結果,size(Y)>size(X);

        》same 返回二維互相關結果的中間部分,Y 與 X 大小相同;

        》valid 返回在二維互相關過程中,未使用邊緣補 0 部分進行計算的結果部分,有 size(Y)<size(X) 。

 

3.4 fspecial 函數

功能:產生預定義濾波器

格式:H=fspecial(type)

        H=fspecial('gaussian',n,sigma)         高斯低通濾波器

        H=fspecial('sobel')                          Sobel 水平邊緣增強濾波器

        H=fspecial('prewitt')                       Prewitt 水平邊緣增強濾波器

        H=fspecial('laplacian',alpha)             近似二維拉普拉斯運算濾波器

        H=fspecial('log',n,sigma)                 高斯拉普拉斯(LoG)運算濾波器

        H=fspecial('average',n)                   均值濾波器

        H=fspecial('unsharp',alpha)             模糊對比增強濾波器

說明:對於形式 H=fspecial(type) ,fspecial 函數產生一個由 type 指定的二維濾波器 H ,返回的 H 常與其它濾波器搭配使用。

 

4. 彩色增強的 Matlab 實現

4.1 imfilter函數

功能:真彩色增強

格式:B=imfilter(A,h)

說明:將原始圖像 A 按指定的濾波器 h 進行濾波增強處理,增強後的圖像 B 與 A 的尺寸和類型相同。

圖像的變換

1. 離散傅立葉變換的 Matlab 實現

      Matlab 函數 fft、fft2 和 fftn 分別可以實現一維、二維和 N 維 DFT 算法;而函數 ifft、ifft2 和 ifftn 則用來計算反 DFT 。這些函數的調用格式如下:

         A=fft(X,N,DIM)

      其中,X 表示輸入圖像;N 表示採樣間隔點,如果 X 小於該數值,那麼 Matlab 將會對 X 進行零填充,否則將進行截取,使之長度爲 N ;DIM 表示要進行離散傅立葉變換。

 

        A=fft2(X,MROWS,NCOLS) 

其中,MROWS 和 NCOLS 指定對 X 進行零填充後的 X 大小。

 

        A=fftn(X,SIZE)

其中,SIZE 是一個向量,它們每一個元素都將指定 X 相應維進行零填充後的長度。

 

      函數 ifft、ifft2 和 ifftn的調用格式於對應的離散傅立葉變換函數一致。

 

例子:圖像的二維傅立葉頻譜

 

% 讀入原始圖像

I=imread('lena.bmp');

imshow(I)

% 求離散傅立葉頻譜

J=fftshift(fft2(I));

figure;

imshow(log(abs(J)),[8,10])

 

 

2. 離散餘弦變換的 Matlab 實現

 

2.1.  dct2 函數

功能:二維 DCT 變換

格式:B=dct2(A)

        B=dct2(A,m,n)

        B=dct2(A,[m,n])

說明:B=dct2(A) 計算 A 的 DCT 變換 B ,A 與 B 的大小相同;B=dct2(A,m,n) 和 B=dct2(A,[m,n]) 通過對 A 補 0 或剪裁,使 B 的大小爲 m×n。

 

2.2.  dict2 函數

功能:DCT 反變換

格式:B=idct2(A) 

        B=idct2(A,m,n)

        B=idct2(A,[m,n])

說明:B=idct2(A) 計算 A 的 DCT 反變換 B ,A 與 B 的大小相同;B=idct2(A,m,n) 和 B=idct2(A,[m,n]) 通過對 A 補 0 或剪裁,使 B 的大小爲 m×n。

 

2.3.  dctmtx函數

功能:計算 DCT 變換矩陣

格式:D=dctmtx(n)

說明:D=dctmtx(n) 返回一個 n×n 的 DCT 變換矩陣,輸出矩陣 D 爲 double 類型。

 

 

3.  圖像小波變換的 Matlab 實現

 

3.1  一維小波變換的 Matlab 實現

(1) dwt 函數

功能:一維離散小波變換

格式:[cA,cD]=dwt(X,'wname')

        [cA,cD]=dwt(X,Lo_D,Hi_D)

說明:[cA,cD]=dwt(X,'wname') 使用指定的小波基函數 'wname' 對信號 X 進行分解,cA、cD 分別爲近似分量和細節分量;[cA,cD]=dwt(X,Lo_D,Hi_D) 使用指定的濾波器組 Lo_D、Hi_D 對信號進行分解。

(2) idwt 函數

功能:一維離散小波反變換

格式:X=idwt(cA,cD,'wname')

        X=idwt(cA,cD,Lo_R,Hi_R)

        X=idwt(cA,cD,'wname',L)

        X=idwt(cA,cD,Lo_R,Hi_R,L)

說明:X=idwt(cA,cD,'wname') 由近似分量 cA 和細節分量 cD 經小波反變換重構原始信號 X 。

        'wname' 爲所選的小波函數

        X=idwt(cA,cD,Lo_R,Hi_R) 用指定的重構濾波器 Lo_R 和 Hi_R 經小波反變換重構原始信號 X 。

        X=idwt(cA,cD,'wname',L) 和 X=idwt(cA,cD,Lo_R,Hi_R,L) 指定返回信號 X 中心附近的 L 個點。

 

3.2  二維小波變換的 Matlab 實現

 

          二維小波變換的函數

-------------------------------------------------

     函數名                函數功能

---------------------------------------------------

     dwt2            二維離散小波變換

   wavedec2       二維信號的多層小波分解

     idwt2           二維離散小波反變換

   waverec2        二維信號的多層小波重構

   wrcoef2          由多層小波分解重構某一層的分解信號

   upcoef2          由多層小波分解重構近似分量或細節分量

   detcoef2         提取二維信號小波分解的細節分量

   appcoef2        提取二維信號小波分解的近似分量

   upwlev2         二維小波分解的單層重構

   dwtpet2         二維週期小波變換

   idwtper2        二維週期小波反變換

-------------------------------------------------------------

 

(1) wcodemat 函數

功能:對數據矩陣進行僞彩色編碼

格式:Y=wcodemat(X,NB,OPT,ABSOL)

        Y=wcodemat(X,NB,OPT)

        Y=wcodemat(X,NB)

        Y=wcodemat(X)

說明:Y=wcodemat(X,NB,OPT,ABSOL) 返回數據矩陣 X 的編碼矩陣 Y ;NB 僞編碼的最大值,即編碼範圍爲 0~NB,缺省值 NB=16;

       OPT 指定了編碼的方式(缺省值爲 'mat'),即:

                 OPT='row' ,按行編碼

                 OPT='col' ,按列編碼

                 OPT='mat' ,按整個矩陣編碼

       ABSOL 是函數的控制參數(缺省值爲 '1'),即:

                 ABSOL=0 時,返回編碼矩陣

                 ABSOL=1 時,返回數據矩陣的絕對值 ABS(X)

 

(2) dwt2 函數

功能:二維離散小波變換

格式:[cA,cH,cV,cD]=dwt2(X,'wname')

        [cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D)

說明:[cA,cH,cV,cD]=dwt2(X,'wname')使用指定的小波基函數 'wname' 對二維信號 X 進行二維離散小波變幻;cA,cH,cV,cD 分別爲近似分量、水平細節分量、垂直細節分量和對角細節分量;[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D) 使用指定的分解低通和高通濾波器 Lo_D 和 Hi_D 分解信號 X 。

 

(3) wavedec2 函數

功能:二維信號的多層小波分解

格式:[C,S]=wavedec2(X,N,'wname')

        [C,S]=wavedec2(X,N,Lo_D,Hi_D)

說明:[C,S]=wavedec2(X,N,'wname') 使用小波基函數 'wname' 對二維信號 X 進行 N 層分解;[C,S]=wavedec2(X,N,Lo_D,Hi_D) 使用指定的分解低通和高通濾波器 Lo_D 和 Hi_D 分解信號 X 。

 

(4) idwt2 函數

功能:二維離散小波反變換

格式:X=idwt2(cA,cH,cV,cD,'wname')

        X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R)

        X=idwt2(cA,cH,cV,cD,'wname',S)

        X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R,S)

說明:X=idwt2(cA,cH,cV,cD,'wname') 由信號小波分解的近似信號 cA 和細節信號 cH、cH、cV、cD 經小波反變換重構原信號 X ;X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R) 使用指定的重構低通和高通濾波器 Lo_R 和 Hi_R 重構原信號 X ;X=idwt2(cA,cH,cV,cD,'wname',S) 和 X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R,S) 返回中心附近的 S 個數據點。

 

(5) waverec2 函數

說明:二維信號的多層小波重構

格式:X=waverec2(C,S,'wname')

        X=waverec2(C,S,Lo_R,Hi_R)

說明:X=waverec2(C,S,'wname') 由多層二維小波分解的結果 C、S 重構原始信號 X ,'wname' 爲使用的小波基函數;X=waverec2(C,S,Lo_R,Hi_R) 使用重構低通和高通濾波器 Lo_R 和 Hi_R 重構原信號。

圖像處理工具箱

1. 圖像和圖像數據

   缺省情況下,MATLAB將圖像中的數據存儲爲雙精度類型(double),64位浮點

數,所需存儲量很大;MATLAB還支持另一種類型無符號整型(uint8),即圖像矩

陣中每個數據佔用1個字節。

   在使用MATLAB工具箱時,一定要注意函數所要求的參數類型。另外,uint8

與double兩種類型數據的值域不同,編程需注意值域轉換

          從uint8到double的轉換

   ---------------------------------------------

       圖像類型        MATLAB語句

   ---------------------------------------------

     索引色             B=double(A)+1

     索引色或真彩色  B=double(A)/255

     二值圖像          B=double(A)

   ---------------------------------------------

 

         從double到uint8的轉換

   ---------------------------------------------

       圖像類型        MATLAB語句

   ---------------------------------------------

    索引色               B=uint8(round(A-1))

    索引色或真彩色    B=uint8(round(A*255))

    二值圖像            B=logical(uint8(round(A)))

   ---------------------------------------------

 

2. 圖像處理工具箱所支持的圖像類型

 

2.1 真彩色圖像

    R、G、B三個分量表示一個像素的顏色。如果要讀取圖像中(100,50)處的像素值,

可查看三元數據(100,50,1:3)。

    真彩色圖像可用雙精度存儲,亮度值範圍是[0,1];比較符合習慣的存儲方法是用無

符號整型存儲,亮度值範圍[0,255]

  

2.2 索引色圖像

   包含兩個結構,一個是調色板,另一個是圖像數據矩陣。調色板是一個有3列和若干行

的色彩映象矩陣,矩陣每行代表一種顏色,3列分別代表紅、綠、藍色強度的雙精度數。

  

   注意:MATLAB中調色板色彩強度[0,1],0代表最暗,1代表最亮。

          常用顏色的RGB值

   --------------------------------------------

    顏色    R   G   B      顏色    R   G   B

   --------------------------------------------

     黑     0   0   1      洋紅    1   0   1

     白     1   1   1      青藍    0   1   1

     紅     1   0   0      天藍  0.67  0   1

     綠     0   1   0      橘黃    1  0.5  0

     藍     0   0   1      深紅   0.5  0   0

     黃     1   1   0       灰    0.5 0.5 0.5      

   --------------------------------------------

         產生標準調色板的函數

   -------------------------------------------------

    函數名       調色板

   -------------------------------------------------

     Hsv       色彩飽和度,以紅色開始,並以紅色結束

     Hot       黑色-紅色-黃色-白色

     Cool      青藍和洋紅的色度

     Pink      粉紅的色度

     Gray      線型灰度

     Bone      帶藍色的灰度

     Jet        Hsv的一種變形,以藍色開始,以藍色結束

     Copper    線型銅色度

     Prim       三棱鏡,交替爲紅、橘黃、黃、綠和天藍

     Flag       交替爲紅、白、藍和黑

  --------------------------------------------------

   缺省情況下,調用上述函數灰產生一個64×3的調色板,用戶也可指定調色板大小。

  

   索引色圖像數據也有double和uint8兩種類型。

   當圖像數據爲double類型時,值1代表調色板中的第1行,值2代表第2行……

   如果圖像數據爲uint8類型,0代表調色板的第一行,,值1代表第2行……

2.3 灰度圖像

   存儲灰度圖像只需要一個數據矩陣。

   數據類型可以是double,[0,1];也可以是uint8,[0,255]

2.4 二值圖像

   二值圖像只需一個數據矩陣,每個像素只有兩個灰度值,可以採用uint8或double類型存儲。

   MATLAB工具箱中以二值圖像作爲返回結果的函數都使用uint8類型。

2.5 圖像序列

   MATLAB工具箱支持將多幀圖像連接成圖像序列。

   圖像序列是一個4維數組,圖像幀的序號在圖像的長、寬、顏色深度之後構成第4維。

   分散的圖像也可以合併成圖像序列,前提是各圖像尺寸必須相同,若是索引色圖像,

調色板也必須相同。

   可參考cat()函數    A=cat(4,A1,A2,A3,A4,A5)

 

3. MATLAB圖像類型轉換

         圖像類型轉換函數

   ---------------------------------------------------------------------------

     函數名                      函數功能

   ---------------------------------------------------------------------------

     dither       圖像抖動,將灰度圖變成二值圖,或將真彩色圖像抖動成索引色圖像

    gray2ind    將灰度圖像轉換成索引圖像

    grayslice    通過設定閾值將灰度圖像轉換成索引色圖像

     im2bw      通過設定亮度閾值將真彩色、索引色、灰度圖轉換成二值圖

    ind2gray    將索引色圖像轉換成灰度圖像

    ind2rgb      將索引色圖像轉換成真彩色圖像

    mat2gray   將一個數據矩陣轉換成一副灰度圖

    rgb2gray    將一副真彩色圖像轉換成灰度圖像

    rgb2ind      將真彩色圖像轉換成索引色圖像

   ----------------------------------------------------------------------------

 

4. 圖像文件的讀寫和查詢

 

4.1  圖形圖像文件的讀取

   利用函數imread()可完成圖形圖像文件的讀取,語法:

 

     A=imread(filename,fmt)

     [X,map]=imread(filename,fmt)

     [...]=imread(filename)

     [...]=imread(filename,idx)  (只對TIF格式的文件)

     [...]=imread(filename,ref)  (只對HDF格式的文件)

 

   通常,讀取的大多數圖像均爲8bit,當這些圖像加載到內存中時,Matlab就將其存放

在類uint8中。此爲Matlab還支持16bit的PNG和TIF圖像,當讀取這類文件時,Matlab就將

其存貯在uint16中。

 

   注意:對於索引圖像,即使圖像陣列的本身爲類uint8或類uint16,imread函數仍將

顏色映象表讀取並存貯到一個雙精度的浮點類型的陣列中。

 

4.2  圖形圖像文件的寫入

   使用imwrite函數,語法如下:

 

   imwrite(A,filename,fmt)

   imwrite(X,map,filename,fmt)

   imwrite(...,filename)

   imwrite(...,parameter,value)

 

   當利用imwrite函數保存圖像時,Matlab缺省的方式是將其簡化道uint8的數據格式。

 

4.3 圖形圖像文件信息的查詢   imfinfo()函數

 

5.  圖像文件的顯示

 

5.1  索引圖像及其顯示

 

   方法一:

          image(X)

          colormap(map)

 

   方法二:

          imshow(X,map)

 

5.2  灰度圖像及其顯示

   Matlab 7.0 中,要顯示一副灰度圖像,可以調用函數 imshow 或 imagesc (即

imagescale,圖像縮放函數)

 

   (1) imshow 函數顯示灰度圖像

    使用 imshow(I)    或  使用明確指定的灰度級書目:imshow(I,32)

   

    由於Matlab自動對灰度圖像進行標度以適合調色板的範圍,因而可以使用自定義

大小的調色板。其調用格式如下:

           imshow(I,[low,high])

    其中,low 和 high 分別爲數據數組的最小值和最大值。

 

   (2) imagesc 函數顯示灰度圖像

   下面的代碼是具有兩個輸入參數的 imagesc 函數顯示一副灰度圖像

       imagesc(1,[0,1]);

       colormap(gray);

    imagesc 函數中的第二個參數確定灰度範圍。灰度範圍中的第一個值(通常是0),

對應於顏色映象表中的第一個值(顏色),第二個值(通常是1)則對應與顏色映象表

中的最後一個值(顏色)。灰度範圍中間的值則線型對應與顏色映象表中剩餘的值(顏色)。

 

    在調用 imagesc 函數時,若只使用一個參數,可以用任意灰度範圍顯示圖像。在該

調用方式下,數據矩陣中的最小值對應於顏色映象表中的第一個顏色值,數據矩陣中的最大

值對應於顏色映象表中的最後一個顏色值。

 

5.3  RGB 圖像及其顯示

   (1) image(RGB)

   不管RGB圖像的類型是double浮點型,還是 uint8 或 uint16 無符號整數型,Matlab都

能通過 image 函數將其正確顯示出來。

 

   RGB8 = uint8(round(RGB64×255));  % 將 double 浮點型轉換爲 uint8 無符號整型

   RGB64 = double(RGB8)/255;            % 將 uint8 無符號整型轉換爲 double 浮點型

   RGB16 = uint16(round(RGB64×65535));  % 將 double 浮點型轉換爲 uint16 無符號整型

   RGB64 = double(RGB16)/65535;      % 將 uint16 無符號整型轉換爲 double 浮點型

 

   (2) imshow(RGB) 參數是一個 m×n×3 的數組

 

5.4 二進制圖像及其顯示

 

   (1) imshow(BW)

   在 Matlab 7.0 中,二進制圖像是一個邏輯類,僅包括 0 和 1 兩個數值。像素 0 顯示

爲黑色,像素 1 顯示爲白色。

   顯示時,也可通過NOT(~)命令,對二進制圖象進行取反,使數值 0 顯示爲白色;1 顯示

爲黑色。

   例如: imshow(~BW)

 

   (2) 此外,還可以使用一個調色板顯示一副二進制圖像。如果圖形是 uint8 數據類型,

則數值 0 顯示爲調色板的第一個顏色,數值 1 顯示爲第二個顏色。

   例如: imshow(BW,[1 0 0;0 0 1])  

 

5.5 直接從磁盤顯示圖像

   可使用一下命令直接進行圖像文件的顯示:

        imshow filename

   其中,filename 爲要顯示的圖像文件的文件名。

 

   如果圖像是多幀的,那麼 imshow 將僅顯示第一幀。但需注意,在使用這種方式時,圖像

數據沒有保存在Matlab 7.0 工作平臺。如果希望將圖像裝入工作臺中,需使用 getimage 函

數,從當前的句柄圖形圖像對象中獲取圖像數據,

   命令形式爲:  rgb = getimage;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章