在 MATLAB 第 4 版時,影像資料都是儲存在雙倍精準(Double-precision)的矩陣中,因此每一個元素用掉了 8 bytes(64 bits),造成許多不必要的空間浪費。在 MATLAB 第 5 版之後,提供了 uint8 的資料型態,因此可以將儲存空間降為原先的八分之一。(uint8 代表 8-bit unsigned integer,即是 8 位元、不帶符號的整數值。)
由於 uint8 只有 8 個位元,所以能表示的數值範圍為 0 至 255(=28-1) 之間的整數,但這對一般索引影像之資料已經足夠了。
由於 8-bit 影像資料的最小值為 0,和一般的雙精準索引影像資料相差 1,因此在兩種資料相互轉換時,要特別小心。例如:
在上例中,X 是雙精準的索引影像,需將之減 1 後,才能轉換成 unit8 的格式。(image 可以接受兩種資料格式,來正確地顯示影像。)欲比較影像所佔空間大小,可輸入如下:
>> whos X Z8 Name Size Bytes Class X 200x320 512000 double array Z8 200x320 64000 uint8 array Grand total is 128000 elements using 576000 bytes 由上例可知,Z8 所佔用的空間只有 X 的八分之一。若要將 8-bit 影像轉回雙精準影像,可輸入如下:
>> Z64 = double(Z8)+1; uint8 資料型態亦可用於全彩影像資料,此時每一像素的原色(R,G 或 B)範圍為 0 至 255 間的整數,而不再是 0 至 1 的實數。image 指令可以完全接受 uint8 的全彩影像資料。
欲將雙精準的全彩影像轉作 uint8 資料型態,可輸入如下:
>> RGB8 = uint8(round(RGB64*255)); 其中 RGB64 為雙精準的全彩影像資料,而 RGB8 則是 unit8 的 8-bit 影像資料。反之,若欲進行反轉換,可輸入如下:
>> RGB64 = double(RGB8)/255; 有關於影像類別及其資料型態的關係,可見下表:
影像類別 資料型態 double uint8 索引影像 (Indexed Images) 影像矩陣大小:m×n
色盤矩陣大小:k×3, k$\leq$256
色盤資料範圍:介於 [0, 1] 的實數
影像顯示指令:image影像資料範圍:介於 [1, k] 的整數 影像資料範圍:介於 [0, k-1] 的整數 強度影像 (Intensity Images) 影像矩陣大小:m×n
色盤矩陣大小:k×3, k$\leq$256(色盤通常是灰階)
色盤資料範圍:介於 [0, 1] 的實數
影像顯示指令:imagesc影像資料範圍:任意實數(但通常是[0,1]) 影像資料範圍:介於 [0, 255] 的整數 全彩影像 (Truecolor Images) 影像矩陣大小:m×n×3
影像顯示指令:image影像資料範圍:介於 [0,1] 的實數 影像資料範圍:介於 [0, 255] 的整數
MATLAB程式設計:入門篇