一、一些注意事項 (1)任何在Matlab中運作的檔案必須駐留在目前目錄或在搜尋路徑的目錄中。 (2)Matlab和MathWorks工具箱提供的檔案包含在搜尋路徑中。 (3)如果想知道哪些目錄位于搜尋路徑中,或者添加或修改所搜路徑,最簡單的方法是在桌面上從File菜單中選擇Set Path,然後使用Set Path對話框
二、matlab中的數字圖像 概念:一幅圖像被定義為一個而為函數f(x,y),其中,x和y是空間(平面)坐标,f在任何坐标點(x,y)處的振幅稱為圖像在該點的亮度。當f的分量x,y分量和振幅都是有限且離散的變量時,稱該圖像為數字圖像。 坐标表示:設對一幅圖像f(x,y)采樣後,得到了一幅有着M行N列的圖像,我們稱其大小為M x N。 大多數書中圖像原點定義在(x,y)=(0,0)處,沿圖像第一行的下一坐标值為(x,y)=(0,1);然而,工具箱中有兩處不同: (1)工具箱使用(r,c)而不是(x,y)來表示行和列; (2)坐标系統的原點在(r,c)=(0,0)處。 特别注意:IPT文檔中将工具箱中的坐标稱為像素坐标,IPT還采用一種較少使用的坐标約定,稱為空間坐标,這種坐标用x表示列,使用y來表示行。
圖像表示: 上圖中a坐标對應的圖像表示為:
上圖中b坐标對應的圖像表示為:
上述兩種表示形式中的任意一個元素都稱為像元、圖元或像素。在Matlab中,圖像将用矩陣來表示,矩陣以變量形式存儲,變量隻能以字母開頭,且隻能由字母、數字和下劃線組成。
三、在Matlab中關于圖像的基本操作 (1)讀取圖像imread,其文法為 imread('filename') 說明:filename是一個含有圖像檔案全名的字元串(包含任何可用的擴充名)
示例: >> f=imread('Fig0203(a)(chest-xray).tif');
>> imshow(f); 注:将圖像讀入矩陣f,且參數中使用‘’單引号定界字元串,指令結尾的分号在Matlab中是決定是否輸出運作該指令後的結果。
>> size(f)
該指令可以得到圖像的行數和列數
>> whos f 該指令可顯示一個數組的附加資訊。
Name Size Bytes Class Attributes
f 494x600 296400 uint8
示例:
(2)顯示圖像imshow 文法1:imshow(f,G) 其中,f是一個圖像數組,G是顯示該圖像的灰階技術,若G為預設,灰階級數為256。 文法2:imshow(f,[low high]) 會将所有小于或等于low的值都顯示為黑色,所有大于或等于high的值都顯示為白色。介于low和high之間的值将以預設的級數顯示為中等亮度值。 文法3:imshow(f,[ ]) 可以将變量low設定為數組f的最小值,将變量high設定為數組f的最大值。
(3)儲存圖像imwrite 文法:imwrite(f,'filename') 注意:filename中包含的字元串必須是一種可識别的檔案格式擴充名,如, imwrite(f,'iamge','tif') 或 imwrite(f,'image.tif') 若filename無路徑資訊,則預設儲存到目前工作目錄中,imwrite還可以有其他參數,具體取決于所選的檔案格式。 一種隻适用于JPEG圖像的函數是imwrite,其文法為, imwrite(f,'filename.jpg','quality', q) 其中,q是一個0-100之間的整數,由于JPEG壓縮,q越小,圖像的退化越嚴重。 另一種隻适用于tif圖像的文法為, imwrite(g,'filename.tif','compression','parameter',...,'resolution',[colres rowres]) 其中,parameter可以有如下的值之一: none:表示無壓縮 packbits:表示比特包壓縮(非二值圖像的預設參數) citt:citt壓縮(二值圖像的預設參數) 1 x 2矩陣[colres rowres]包含兩個參數,分别以每機關中的點數給出圖像的列分辨率和行分辨率
儲存圖像到硬碟, (1)使用圖像視窗中的File菜單中的save as即可 (2)指令行存儲,文法為: print -fno -dfileformat -rresno filename
四、資料類型
五、圖像類型
(1)亮度圖像(Intensity) (2)二值圖像(Binary images) (3)索引圖像(Indexed images) (4)RGB圖像(RGB images) 注意:其中的二值圖像是一個取值隻有0和1的邏輯數組,一個取值隻包含0和1的uint8類數組,在matlab中不認為是二值圖像。 在提到一幅圖像時,是指一幅“data_class image_type圖像”,資料類型+圖像類型
六、類型轉換 (1)資料類型之間的轉換 B = data_class(A) (2)圖像類型之間的轉換
im2uint8将輸入中所有小于0的值設定為0,而将輸入中所有大于1的值設定為255,再将所有的其他值乘以255,将得到的結果四舍五入為最接近的整數後,完成轉換。 要把一個都變了類的任意數組轉換成取值範圍為[0,1]的歸一化double類數組,可以通過mat2gray完成,其基本文法為: g = mat2gray(A,[Amin,Amax]) 其中,g的取值範圍是0~1,參數是為了在轉換時将A中小于Amin的值在g中轉換為0,将A中大于Amax的值在g中轉換為1,語句: g = mat2gray(A); 将A中實際的最小值和最大值分别賦給Amin,Amax。若輸入為double類,輸出也為double類。 函數im2double将輸入轉換為double類,若輸入是uint8類,uint6 類或logical類,則函數im2double将其轉換為範圍[0,1]間的double類,若輸入已經是double類,則該函數傳回一個與輸入相等的數組。 亮度圖像和二值圖像之間的轉換,函數im2bw的文法為, g = im2bw(f,T) 該函數通過門檻值處理,将一幅亮度圖像f轉換為一幅二值圖像g,該函數自動将輸出二值圖像聲明為一個logical數組,T的取值範圍是[0,1]内。
七、Matlab中的索引 (1)數組索引 維數為1 x N的數組稱為行向量,使用轉置符(.')可将行向量轉換為列向量,Matlab 中向量的元素使用方括号括起,并由空格或逗号隔開。 V = [1 3 5 7 9] 或 V = [1,3,5,7,9] 存取資料塊,使用冒号(:),如要存取v的前三個元素,可以使用語句 V(1:3) 使用如下語句存取第三個到最後一個元素: V(3:end) 其中,end表示向量中的最後一個元素,若V是一個向量,則V(:)産生一個列向量,而語句V(1:end)産生一個行向量;索引并不限于連續的元素,如:V(1:2:end) 函數linspace的文法為 x = linspace(a,b,n) 該語句産生一個n個元素的行向量x,這n個元素之間線性地隔開并且包含a與b。 一個向量也可以作為另一個向量的索引,如: V([1 4 5])
(2)矩陣索引 矩陣索引與數組索引類似,隻是從一維變為二維索引
八、M函數程式設計簡介 M檔案可以是簡單執行一系列Matlab語句的腳本,也可以是接收變量并産生一個或多個輸出的函數;M檔案由文本編輯器建立,并以filename.m形式的檔案名存儲,M檔案函數的組成部分為: 函數定義行 H1行 幫助文本 函數體 指令
函數定義形式為 function [outputs] = name(inputs) 函數名必須以字母開頭,後面可以跟字母、數字、下劃線的任意組合,但不允許有空格。函數名最長不能超過63個字元,超過此長度将被忽略。 H1行是第一個文本行,他是當個注釋行,其前面為函數定義行,H1行與函數定義行間無空行或前導空格,一般是對函數的高度摘要,以便于快速了解函數功能。 幫助文本是緊跟在H1行後面的文本塊,二者之間無空行,提供注釋或線上幫助。 函數體包含了所有執行計算并給出輸出變量指派的Matlab代碼。 符号'%'後面非H1行或幫助文本的所有行可看做函數注釋行。
九、運算符