用matlab绘制外部导入数据图像,matlab 外部数据导入方法详解(3)
● load filename X Y Z ...:將filename中的變量X、Y、Z等導入到工作區中,如果是MAT文件,在指定變量時可以使用通配符“*”。
● load filename -regexp expr1 expr2 ...:通過正則表達式指定需要導入的變量。
● load -ascii filename:無論輸入文件名是否包含有擴展名,將其以ASCII格式導入;如果指定的文件不是數字文本,則返回error。
● load -mat filename:無論輸入文件名是否包含有擴展名,將其以mat格式導入;如果指定的文件不是MAT文件,則返回error。
例13-1 將文件matlab.map中的變量導入到工作區中。
首先應用命令whos –file查看該文件中的內容:
>> whos -file matlab.mat
Name Size Bytes Class
A 2x3 48 double array
I_q 415x552x3 687240 uint8 array
ans 1x3 24 double array
num_of_cluster 1x1 8 double array
Grand total is 687250 elements using 687320 bytes
將該文件中的變量導入到工作區中:
>> load matlab.mat
該命令執行后,可以在工作區瀏覽器中看見這些變量,如圖13-1所示。
圖13-1 導入變量后的工作區視圖
接下來用戶可以訪問這些變量。
>> num_of_cluster
num_of_cluster =
3
MATLAB中,另一個導入數據的常用函數為importdata,該函數的用法如下:
● importdata('filename'),將filename中的數據導入到工作區中;
● A = importdata('filename'),將filename中的數據導入到工作區中,并保存為變量A;
● importdata('filename','delimiter'),將filename中的數據導入到工作區中,以delimiter指定的符號作為分隔符;
例13-2 從文件中導入數據。
>> imported_data = importdata('matlab.mat')
imported_data =
ans: [1.1813 1.0928 1.6534]
A: [2x3 double]
I_q: [415x552x3 uint8]
num_of_cluster: 3
與load函數不同,importdata將文件中的數據以結構體的方式導入到工作區中。
13.1.3 文件的打開
MATLAB中可以使用open命令打開各種格式的文件,MATLAB自動根據文件的擴展名選擇相應的編輯器。
需要注意的是open('filename.mat')和load('filename.mat')的不同,前者將filename.mat以結構體的方式打開在工作區中,后者將文件中的變量導入到工作區中,如果需要訪問其中的內容,需要以不同的格式進行。
例13-3 open與load的比較。
>> clear
>> A = magic(3);
>> B = rand(3);
>> save
Saving to: matlab.mat
>> clear
>> load('matlab.mat')
>> A
A =
8 1 6
3 5 7
4 9 2
>> B
B =
0.9501 0.4860 0.4565
0.2311 0.8913 0.0185
0.6068 0.7621 0.8214
>> clear
>> open('matlab.mat')
ans =
A: [3x3 double]
B: [3x3 double]
>> struc1=ans;
>> struc1.A
ans =
8 1 6
3 5 7
4 9 2
>> struc1.B
ans =
0.9501 0.4860 0.4565
0.2311 0.8913 0.0185
0.6068 0.7621 0.8214
13.2 文本文件的讀寫
在上一節中介紹的函數和命令主要用于讀寫mat文件,而在應用中,需要讀寫更多格式的文件,如文本文件、word文件、xml文件、xls文件、圖像文件和音視頻文件等。本節介紹文本文件(txt)的讀寫。其他文件的讀寫,用戶可以參考MATLAB幫助文檔。
MATLAB中實現文本文件讀寫的函數如表13-1所示。
表13-1 MATLAB中文本文件讀寫函數
函 數
功 能
csvread
讀入以逗號分隔的數據
csvwrite
將數據寫入文件,數據間以逗號分隔
dlmread
將以 ASCII 碼分隔的數值數據讀入到矩陣中
dlmwrite
將矩陣數據寫入到文件中,以 ASCII 分隔
textread
從文本文件中讀入數據,將結果分別保存
textscan
從文本文件中讀入數據,將結果保存為單元數組
下面詳細介紹這些函數。
1. csvread、csvwrite
csvread函數的調用格式如下:
● M = csvread('filename'),將文件filename中的數據讀入,并且保存為M,filename中只能包含數字,并且數字之間以逗號分隔。M是一個數組,行數與filename的行數相同,列數為filename列的最大值,對于元素不足的行,以0補充。
● M = csvread('filename', row, col),讀取文件filename中的數據,起始行為row,起始列為col,需要注意的是,此時的行列從0開始。
● M = csvread('filename', row, col, range),讀取文件filename 中的數據,起始行為 row,起始列為col,讀取的數據由數組 range 指定,range 的格式為:[R1 C1 R2 C2],其中R1、C1為讀取區域左上角的行和列,R2、C2為讀取區域右下角的行和列。
csvwrite 函數的調用格式如下:
● csvwrite('filename',M),將數組M中的數據保存為文件filename,數據間以逗號分隔。
● csvwrite('filename',M,row,col),將數組M中的指定數據保存在文件中,數據由參數 row和col指定,保存row和col右下角的數據。
● csvwrite寫入數據時每一行以換行符結束。另外,該函數不返回任何值。
這兩個函數的應用見下面的例子。
例13-4 函數csvread和csvwrite 的應用。
本例首先將MATLAB的圖標轉化為灰度圖,將數據存儲在文本文件中,再將其部分讀出,顯示為圖形。
編寫M文件,命名為immatlab.m,內容為:
% the example of functions csvread and csvwrite
I_MATLAB= imread('D:\matlab.bmp'); % read in the image
I_MATLAB= rgb2gray(I_matlab); % convert the image to gray image
figure,imshow(I_matlab,'InitialMagnification',100); % show the image
csvwrite('D:\matlab.txt',I_matlab); % write the data into a text file
sub_MATLAB= csvread('D:\matlab.txt',100,100);% read in part of the data
sub_MATLAB= uint8(sub_matlab); % convert the data to uint8
figure,imshow(sub_matlab,'InitialMagnification',100); % show the new image
在命令窗口中運行該腳本,輸出圖形如圖13-2所示。
(a) (b)
圖13-2 例13-3 的運行結果
該例中涉及到了少量的圖像處理內容,超出本書的范圍,感興趣的讀者可以查閱 MATLAB幫助文檔中關于Image Processing Toolbox的介紹。
2. dlmread、dlmwrite(個人覺得這個比較好用)
dlmread函數用于從文檔中讀入數據,其功能強于csvread。dlmread的調用格式如下:
● M = dlmread('filename')
● M = dlmread('filename', delimiter)
● M = dlmread('filename', delimiter, R, C)
● M = dlmread('filename', delimiter, range)
其中參數delimiter用于指定文件中的分隔符,其他參數的意義與csvread函數中參數的意義相同,這里不再贅述。dlmread函數與csvread函數的差別在于,dlmread函數在讀入數據時可以指定分隔符,不指定時默認分隔符為逗號。
dlmwrite函數用于向文檔中寫入數據,其功能強于csvwrite函數。dlmwrite函數的調用格式為:
● dlmwrite('filename', M),將矩陣M的數據寫入文件filename中,以逗號分隔。
● dlmwrite('filename', M, 'D'),將矩陣M的數據寫入文件filename中,采用指定的分隔符分隔數據,如果需要tab鍵,可以用“\t”指定。
● dlmwrite('filename', M, 'D', R, C),指定寫入數據的起始位置。
● dlmwrite('filename', M, attribute1, value1, attribute2, value2, ...),指定任意數目的參數,可以指定的參數見下表。
● dlmwrite('filename', M, '-append'),如果filename指定的文件存在,在文件后面寫入數據,不指定時則覆蓋原文件。
● dlmwrite('filename', M, '-append', attribute-value list),敘寫文件,并指定參數。
● dlmwrite 函數的可用參數如表13-2所示。
表13-2 dlmwrite函數的可用參數
參 數 名
功 能
delimiter
用于指定分隔符
newline
用于指定換行符,可以選擇“pc”或者“unix”
roffset
行偏差,指定文件第一行的位置,roffset 的基數為 0
coffset
列偏差,指定文件第一列的位置,coffset 的基數為 0
precision
指定精確度,可以指定精確維數,或者采用 c 語言的格式,如“%10.5f”
3. textread,textscan
當文件的格式已知時,可以利用textread函數和textscan函數讀入。這里只介紹這兩個函數應用的實例。
例13-5 通過%讀入文件,按照原有格式讀取。
文件的內容為:
Sally Level1 12.34 45 Yes
在命令窗口中輸入:
>> [names, types, x, y, answer] = textread('D:\mat.txt','%s %s %f %d %s', 1)
得到結果為:
names =
'Sally'
types =
'Level1'
x =
12.3400
總結
以上是生活随笔為你收集整理的用matlab绘制外部导入数据图像,matlab 外部数据导入方法详解(3)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信用卡逾期一次影响房贷吗 非恶意逾期不要
- 下一篇: 广发南航明珠信用卡额度多少 精彩权益谁都