數字圖像的分類,會涉及到一些主要的圖像類型,本文就來介紹這些主要的圖像類型在MATLAB中是如何存儲和表示的,主要包括亮度圖像、RGB圖像、索引圖像、二值圖像和多幀圖像。
1.亮度圖像(Intensity Image)
亮度圖像即灰度圖像。MATLAB使用二維矩陣存儲亮度圖像,矩陣中的每個元素直接表示一個像素的亮度(灰度)信息。例如,一個200×300像素的圖像被存儲為一個200行300列的矩陣,可以使用小節介紹的選取矩陣元素(或子塊)的方式來選擇圖像中的一個像素或一個區域。
如果矩陣元素的類型是雙精度的,則元素的取值範圍是從0到1;如果是8位無符號整數,則取值範圍從0到255。數據0表示黑色,而1(或255)表示最大亮度(通常為白色)。
圖1所示是一個使用雙精度矩陣存儲亮度圖像的例子。
圖1 MATLAB中亮度圖像的表示方法
2.RGB圖像(RGB Image)
RGB圖像使用3個一組的數據表達每個像素的顏色,即其中的紅色、綠色和藍色分量。在MATLAB中,RGB圖像被存儲在一個m×n×3的三維數組中。對於圖像中的每個像素,存儲的3個顏色分量合成像素的最終顏色。例如,RGB圖像I中位置在11行40列的像素的RGB值為I(11,40,1:3)或I(11,40,:),該像素的紅色分量為I(11,40,1),藍色分量為I(11,40,3)。而I(:,:,1)則表示整個的紅色分量圖像。
RGB圖像同樣可以由雙精度數組或8位無符號整數數組存儲。圖2所示是一個使用雙精度數組存儲RGB圖像的例子。
圖2 MATLAB中RGB圖像的表示方式
3.索引圖像(Indexed Image)
索引圖像往往包含兩個數組,一個圖像數據矩陣(Image Matrix)和一個顏色索引表(Colormap)。對應於圖像中的每一個像素,圖像數據數組都包含一個指向顏色索引表的索引值。
顏色索引表是一個m×3的雙精度型矩陣,每一行指定一種顏色的3個RGB分量,即color = [R G B]。其中R、G、B是實數類型的雙精度數,取值0~1。0表示全黑,1表示最大亮度。圖1.10給出一個索引圖像的實例,注意圖像中的每個像素都用整數表示,其含義為顏色索引表中對應顏色的索引。
圖像數據矩陣和顏色索引表的關係取決於圖像數據矩陣中存儲的數據類型是雙精度類型還是8位無符號整數。
如果圖像數據使用雙精度類型存儲,像素數據1表示顏色索引表中的第一行,像素數據2表示顏色索引表中的第二行,依此類推。而如果圖像數據使用8位無符號整數存儲,則存在一個額外的偏移量-1,像素數據0表示顏色索引表中的第一行,而1表示索引表中的第二行,以此類推。
8位方式存儲的圖像可以支持256種顏色(或256級灰度)。圖3中,數據矩陣使用的是雙精度類型,所以沒有偏移量,數據5表示顏色表中的第5種顏色。
圖3 MATLAB中索引圖像的表示方法
4.二值圖像(Binary Image)
在二值圖像中,像素的顏色只有兩種可能取值:黑或白。MATLAB將二值圖像存儲為一個二維矩陣,每個元素的取值只有0和1兩種情況,0表示黑色,而1表示白色。
二值圖像可以被看作是一種特殊的只存在黑和白兩種顏色的亮度圖像,當然,也可以將二值圖像看作是顏色索引表中只存在兩種顏色(黑和白)的索引圖像。
MATLAB中使用uint8型的邏輯數組存儲二值圖像,通過一個邏輯標誌表示數據有效範圍是0到1,而如果邏輯標誌未被置位,則有效範圍為0到255。
二值圖像的表示方法如圖4所示。
5.多幀圖像(Multiframe Image Array)
對於某些應用,可能要處理多幅按時間或視角方式連續排列的圖像,稱之為多幀圖像(所謂“幀”就是影像動畫中最小單位的單幅影像畫面)。例如核磁共振成像數據或視頻片斷。Matlab提供了在同一個矩陣中存儲多幀圖像的方法,實際上就是在圖像矩陣中增加一個維度來代表時間或視角信息。例如,一個擁有5張連續的400×300像素的RGB圖像的多幀連續片斷的存儲方式是一個400×300×3×5的矩陣,一組同樣大小的灰度圖像則可以使用一個400×300×1×5的矩陣來存儲。
如果多幀圖像使用索引圖像的方式存儲,只有圖像數據矩陣被按多幀形式存儲,而顏色索引表只能公用。因此,在多幀索引圖像中,所有的索引圖像公用一個顏色索引表,進而只能使用相同的顏色組合。
圖4MATLAB中二值圖像的表示方法
◆ cat函數
cat函數可以在指定維度上連接數組,其調用方式如下。
CAT(DIM, A, B);
或
CAT(DIM, A1, A2, …);
此函數在第DIM維度將第2至第n個參數提供的數組連接起來。於是,若要構造一個由5幅RGB圖像構成的多幀圖像組,使用的命令如下。
ANIM=CAT(4, A1, A2, A3, A4, A5);
◆ 選擇存儲方式時的限制
圖像處理工具箱中的某些函數只能處理圖像矩陣中的前2維或前3維信息。當然,也可以使用它們處理擁有4個維度或5個維度的RGB圖像或者連續圖像序列,但這需要單獨處理每幀符合要求的亮度/二值/索引/RGB圖像。例如,顯示ANIM中的第3幀圖像需要使用如下方式。
imshow(ANIM(:,:,:,3));
函數imshow的作用是顯示一幀圖像。
注意
如果向一個函數傳遞了超過其所能夠處理的維度的圖像矩陣,那麼結果可能是不確定的。某些函數的行為可能是處理圖像的第一幀或第一個顏色維度,但某些函數可能帶來不確定的行為和處理結果。
默認情況下,MATLAB將絕大多數數據存儲為雙精度類型(64位浮點數)以保證運算的精確性。而對於圖像而言,這種數據類型在圖像尺寸較大時可能並不理想。例如,一張1000像素見方的圖像擁有100萬個像素,如果每個像素用64位二進制數表示,總共需要大約8MB的內存空間。
為了減小圖像信息的空間開銷,可以將圖像信息存為8位無符號整型數(uint8)或16位無符號整型數(uint16)的數組,這樣只需要雙精度浮點數1/8或1/4的空間。在上述3種存儲類型中以雙精度和uint8使用最多,uint16的情況與uint8大致類似。
本文節選自《數字圖像處理與機器視覺——Visual C++與Matlab實現(第2版)》

內容簡介
圖像處理與機器視覺是當今計算機科學中的一個熱門研究方向,應用廣泛,發展前景樂觀。近年來,伴隨着人工智能、模式識別學科以及人機智能接口技術的飛速發展,機器視覺的研究正在不斷升溫——從日常生活中與人類息息相關的光學字符識別(OCR)和汽車自動駕駛,到醫學應用中的病灶檢測與分析,再到未來人機智能交互領域中的人臉識別、情感計算等,圖像處理作為機器視覺研究中必不可少的圖像預處理環節是讀者需要掌握的首要技術。
和圖像相關的東西往往容易引起計算機初學者的興趣,筆者在讀本科的時候就覺得能讓計算機理解所“看”到的東西是一件非常神秘和令人興奮的事情;但同時它的理論性較強,門檻較高,在各個高校中,這門課程大多也是作為計算機專業研究生的選修課程。要理解該領域的知識,讀者需要具有一定的數學基礎,除此之外還涉及信號處理、統計分析、模式識別和機器學習等專業領域知識,因此令很多人望而卻步。
其實“難以理解”的關鍵在於缺乏必要的先序知識,造成了讀者在相關知識上難以跨越的鴻溝。在撰寫本書過程中,對於可能造成讀者理解困難的地方,均儘可能地給出了必要的基本知識,深入淺出,盡量定性地去描述,對於那些並不一目了然的結論均給出了思路和解釋,必要的還提供了證明,對於某些非常專業已經超過本書討論範圍的相關知識在最後給出了參考文獻,供有興趣的讀者進一步學習和研究。
本書的宗旨是在向讀者介紹知識的同時,培養讀者的思維方法,使讀者知其然還要知其所以然,並在解決實際問題中能有自己的想法。
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/275434.html