Matlab 常用的影像處理函數

來源:互聯網
上載者:User
MATLAB常用映像操作

一. 讀寫影像檔

1. imread

imread函數用於讀入各種影像檔,如:a=imread('e:\w01.tif')

註:電腦E盤上要有w01相應的.tif檔案。

2. imwrite

imwrite函數用於寫入影像檔,如:imwrite(a,'e:\w02.tif',’tif’)

3. imfinfo

imfinfo函數用於讀取影像檔的有關資訊,如:imfinfo('e:\w01.tif')

二. 映像的顯示

1. image

image函數是MATLAB提供的最原始的映像顯示函數(主要彩色顯示圖象),如:

a=[1,2,3,4;4,5,6,7;8,9,10,11,12];

image(a);

2. imshow

imshow函數用於灰階影像檔的顯示,如:

i=imread('e:\w01.tif');

imshow(i);

3. colorbar

colorbar函數用顯示映像的顏色條。 
通常,顏色映象進行過調節,把資料從最小擴充到最大,也就是說整個顏色映象都用於繪圖。有時也許想改變顏色使用的方法。函數caxis代表顏色軸,因為顏色增加了另一個維數,它允許對資料範圍的一個子集使用整個顏色映象或者對資料的整個集合只使用使用中色彩映象的一部分。
       [cmin,cmax]=caxis返回映射到顏色映象中第一和最後輸入項的最小和最大的資料。它們通常被設成資料的最小值和最大值。比如,函數mesh(peaks) 會畫出函數peaks的網格圖,並把顏色軸caxis設為[-6.5466,8.0752],即Z的最小值和最大值。這些值之間的資料點,使用從顏色映象中經插值得到的顏色。如:

i=imread('e:\w01.tif');

imshow(i);

colorbar; 

4 .figure
figure函數用於設定映像顯示視窗,如:figure(1); /figure(2);

5.imagesc(a);   caxis([-3 8]) ; colorbar; 
尺規標度從-3,到8 顯示標度尺。

三. 映像的變換

1. fft2

fft2函數用於數位影像的二維傅立葉變換,如:

i=imread('e:\w01.tif');

j=fft2(i);

2. ifft2

ifft2函數用於數位影像的二維傅立葉反變換,如:

i=imread('e:\w01.tif');

j=fft2(i);

k=ifft2(j);

3. 利用fft2計算二維卷積

利用fft2函數可以計算二維卷積,如:

a=[8,1,6;3,5,7;4,9,2];

b=[1,1,1;1,1,1;1,1,1];

a(8,8)=0;

b(8,8)=0;

c=ifft2(fft2(a).*fft2(b));

c=c(1:5,1:5);

利用conv2(二維卷積函數)校正, 如:

a=[8,1,6;3,5,7;4,9,2];

b=[1,1,1;1,1,1;1,1,1];

c=conv2(a,b);

四. 類比雜訊產生函數和預定義濾波器

1. imnoise

imnoise函數用於對映像產生類比雜訊,如:

i=imread('e:\w01.tif');

j=imnoise(i,'gaussian',0,0.02);%類比高斯雜訊

2. fspecial

fspecial函數用於產生預定義濾波器,如:

h=fspecial('sobel');%sobel水平邊緣增強濾波器

h=fspecial('gaussian');%高斯低通濾波器

h=fspecial('laplacian');%拉普拉斯濾波器

h=fspecial('log');%高斯拉普拉斯(LoG)濾波器

h=fspecial('average');%均值濾波器

五. 映像的增強

1. 長條圖

imhist函數用於數位影像的長條圖顯示,如:

i=imread('e:\w01.tif');

imhist(i);

2. 長條圖均化

histeq函數用於數位影像的長條圖均化,如:

i=imread('e:\w01.tif');

j=histeq(i);

3. 對比調整

imadjust函數用於數位影像的對比調整,如:

i=imread('e:\w01.tif');

j=imadjust(i,[0.3,0.7],[]);

4. 對數變換

log函數用於數位影像的對數變換,如:

i=imread('e:\w01.tif');

j=double(i);

k=log(j);

5. 基於卷積的映像濾波函數

filter2函數用於映像濾波,如:

i=imread('e:\w01.tif');

h=[1,2,1;0,0,0;-1,-2,-1];

j=filter2(h,i);

6. 線性濾波

利用二維卷積conv2濾波, 如:

i=imread('e:\w01.tif');

h=[1,1,1;1,1,1;1,1,1];

h=h/9;

j=conv2(i,h);

7. 中值濾波

medfilt2函數用於映像的中值濾波,如:

i=imread('e:\w01.tif');

j=medfilt2(i);

8. 銳利化

(1)利用Sobel運算元銳利化映像, 如:

i=imread('e:\w01.tif');

h=[1,2,1;0,0,0;-1,-2,-1];%Sobel運算元

j=filter2(h,i);

(2)利用拉氏運算元銳利化映像, 如:

i=imread('e:\w01.tif');

j=double(i);

h=[0,1,0;1,-4,0;0,1,0];%拉氏運算元

k=conv2(j,h,'same');

m=j-k;

六. 舉例

二維傅立葉變換和二維傅立葉反變換:

i=imread('e:\w01.tif');

figure(1);

imshow(i);

colorbar;

j=fft2(i);

k=fftshift(j);

figure(2);

l=log(abs(k));

imshow(l,[]);

colorbar

n=ifft2(j)/255;

figure(3);

imshow(n);

colorbar;


映像的變換

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;來自: http://hi.baidu.com/lklken/blog/item/b93d6edb950c15d3b7fd48ad.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.