天天看點

《數字圖像處理與機器視覺——Visual C++與Matlab實作》——1.3 Matlab的圖像轉換

本節書摘來自異步社群出版社《數字圖像處理與機器視覺——visual c++與matlab實作》一書中的第1章,第1.3節,作者: 張铮 , 王豔平 , 薛桂香,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

數字圖像處理與機器視覺——visual c++與matlab實作

1.圖像存儲格式的互相轉換

有時必須将圖像存儲格式加以轉換才能使用某些圖像處理函數。例如,當使用某些matlab内置的濾鏡時,需要将索引圖像轉換為rgb圖像或者灰階圖像,matlab才會将圖像濾鏡應用于圖像資料本身,而不是索引圖像中的顔色索引值表(這将産生無意義的結果)。

matlab提供了一系列存儲格式轉換函數,如表1.11所示。它們的名字都便于記憶,例如,ind2gray可以将索引圖像轉化為灰階圖像。

《數字圖像處理與機器視覺——Visual C++與Matlab實作》——1.3 Matlab的圖像轉換
《數字圖像處理與機器視覺——Visual C++與Matlab實作》——1.3 Matlab的圖像轉換

也可以使用一些矩陣操作函數實作某些格式轉換。例如,下面的語句可以将一幅灰階圖像轉換為rgb圖像。

2.圖像資料類型轉換

matlab圖像處理工具箱中支援的預設圖像資料類型是uint8,使用imread函數讀取的圖像檔案一般都為uint8類型。然而,很多數學函數如sin等并不支援double以外的類型,例如,當試圖對uint8類型直接使用sin函數進行操作時,matlab會提示如下的錯誤資訊:

針對這種情況,除了使用1.1.4小節介紹的強制類型轉換方法外,還可利用圖像處理工具箱中的内置圖像資料類型轉換函數。内置轉換函數的優勢在于它們可以幫助處理資料偏移量和歸一化變換,進而簡化了程式設計工作。

一些常用的圖像類型轉換函數如表1.12所示。

《數字圖像處理與機器視覺——Visual C++與Matlab實作》——1.3 Matlab的圖像轉換

可以在使用matlab數學函數前将圖像轉換為double類型,而在準備将圖像寫入檔案時再将其轉換為uint8類型,如下所示:

i_d = im2double(i_uint8); %将uint8圖像轉換為double類型,灰階範圍也相應從[0,255]歸一化至[0,1]

iout_d = sin(i_d); %進行數學計算

iout_uint8= im2uint8(iout_d); %轉換回uint8(灰階範圍也重新擴充到[0,255]), 準備寫入檔案

本文僅用于學習和交流目的,不代表異步社群觀點。非商業轉載請注明作譯者、出處,并保留本文的原始連結。

繼續閱讀