430 likes | 593 Views
Matlab 教學. Speaker : 林昱志 Date : 2012/10/25. Outline. 字串與字元 結構 陣列 多質陣列 基本的繪圖指令 二維繪圖區域控制 影像處理指令. 字串與 字元. 數個字元 (characters) 可以構成一個字串 (strings) 。 一個字串是被視為一個列向量 (row vector) 進行儲存。 此一字串中的每一字元 ( 含空白字元 ) ,是以其 ASCII 碼的形式存放於此列向量中的每一個元素 (element) 。
E N D
Matlab教學 Speaker:林昱志 Date:2012/10/25
Outline • 字串與字元 • 結構陣列 • 多質陣列 • 基本的繪圖指令 • 二維繪圖區域控制 • 影像處理指令
字串與字元 • 數個字元(characters)可以構成一個字串(strings)。 • 一個字串是被視為一個列向量(row vector)進行儲存。 • 此一字串中的每一字元(含空白字元),是以其 ASCII 碼的形式存放於此列向量中的每一個元素(element)。 • >>str1 =['M' 'a' 't' 'l' 'a' 'b'] • >>str2 = Matlab
字串與字元 • 字串裡每一個字元是以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 ) char 77 97 108 97 88 str1= Matlab
字串與字元 • 在Matlab裡,可以利用二維的陣列來儲存兩個或兩個以上的字串。 season =['Spring';'Summer';'Autumn']; 字串長度不一,會出現錯誤訊息。 month=['April'; 'May'; 'Jume']; 補入空白字元,使字串長度相等。 month=['April'; 'May '; 'Jume'];
字串與字元 • 字串與數值轉換函數
結構陣列 • 陣列只能存放一群相同的資料形態,結構(structure)就沒有這個限制。 • 『結構』可以把不同的資料形態組合起來,形成一個新的資料形態,這就是『結構』的概念。 • Matlab結構的概念源自於C語言,因此其語法也和C語言的結構非常類似。 • 每一個結構陣列(structure array)可以包含很多個元素,每一個元素可以看成是一筆資料。因此每個元素可以包含數個欄位(fields),而每個欄位可包含各個不同型態的資料。
結構陣列 • 例如一個包含學生(student)個人資料的結構陣列,可能含有的欄位是name(學生姓名)、id(學號)、scores(小考成績)等。要建立此種結構,可在指令列直接輸入個欄位的值
結構陣列 • 過去必須使用不同形態的變數來儲存,但有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是小組織之意,代表這個陣列裡,每一個元素都可以是不同的型態。
多質陣列 • 在一般陣列中元素必須為數值,但在多質陣列中的每個元素可為不同的資料形態。 • 多質陣列產生方式和一般陣列的產生方式相似,只是此時是使用中括號『{ }』。
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
多質陣列 • 完整顯示多質陣列的元素,可使用以下的函式。 >> cell = {'cell array', 1234 ; [ 1 2 ; 3 4 ] , {[1 2],'str'}} cellplot(cell)
基本繪圖函數使用 • plot函數使用 x 0 2 4 6 8 ? y 3 1 7 5 2
基本繪圖函數使用 • plot函數使用 (4,7) x 0 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函數控制碼,資料點的顯示符號。
基本繪圖函數使用 • plot函數控制碼,控制線條樣式
基本繪圖函數使用 • plot函數控制碼,控制線條顏色
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
二維繪圖區域控制 • 設定圖形產生方式與建立一個新的圖形視窗 • 數圖型合併Subplot函數用法
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')
二維繪圖區域控制 • 圖形中加入註解以及文字
二維繪圖區域控制 • 加入圖形標定
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) • 是指電腦內部利用電流原理代表資料的動作。 • 通常電流在主機板上有兩種狀態,那便是電流可流過的通路與切斷電流的斷路。 • 若將它數值化,便是1(代表通路)和0(代表斷路)兩種狀態。 • 位元組(byte) • 每個位元組有8個位元。 • 在電腦中,位元組就成為電腦資料中「文字」的基本單位,每個「文字」(包括英文字母、中文字、數字、符號等)都可以用位元組表示。 1 Bit 1 Byte
Bit & Byte • 二進位轉十進位 0 1 2 3 255 計算法: 163 27 26 25 24 23 22 21 20
n-bit的整數型態 • Matlab在n-bit的整數型態
單精度Single &倍準度Double • 若數值範圍超過該資料型態則會顯示Inf。 • 兩種不同精度在作運算時,會以Single為主 • 非必要,不要將Double轉為Single ,可能會失去一些數字精度。
影像處理指令 • 基本的儲存、讀取、寫入指令 • save和load是針對MAT 檔案。 • imread和imwrite則是針對影像檔案。
影像處理指令 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(),會自動處理’溢位’,這裡指的溢位問題是色彩空間的最大值和最小值,須注意適用的場合。
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')