matlab影象處理常用命令
顯示索引影象和灰度影象
>> [X,map]=imread('trees.tif');
>> gmap=rgb2gray(map);
>> figure,imshow(X,map);
>> figure,imshow(X,gmap);
利用膨脹函式平移影象
I = imread('football.jpg');
se = translate(strel(1), [30 30]);%將一個平面結構化元素分別向下和向右移動30個位置
J = imdilate(I,se);%利用膨脹函式平移影象
subplot(121);imshow(I), title('原圖')
subplot(122), imshow(J), title('移動後的影象');
水平翻轉和上下翻轉
I = imread('cameraman.tif');
Flip1=fliplr(I); % 對矩陣I左右反轉
subplot(131);imshow(I);title('原圖');
subplot(132);imshow(Flip1);title('水平映象');
Flip2=flipud(I); % 對矩陣I垂直反轉
subplot(133);imshow(Flip2);title('豎直映象');
影象旋轉
I=imread('cameraman.tif');
B=imrotate(I,60,'bilinear','crop');
%雙線性插值法旋轉影象,並裁剪影象,使其和原影象大小一致
subplot(121),imshow(I),title('原圖');
subplot(122),imshow(B),title('旋轉影象60^{o},並剪下影象');
擷取影象
I = imread('circuit.tif');
I2 = imcrop(I,[75 68 130 112]);
imshow(I), figure, imshow(I2)
畫輪廓
>> I=imread('circuit.tif');
>> imshow(I)
>> figure
>> imcontour(I,3)
噪聲和濾波
I=imread('cameraman.tif');
J=imnoise(I,'salt & pepper',0.02);%新增椒鹽噪聲
subplot(121),imshow(J);title('噪聲影象')
K=medfilt2(J);%使用3*3的鄰域窗的中值濾波
subplot(122),imshow(K);title('中值濾波後影象')
Matlab數字數字影象處理函式彙總:
1、數字數字影象的變換
① fft2:fft2函式用於數字數字影象的二維傅立葉變換,如:i=imread('104_8.tif');
j=fft2(i);
②ifft2::ifft2函式用於數字數字影象的二維傅立葉反變換,如:
i=imread('104_8.tif');
j=fft2(i);
k=ifft2(j);
2、模擬噪聲生成函式和預定義濾波器
① imnoise:用於對數字數字影象生成模擬噪聲,如:
i=imread('104_8.tif');
j=imnoise(i,'gaussian',0,0.02);%模擬高斯噪聲
② fspecial:用於產生預定義濾波器,如:
h=fspecial('sobel');%sobel水平邊緣增強濾波器
h=fspecial('gaussian');%高斯低通濾波器
h=fspecial('laplacian');%拉普拉斯濾波器
h=fspecial('log');%高斯拉普拉斯(LoG)濾波器
h=fspecial('average');%均值濾波器
2、數字數字影象的增強
①直方圖:imhist函式用於數字數字影象的直方圖顯示,如:
i=imread('104_8.tif');
imhist(i);
②直方圖均化:histeq函式用於數字數字影象的直方圖均化,如:
i=imread('104_8.tif');
j=histeq(i);
imshow(J)
③對比度調整:imadjust函式用於數字數字影象的對比度調整,如:i=imread('104_8.tif');
j=imadjust(i,[0.3,0.7],[]);
④對數變換:log函式用於數字數字影象的對數變換,如:
i=imread('104_8.tif');
j=double(i);
k=log(j);
⑤基於卷積的數字數字影象濾波函式:filter2函式用於數字數字影象濾波,如:i=imread('104_8.tif');
h=[1,2,1;0,0,0;-1,-2,-1];
j=filter2(h,i);
⑥線性濾波:利用二維卷積conv2濾波, 如:
i=imread('104_8.tif');
h=[1,1,1;1,1,1;1,1,1];
h=h/9;
j=conv2(i,h);
⑦中值濾波:medfilt2函式用於數字數字影象的中值濾波,如:
i=imread('104_8.tif');
j=medfilt2(i);
⑧銳化
(1)利用Sobel運算元銳化數字數字影象, 如:
i=imread('104_8.tif');
h=[1,2,1;0,0,0;-1,-2,-1];%Sobel運算元
j=filter2(h,i);
(2)利用拉氏運算元銳化數字數字影象, 如:
i=imread('104_8.tif');
j=double(i);
h=[0,1,0;1,-4,0;0,1,0];%拉氏運算元
k=conv2(j,h,'same');
m=j-k;
3、數字數字影象邊緣檢測
①sobel運算元 如:
i=imread('104_8.tif');
j =edge(i,'sobel',thresh)
②prewitt運算元 如:
i=imread('104_8.tif');
j =edge(i,'prewitt',thresh)
③roberts運算元 如:
i=imread('104_8.tif');
j =edge(i,'roberts',thresh)
④log運算元 如:
i=imread('104_8.tif');
j =edge(i,'log',thresh)
⑤canny運算元 如:
i=imread('104_8.tif');
j =edge(i,'canny',thresh)
⑥Zero-Cross運算元 如:
i=imread('104_8.tif');
j =edge(i,'zerocross',thresh)
4、形態學數字數字影象處理
①膨脹:是在二值化數字數字影象中“加長”或“變粗”的操作,函式imdilate執行膨脹運算,如:
a=imread('104_7.tif');%輸入二值數字數字影象
b=[0 1 0;1 1 1;01 0];
c=imdilate(a,b);
②腐蝕:函式imerode執行腐蝕,如:
a=imread('104_7.tif');%輸入二值數字數字影象
b=strel('disk',1);
c=imerode(a,b);
③開運算:先腐蝕後膨脹稱為開運算,用imopen來實現,如:
a=imread('104_8.tif');
b=strel('square',2);
c=imopen(a,b);
④閉運算:先膨脹後腐蝕稱為閉運算,用imclose來實現,如:
a=imread('104_8.tif');
b=strel('square',2);
c=imclose(a,b);
數字數字影象增強
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],[bottomtop],gamma)
newmap=imadjust(map,[low high],[bottomtop],gamma)
說明:J=imadjust(I,[low high],[bottomtop],gamma) 其中,gamma 為校正量r,[lowhigh] 為原數字數字影象中要變換的灰度範圍,[bottom top]
指定了變換後的灰度範圍;newmap=imadjust(map,[lowhigh],[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 將僅顯示第一幀。但需注意,在使用這種方式時,數字影象
資料沒有儲存在Matlab7.0 工作平臺。如果希望將數字影象裝入工作臺中,需使用 getimage 函式,從當前的控制程式碼圖形數字影象物件中獲取數字影象資料,
命令形式為: rgb = getimage;
bwlabel
功能:
標註二進位制數字影象中已連線的部分。
L = bwlabel(BW,n)
[L,num] = bwlabel(BW,n)
isbw
功能:
判斷是否為二進位制數字影象。
語法:
flag = isbw(A)
相關命令:
isind, isgray, isrgb
74.isgray
功能:
判斷是否為灰度數字影象。
語法:
flag = isgray(A)
相關命令:
isbw, isind, isrgb
11.bwselect
功能:
在二進位制數字影象中選擇物件。
語法:
BW2 = bwselect(BW1,c,r,n)
BW2 = bwselect(BW1,n)
[BW2,idx] = bwselect(...)
舉例
BW1 = imread('text.tif');
c = [16 90 144];
r = [85 197 247];
BW2 = bwselect(BW1,c,r,4);
imshow(BW1)
figure, imshow(BW2)
47.im2bw
功能:
轉換數字影象為二進位制數字影象。
語法:
BW = im2bw(I,level)
BW = im2bw(X,map,level)
BW = im2bw(RGB,level)
舉例
load trees
BW = im2bw(X,map,0.4);
imshow(X,map)
>> [X,map]=imread('trees.tif');
>> gmap=rgb2gray(map);
>> figure,imshow(X,map);
>> figure,imshow(X,gmap);
利用膨脹函式平移影象
I = imread('football.jpg');
se = translate(strel(1), [30 30]);%將一個平面結構化元素分別向下和向右移動30個位置
J = imdilate(I,se);%利用膨脹函式平移影象
subplot(121);imshow(I), title('原圖')
subplot(122), imshow(J), title('移動後的影象');
水平翻轉和上下翻轉
I = imread('cameraman.tif');
Flip1=fliplr(I); % 對矩陣I左右反轉
subplot(131);imshow(I);title('原圖');
subplot(132);imshow(Flip1);title('水平映象');
Flip2=flipud(I); % 對矩陣I垂直反轉
subplot(133);imshow(Flip2);title('豎直映象');
影象旋轉
I=imread('cameraman.tif');
B=imrotate(I,60,'bilinear','crop');
%雙線性插值法旋轉影象,並裁剪影象,使其和原影象大小一致
subplot(121),imshow(I),title('原圖');
subplot(122),imshow(B),title('旋轉影象60^{o},並剪下影象');
擷取影象
I = imread('circuit.tif');
I2 = imcrop(I,[75 68 130 112]);
imshow(I), figure, imshow(I2)
畫輪廓
>> I=imread('circuit.tif');
>> imshow(I)
>> figure
>> imcontour(I,3)
噪聲和濾波
I=imread('cameraman.tif');
J=imnoise(I,'salt & pepper',0.02);%新增椒鹽噪聲
subplot(121),imshow(J);title('噪聲影象')
K=medfilt2(J);%使用3*3的鄰域窗的中值濾波
subplot(122),imshow(K);title('中值濾波後影象')
Matlab數字數字影象處理函式彙總:
1、數字數字影象的變換
① fft2:fft2函式用於數字數字影象的二維傅立葉變換,如:i=imread('104_8.tif');
j=fft2(i);
②ifft2::ifft2函式用於數字數字影象的二維傅立葉反變換,如:
i=imread('104_8.tif');
j=fft2(i);
k=ifft2(j);
2、模擬噪聲生成函式和預定義濾波器
① imnoise:用於對數字數字影象生成模擬噪聲,如:
i=imread('104_8.tif');
j=imnoise(i,'gaussian',0,0.02);%模擬高斯噪聲
② fspecial:用於產生預定義濾波器,如:
h=fspecial('sobel');%sobel水平邊緣增強濾波器
h=fspecial('gaussian');%高斯低通濾波器
h=fspecial('laplacian');%拉普拉斯濾波器
h=fspecial('log');%高斯拉普拉斯(LoG)濾波器
h=fspecial('average');%均值濾波器
2、數字數字影象的增強
①直方圖:imhist函式用於數字數字影象的直方圖顯示,如:
i=imread('104_8.tif');
imhist(i);
②直方圖均化:histeq函式用於數字數字影象的直方圖均化,如:
i=imread('104_8.tif');
j=histeq(i);
imshow(J)
③對比度調整:imadjust函式用於數字數字影象的對比度調整,如:i=imread('104_8.tif');
j=imadjust(i,[0.3,0.7],[]);
④對數變換:log函式用於數字數字影象的對數變換,如:
i=imread('104_8.tif');
j=double(i);
k=log(j);
⑤基於卷積的數字數字影象濾波函式:filter2函式用於數字數字影象濾波,如:i=imread('104_8.tif');
h=[1,2,1;0,0,0;-1,-2,-1];
j=filter2(h,i);
⑥線性濾波:利用二維卷積conv2濾波, 如:
i=imread('104_8.tif');
h=[1,1,1;1,1,1;1,1,1];
h=h/9;
j=conv2(i,h);
⑦中值濾波:medfilt2函式用於數字數字影象的中值濾波,如:
i=imread('104_8.tif');
j=medfilt2(i);
⑧銳化
(1)利用Sobel運算元銳化數字數字影象, 如:
i=imread('104_8.tif');
h=[1,2,1;0,0,0;-1,-2,-1];%Sobel運算元
j=filter2(h,i);
(2)利用拉氏運算元銳化數字數字影象, 如:
i=imread('104_8.tif');
j=double(i);
h=[0,1,0;1,-4,0;0,1,0];%拉氏運算元
k=conv2(j,h,'same');
m=j-k;
3、數字數字影象邊緣檢測
①sobel運算元 如:
i=imread('104_8.tif');
j =edge(i,'sobel',thresh)
②prewitt運算元 如:
i=imread('104_8.tif');
j =edge(i,'prewitt',thresh)
③roberts運算元 如:
i=imread('104_8.tif');
j =edge(i,'roberts',thresh)
④log運算元 如:
i=imread('104_8.tif');
j =edge(i,'log',thresh)
⑤canny運算元 如:
i=imread('104_8.tif');
j =edge(i,'canny',thresh)
⑥Zero-Cross運算元 如:
i=imread('104_8.tif');
j =edge(i,'zerocross',thresh)
4、形態學數字數字影象處理
①膨脹:是在二值化數字數字影象中“加長”或“變粗”的操作,函式imdilate執行膨脹運算,如:
a=imread('104_7.tif');%輸入二值數字數字影象
b=[0 1 0;1 1 1;01 0];
c=imdilate(a,b);
②腐蝕:函式imerode執行腐蝕,如:
a=imread('104_7.tif');%輸入二值數字數字影象
b=strel('disk',1);
c=imerode(a,b);
③開運算:先腐蝕後膨脹稱為開運算,用imopen來實現,如:
a=imread('104_8.tif');
b=strel('square',2);
c=imopen(a,b);
④閉運算:先膨脹後腐蝕稱為閉運算,用imclose來實現,如:
a=imread('104_8.tif');
b=strel('square',2);
c=imclose(a,b);
數字數字影象增強
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],[bottomtop],gamma)
newmap=imadjust(map,[low high],[bottomtop],gamma)
說明:J=imadjust(I,[low high],[bottomtop],gamma) 其中,gamma 為校正量r,[lowhigh] 為原數字數字影象中要變換的灰度範圍,[bottom top]
指定了變換後的灰度範圍;newmap=imadjust(map,[lowhigh],[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 將僅顯示第一幀。但需注意,在使用這種方式時,數字影象
資料沒有儲存在Matlab7.0 工作平臺。如果希望將數字影象裝入工作臺中,需使用 getimage 函式,從當前的控制程式碼圖形數字影象物件中獲取數字影象資料,
命令形式為: rgb = getimage;
bwlabel
功能:
標註二進位制數字影象中已連線的部分。
L = bwlabel(BW,n)
[L,num] = bwlabel(BW,n)
isbw
功能:
判斷是否為二進位制數字影象。
語法:
flag = isbw(A)
相關命令:
isind, isgray, isrgb
74.isgray
功能:
判斷是否為灰度數字影象。
語法:
flag = isgray(A)
相關命令:
isbw, isind, isrgb
11.bwselect
功能:
在二進位制數字影象中選擇物件。
語法:
BW2 = bwselect(BW1,c,r,n)
BW2 = bwselect(BW1,n)
[BW2,idx] = bwselect(...)
舉例
BW1 = imread('text.tif');
c = [16 90 144];
r = [85 197 247];
BW2 = bwselect(BW1,c,r,4);
imshow(BW1)
figure, imshow(BW2)
47.im2bw
功能:
轉換數字影象為二進位制數字影象。
語法:
BW = im2bw(I,level)
BW = im2bw(X,map,level)
BW = im2bw(RGB,level)
舉例
load trees
BW = im2bw(X,map,0.4);
imshow(X,map)
相關文章
- MATLAB數字影象處理(二)影象增強Matlab
- iOS 影象處理 - 影象拼接iOS
- matlab影象處理為什麼要歸一化和如…Matlab
- 影象處理之影象增強
- UIImage 影象處理UI
- Bayer影象處理
- MATLAB數字影象處理(一)基礎操作和傅立葉變換Matlab
- Python-OpenCV 處理影象(七):影象灰度化處理PythonOpenCV
- Python-OpenCV 處理影象(八):影象二值化處理PythonOpenCV
- 前端影象處理指南前端
- c#影象處理C#
- 【機器視覺與影象處理】基於MATLAB的角度計算視覺Matlab
- 數字影象處理DIP
- 柵格影象的處理
- [Python影象處理] 八.影象腐蝕與影象膨脹Python
- [Python影象處理] 六.影象縮放、影象旋轉、影象翻轉與影象平移Python
- C++影象處理 -- 影象黑白調整應用C++
- [Python影象處理] 七.影象閾值化處理及演算法對比Python演算法
- 影象中的畫素處理
- python PIL 影象處理操作Python
- 第十四章 處理影象
- GPU 加速下的影象處理GPU
- matlab影象輸入Matlab
- [Python影象處理] 一.影象處理基礎知識及OpenCV入門函式PythonOpenCV函式
- [Python影象處理] 三.獲取影象屬性、興趣ROI區域及通道處理Python
- 數字影象處理-第一節
- 影象處理庫GPUImage簡單使用GPUUI
- 數字影象處理目錄列表
- 6 款 Javascript 的影象處理庫JavaScript
- Kinect影象 骨骼點夾角處理
- 使用 canvas 對影象進行處理Canvas
- 神奇的影象處理演算法演算法
- Python-OpenCV 處理影象(三):影象畫素點操作PythonOpenCV
- MATLAB中的影象融合Matlab
- [Python影象處理] 五.影象融合、加法運算及影象型別轉換Python型別
- Python-OpenCV 處理影象(二):濾鏡和影象運算PythonOpenCV
- 影象處理的濾鏡演算法演算法
- Linux 上的科學影象處理Linux