本節書摘來自異步社群出版社《visual c++ 2012 開發權威指南》一書中的第2章,第2.3節,作者: 張铮 , 徐超 , 任淑霞 , 韓海玲,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。
數字圖像處理與機器視覺——visual c++與matlab實作(第2版)
1.圖像存儲格式的互相轉換
有時必須将圖像存儲格式加以轉換才能使用某些圖像處理函數。例如,當使用某些matlab内置的濾鏡時,需要将索引圖像轉換為rgb圖像或者灰階圖像,matlab才會将圖像濾鏡應用于圖像資料本身,而不是索引圖像中的顔色索引值表(這将産生無意義的結果)。
matlab提供了一系列存儲格式轉換函數,如表1.11所示。它們的名字都很便于記憶,例如ind2gray可以将索引圖像轉化為灰階圖像。
表1.11 圖像格式轉換函數

也可以使用一些矩陣操作函數實作某些格式的轉換。例如,下面的語句可以将一幅灰階圖像轉換為rgb圖像。
<code>rgbimage = cat(3, gray, gray, gray);</code>
2.圖像資料類型轉換
matlab圖像處理工具箱中支援的預設圖像資料類型是uint8,使用imread函數讀取圖像檔案一般都為uint8類型。然而,很多數學函數如sin等并不支援double以外的類型,例如當試圖對uint8類型直接使用sin函數進行操作時,matlab會提示如下的錯誤資訊。
i_d = im2double(i_uint8); %将uint8圖像轉換為double類型,灰階範圍也相應從[0,255]歸一化至[0,1]
iout_d = sin(i_d); %進行數學計算
iout_uint8= im2uint8(iout_d); %轉換回uint8(灰階範圍也重新擴充到[0,255]), 準備寫入檔案<code>`</code>