Matlab教學 Speaker:林昱志 Date:2012/10/25
Outline 字串與字元 結構陣列 多質陣列 基本的繪圖指令 二維繪圖區域控制 影像處理指令
字串與字元 數個字元(characters)可以構成一個字串(strings)。 一個字串是被視為一個列向量(row vector)進行儲存。 此一字串中的每一字元(含空白字元),是以其 ASCII 碼的形式存放於此列向量中的每一個元素(element)。 >> str1 = ['M' 'a' 't' 'l' 'a' 'b'] >> str2 = Matlab
字串裡每一個字元是以ASCII碼的型式來存放,只是在顯示是以字元的方式來顯示。 字串與字元 字串裡每一個字元是以ASCII碼的型式來存放,只是在顯示是以字元的方式來顯示。 如果要顯示字串每一個字元的ASCII碼,可用double函數。 >> ascii = double(str1) double ASCII碼 77 97 116 108 97 88 str1 = [‘M’ ‘a’ ‘t’ ‘l’ ‘a’ ‘b’]
ASCII碼轉換成字串,可用char函數。 >> char(ascii ) 字串與字元 ASCII碼轉換成字串,可用char函數。 >> char(ascii ) char 77 97 108 97 88 str1 = Matlab
在Matlab裡,可以利用二維的陣列來儲存兩個或兩個以上的字串。 字串與字元 在Matlab裡,可以利用二維的陣列來儲存兩個或兩個以上的字串。 season =['Spring'; 'Summer'; 'Autumn']; 字串長度不一,會出現錯誤訊息。 month=['April' ; 'May' ; 'Jume']; 補入空白字元,使字串長度相等。 month=['April' ; 'May ' ; 'Jume ' ];
字串與字元 字串與數值轉換函數 指令與函數 說明 int2str(x) 先將x四捨五入轉換成整數,再將它轉成字串。 num2str(x) num2str(x, n) 將x轉換成字串,並以n位數來表示。 mat2str(x) 將陣列x轉換成Matlab的表示方式,但以字串來顯示。 str2num(str) 將字串str以eval函式求值,如果不能轉換,則回應空陣列。 str2double(str) 將字串str轉換成數值,如果不能轉換,則回應NaN。
結構陣列 陣列只能存放一群相同的資料形態,結構(structure)就沒有這個限制。 『結構』可以把不同的資料形態組合起來,形成一個新的資料形態,這就是『結構』的概念。 Matlab結構的概念源自於C語言,因此其語法也和C語言的結構非常類似。 每一個結構陣列(structure array)可以包含很多個元素,每一個元素可以看成是一筆資料。因此每個元素可以包含數個欄位(fields),而每個欄位可包含各個不同型態的資料。
結構陣列 例如一個包含學生(student)個人資料的結構陣列,可能含有的欄位是name(學生姓名)、id(學號)、scores(小考成績)等。要建立此種結構,可在指令列直接輸入個欄位的值 結構 欄位 student name 橘子 id R95631020 scores 國文 英文 數學
過去必須使用不同形態的變數來儲存,但有Matlab所提供的變數可以將有關連性,形態不同的資料放在同一個變數裡。 結構陣列 過去必須使用不同形態的變數來儲存,但有Matlab所提供的變數可以將有關連性,形態不同的資料放在同一個變數裡。 結構可分為兩大部分,即『結構名稱』與『欄位名稱』。 不論是設定或是取用結構的欄位,只要依循: 結構名稱﹒欄位名稱
Example >> student.name='THU'; >> student.id='R95631020'; >> student.scores=[80 50 60]; >> student =struct('name', '柚子', 'id', 'R95631024', 'scores',[80 50 60]);
多質陣列 多質陣列與結構陣列的概念相近,但其比結構陣列更具有彈性。 多質陣列的英文為cell array,cell是小組織之意,代表這個陣列裡,每一個元素都可以是不同的型態。
多質陣列 在一般陣列中元素必須為數值,但在多質陣列中的每個元素可為不同的資料形態。 多質陣列產生方式和一般陣列的產生方式相似,只是此時是使用中括號『{ }』。
>> cell = {'cell array' , 1234 ; [ 1 2 ; 3 4 ] , {[1 2], 'str'}} Example >> cell = {'cell array' , 1234 ; [ 1 2 ; 3 4 ] , {[1 2], 'str'}} ‘cell array’ 1234 cell = 1 3 ‘str’ 1 2 2 4
元素取出之方式,以及其索引和一般陣列相似。 多質陣列 元素取出之方式,以及其索引和一般陣列相似。 1 3 cell {2,1}= ‘cell array’ 1234 2 4 2 cell = cell {2,1}(2,1)= 1 3 ‘str’ 1 2 2 4 1 cell {2,1}{1,1}(1,1)=
利用多質陣列索引法(cell indexing)來建立多質陣列。 此方法為依元素所在之陣列位置來建立元素,且每一個元素是以大括號刮起來。 ‘cell array’ 1234 >> cell(1,1)={'cell array'} ; >> cell(1,2)={ 1234 }; >> cell(1,3)={ [1 2 ; 3 4]}; 1 3 2 4
另一種設定多質陣列的方法為內容索引法(content indexing)。 此方法和先前提到的多質索引法相似,只是這種方法是把矩陣的索引值的括號改為大括號。 ‘cell array’ 1234 >> cell {1,1}='cell array'; >> cell {1,2}=1234; >> cell {1,3}=[1 2 ; 3 4] 1 3 2 4
完整顯示多質陣列的元素,可使用以下的函式。 指令與函數 說明 celldisp(A) 或 A(:) 顯示出多質陣列A的詳細內容。 cellplot(A) 以圖的方式顯示多質陣列A的配置方式。 >> cell = {'cell array', 1234 ; [ 1 2 ; 3 4 ] , {[1 2], 'str'}} cellplot(cell)
? 基本繪圖函數使用 plot函數使用 函數 說明 plot(x,y) 以x為資料點的向量組成橫坐標;以y為資料點的向量組成縱坐標。 以x向量之索引組成橫坐標;以x為資料點的向量組成縱坐標。 x 2 4 6 8 ? y 3 1 7 5 2
基本繪圖函數使用 plot函數使用 函數 說明 plot(x,y) 以x為資料點的向量組成橫坐標;以y為資料點的向量組成縱坐標。 以x向量之索引組成橫坐標;以x為資料點的向量組成縱坐標。 (4,7) x 2 4 6 8 Plot(x,y) (8,2) (0,3) y 3 1 7 5 2 (6,5) (2,1)
基本繪圖函數使用 二維重複繪圖 畫出多條曲線時,會自動輪換曲線顏色。 同常是藍、綠、紅、···。 >> x = 0:0.1:6 ; >> plot(x,cos(x),x,sin(x),x,cos(x)+sin(x));
基本繪圖函數使用 修飾plot函數所繪出之圖形 函數 說明 plot(x , y , 'str') 以字串str所指定的格式繪出二維圖形。 plot(x2 , y2 , 'str1' , x2 , y2 , 'str2' ,…) 以字串str1所指定的格式繪出(x1,y1)圖形,以字串str2所指定的格式繪出(x2,y2)圖形,以此類推。 plot(x , y , 'str' , 'p_str', property , …) 根據繪圖性質p_str來繪圖,其中p_str可為: LineWidth-設定線條寬度。 MarkerFaceColor-設定標記顏色。 MarkerEdgeColor-設定標記的邊框顏色。 MarkerSize-設定標記大小。
基本繪圖函數使用 plot函數控制碼,資料點的顯示符號。 符號 說明 . 繪點。 * 繪出星號 o 繪出小圓 + 繪出加號 x 繪出打叉符號 s或square 繪出正方形 d或diamond 繪出菱形 p或pentagram 繪出五角形 h或hexagram 繪出六角形 none 部會出任何圖形
基本繪圖函數使用 plot函數控制碼,控制線條樣式 線條樣式 說明 -(減號) 實線(預設) 。 -- 虛線。 -. 虛線和點連成之線段。 : 由點連成之線段。 none 不繪出線段。
基本繪圖函數使用 plot函數控制碼,控制線條顏色 線條顏色 說明 g 綠色(green) m 紫色(magmata) b 藍色(blue) (預設) c 青色(cyan) w 白色(white) r 紅色(red) k 黑色(black) y 黃色(yellow)
Example >> x1=1:0.5:6; >> y1=cos(x1); >> x2=1:0.5:6; >> y2=sin(x2); >> plot(x1 , y1 , '*' , x2 , y2 , 'd') >> plot(x1 , y1 , '*--' , x2 , y2 , 'd:') >> plot(x1 , y1 , ' *--m ' , x2 , y2 , 'd:b') >> plot(x1 , y1,'h--m','MarkerFaceColor','c','MarkerSize',14)
二維繪圖區域控制 設定是否顯示圖形格線與外框 >> grid on >> box off 函數 說明 grid 設定是否顯示格線,設定on為顯示,設定off為不顯示。 box 設定是否顯示圖形外框,設定on為顯示,設定off為不顯示。
二維繪圖區域控制 設定圖形產生方式與建立一個新的圖形視窗 數圖型合併Subplot函數用法 指令 說明 函數 說明 hold 設定hold on時,則產生的圖形繪疊加在原有的圖形上,若設定off,則原有的圖形會被新的圖形覆蓋掉(預設)。 figure 建立一個新的繪圖視窗,視窗的標題為Matlab自動設定。 figure(n) 建立一個新的視窗,視窗的標題為Figure n。若Figure n為 函數 說明 subplot(m,n,p) 把繪圖視窗分為m×n區域,並在第p個位置建立子繪圖區域,位置p的計算方式是由左而右,由上而下來排列。
Example >> x1=1:0.5:6; >> y1=cos(x1); >> x2=1:0.5:6; >> y2=sin(x2); >> subplot(2,2,1) >> plot(x1,y1,'-ro') >> subplot(2,2,2) >> plot(x2,y2,'-ro')
二維繪圖區域控制 圖形中加入註解以及文字 函數 說明 title(‘text‘) 設定圖形之標題文字為text。 xlabel(‘text‘) 設定x軸的解說文字為text。 ylabel(‘text‘) 設定y軸的解說文字為text。 zlabel(‘text‘) 設定z軸的解說文字為text。
二維繪圖區域控制 加入圖形標定 函數 說明 legend(str1,str2,…) 設定圖例標定字串。 legend(str1,str2,…,pos) 設定圖例標定位置,1是將圖例放在右上角,2是將圖例放在左上角,3是將圖例放在左下角,4是將圖例放在右下角。 legend off 清除標記。 text(x,y,’text‘) 在圖形中位置(x,y)之處加入註解文字。
Example >> plot(x1 , y1 , ' *--m ' , x2 , y2 , 'd:b') >> xlabel('x') >> ylabel('y') >> title(‘2012/10/25 Example') >> legend('cos(x)','sin(x)')
Bit & Byte 位元(bit) 位元組(byte) 是指電腦內部利用電流原理代表資料的動作。 通常電流在主機板上有兩種狀態,那便是電流可流過的通路與切斷電流的斷路。 若將它數值化,便是1(代表通路)和0(代表斷路)兩種狀態。 位元組(byte) 每個位元組有8個位元。 在電腦中,位元組就成為電腦資料中「文字」的基本單位,每個「文字」(包括英文字母、中文字、數字、符號等)都可以用位元組表示。 1 Bit 1 Byte
Bit & Byte 二進位轉十進位 1 2 3 255 計算法: 163 27 26 25 24 23 22 21 20
n-bit的整數型態 Matlab在n-bit的整數型態 資料型態 說明 位元組 最大值 最小值 int8 8-bit整數 1 127 -128 uint8 8-bit無號整數 255 int16 16-bit整數 2 32767 -32768 uint16 16-bit無號整數 65535 int32 32-bit整數 4 2147483647 -2147483648 uint32 32-bit無號整數 4294967295 int64 64-bit整數 8 9223372036854775807 -9223372036854775808 uint64 64-bit無號整數 18446744073709551615
若數值範圍超過該資料型態則會顯示Inf。 兩種不同精度在作運算時,會以Single為主 單精度Single &倍準度Double 若數值範圍超過該資料型態則會顯示Inf。 兩種不同精度在作運算時,會以Single為主 非必要,不要將Double轉為Single ,可能會失去一些數字精度。 資料型態 說明 位元組 最大值 最小值 single 單精度 4 3.4028×1038 1.1755×10-38 double 倍精度 8 1.7977×10308 2.2251×10-308
imread和imwrite則是針對影像檔案。 影像處理指令 基本的儲存、讀取、寫入指令 save和load是針對MAT 檔案。 imread和imwrite則是針對影像檔案。 函數 說明 save(file,variable) 將workspace裡的變數存成mat檔案 load(file) 讀取.mat檔案 imwrite(variable,file) 寫入影像檔 imread(file) 讀取影像檔 imfinfo(file) 顯示影像檔案的資訊
影像處理指令 prime_list=primes(1000); mag=magic(3); save(‘my_data’, ‘prime_list’, ‘mag’); 將變數存取為my_data clear load(‘my_data’) 載入my_data裡所有的變數 var=load(‘my_data’) 載入my_data裡所有變數並指定給結構陣列之 變數var clear load(‘my_data’, ‘mag’); 載入my_data裡所有指定的變數 m=load(‘my_data’, ‘mag’); 載入my_data裡所指定的變數,並指定 給結構陣列之變數m
Example >> Lena = Imread('Lena.tiff'); >> imfinfo(Lena) >> imshow(Lena) >> imtool(Lena) 兩種常用的影像檢視工具,imshow介面是一般通用,imtool則是專門為影像設計,由影像處理工具箱提供。
Example >> Lena = imread('Lena.tiff'); >> imshow(Lena); >> A = Lena(:,:,1); >> B = Lena(:,:,2); >> C = Lena(:,:,3); >> figure; imshow(A); >> figure; imshow(B); >> figure; imshow(C);
影像運算處理 數值轉換函式 所有的基本資料類別名稱就是一個轉換函數,不過要注意轉換時溢位的問題。 注意影像的資料型態轉換imxxx(),會自動處理’溢位’,這裡指的溢位問題是色彩空間的最大值和最小值,須注意適用的場合。 函數 說明 im2uint8 將圖像轉換成8位無符號整數 im2double 將圖像轉換為雙精度 mat2gray 轉換矩陣為灰階圖像 rgb2gray 轉換RGB影像為灰階圖像 ind2gray 轉換索引影像為灰階圖像
Example >> Dena = double(Lena); >> Lena = im2double(Lena); >> Gena = rgb2gray(Lena); >> Baboon = im2double(imread('Baboon.tiff')); >> Jet = im2double(imread('Jet.tiff')); >> imtool (0.5*Jet + Baboon, [])
影像運算處理 讀取摻雜文字與數據資料的檔案 利用textread讀取.txt的檔案。 >> textread('b01.txt' , '%s')