MATLAB Function Reference |
Syntax
A = imread(filename,fmt
) [X,map] = imread(filename,fmt
) [...] = imread(filename) [...] = imread(...,idx) (CUR, ICO, and TIFF only) [...] = imread(...,ref) (HDF only) [...] = imread(...,'BackgroundColor',BG) (PNG only) [A,map,alpha] = imread(...) (PNG only)
Description
A = imread(filename,
fmt
)
將檔名為 filename
之灰階或全彩的圖檔讀進變數 A
中。若檔案包含灰階層次(grayscale intensity)的影像,則變數 A
為一個二維陣列。若檔案包含的是全彩(RGB)的影像,變數 A
則為三維(m
-by-n
-by-3)陣列。
[X,map] = imread(filename,
fmt
)
將檔案 filename
中的索引式(indexed)影像存入 X
,而相關對應的色盤(colormap)則存入 map
中。色盤的值等比例放大或縮小至 [0,1] 的範圍。X
和 map
皆為二維陣列。
[...] = imread(filename)
將會從檔案的內容來推論其檔案的格式。
filename
是一個表示圖檔檔名的字串,而 fmt
則是表示檔案格式的字串。若檔案不是存放在現行工作的目錄或是 MATLAB 的路徑,則 filename
的內容是完整的系統路徑。如果 imread
找不到檔名為 filename
的檔案,它將會去找檔名為 filename.fmt
的圖檔。但若沒有對字串 fmt
下定義,則工具盒將會從檔案的標頭檔來識別檔案的格式。
TIFF-Specific Syntax
[...] = imread(...,idx)
從複合式影像 TIFF 檔案中讀取一張影像。idx
代表在檔案中影像出現的順序。舉例來說,若 idx
為 3,則 imread
將會讀取檔案中的第三張影像。如果省略不寫,imread
將讀取檔案中的第一張影像。
PNG-Specific Syntax
在這一段主要是探討有透明像素的 PNG 檔案。當透明像素存在時,將會被視為下列兩者之一:transparency chunk 或是 alpha channel。(PNG 檔案不能同時擁有兩者)
由 transparency chunk 定義每個被視為透明的像素,若一 8 位元的影像其在 transparency chunk 中的值為 0.5020,則所有影像中顏色值為 0.5020 的像素都會顯示透明。alpha channel 為一個存放影像中相同數值像素的陣列,其代表在影像中對應像素的透明度(透明或不透明)。
另一個關於透明度的 PNG 元件則是 background color chunk,它所定義的顏色值可用於所有的透明像素。這一段落主要探討工具盒讀 PNG 影像時會用到的 transparency chunk 或 alpha channel。
Case 1. 不輸出 alpha channel,也沒有指明所要使用的背景顏色。例如:
[A,map] = imread(filename); A = imread(filename);
若 PNG 檔案包含 background color chunk,則透明像素將會和指定的背景顏色結合。
若 PNG 檔案沒有 background color chunk,當影像為灰階時,透明像素將和 0
結合(黑色);當影像為索引式影像時,將和 1
結合(色盤中的第一個顏色);當為全彩影像時,則和 [0 0 0]
結合(黑色)。
Case 2. 不輸出 alpha channel,但有指明所要使用的背景顏色。例如:
[...] = imread(...,'BackgroundColor',bg);
透明像素將和所指定的顏色結合。bg
依不同的檔案類型(灰階、索引式或全彩)而有不同的值。若輸入影像為索引式影像,bg
則為範圍在 [1,P]
之間的整數。P
表示色盤的長度。若輸入影像為灰階層,則 bg
為範圍在 [0,1] 之間的數。若為全彩影像,bg
則是一含有三元素的向量,其元素值分佈於 [0,1] 之間。
依工具盒的方法使用背景顏色有個例外。若你把背景設為 'none'
,則將不會有任何結合的效果。例如:
[...] = imread(...,'Back','none');
Case 3. 把 alpha channel 當成一輸出變數。舉例來說,
[A,map,alpha] = imread(filename); [A,map,alpha] = imread(filename,fmt);
alpha channel 將會從影像中被分散地放置(並不像 cases 1 及 2 會被合併成一影像)。若有 alpha channel,則 imread
回傳 aplha channel 、影像及所對應的色盤。若沒有 alpha channel,alpha
則為 []
。若無色盤或是灰階、全彩的影像,則變數 map 也將是空字串。
HDF-Specific Syntax
[...] = imread(...,ref)
依據關聯(reference)的號碼 ref
來讀取複合式 HDF 檔案中的影像。舉例來說,若 ref
的值為 12,imread
將會讀取其關聯號碼(reference number)為 12 的影像。(在 HDF 檔案中的關聯號碼不一定就是影像在檔案中的順序)若省略這個係數,則 imread
將會讀取檔案中的第一張影像。
CUR- and ICO-Specific Syntax
[...] = imread(...,idx)
從複合式圖示(icon)或游標(cursor)檔讀取影像。idx
表示欲讀取影像在檔案中的順序。舉例來說,若 idx
為 3,表示將讀取檔案中的第三張影像。若省略這一項,imread
將讀取檔案中的第一張影像。
[A,map,alpha] = imread(...)
回傳一交集 (AND)遮罩,可用來決定透明度的相關資訊。對游標(cursor)檔案而言,遮罩可只含有用的資料。
註釋
Microsoft Windows 游標(cursors)為 32-by-32 像素。MATLAB 指標為 16-by-16 像素。因此必須放大或縮小影像。若有案裝影像製程工具盒 (Image Processing Toolbox),則可使用 imresize 函式。
|
Format Support
Class Support
imread
支援大多數的影像格式。當讀取一個檔案時,輸出 (A
或 X
) 的資料型態屬於 uint8
。imread
也支援每像素 16 位元的 TIFF 及 PNG 檔案;像這類的影像檔,輸出的 (A
or X
) 資料型態為 uint16
。至於索引式影像,即使影像陣列本身屬於 uint8
或 uint16
,imread
仍然會將色盤讀進 double
的陣列中。
Remarks
Examples
[X,map] = imread('flowers.tif',6);
info = imfinfo('skull.hdf'); [X,map] = imread('skull.hdf',info(4).Reference);
讀取一 24 位元的 PNG 影像,並把所有的透明(alpha channel)像素設定為紅色。
bg = [255 0 0]; A = imread('image.png','BackgroundColor',bg);
[A,map,alpha] = imread('image.png');
把透明遮罩(transparency mask)用於 ICO 影像,並顯示出來。
[a,b,c] = imread('myicon.ico'); % Augment colormap for background color (white). b2 = [b; 1 1 1]; % Create new image for display. d = ones(size(a)) * (length(b2) - 1); % Use the AND mask to mix the background and % foreground data on the new image d(c == 0) = a(c == 0); % Display new image imshow(uint8(d), b2)
See Also
double
, fread
, imfinfo
, imwrite
, uint8
, uint16
importdata | imwrite |