Matlab投影片2

Download Report

Transcript Matlab投影片2

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