天天看點

matlab裡的圖像格式轉換,矩陣類型unit8與double

1、uint8與double

double函數隻是将讀入圖像的uint8資料轉換為double類型,一般不使用;常用的是im2double函數,将

uint8圖像轉為double類型,範圍為0-1,如果是255的圖像,那麼255轉為1,0還是0,中間的做相應改變。

MATLAB中讀入圖像的資料類型是uint8,而在矩陣中使用的資料類型是double。是以

I2=im2double(I1) :把圖像數組I1轉換成double精度類型;如果不轉換,在對uint8進行加減時會産生

溢出。預設情況下,matlab将圖象中的資料存儲為double型,即64位浮點數;matlab還支援無符号整型

(uint8和uint16);uint型的優勢在于節省空間,涉及運算時要轉換成double型。

im2double():将圖象數組轉換成double精度類型

im2uint8():将圖象數組轉換成unit8類型

im2uint16():将圖象數組轉換成unit16類型

2、uint8和im2uint8

在資料類型轉換時候uint8和im2uint8的差別,uint8的操作僅僅是将一個double類型的小數點後面的部

分去掉;但是im2uint8是将輸入中所有小于0的數設定為0,而将輸入中所有大于1的數值設定為255,再将所

有其他值乘以255。

圖像資料在計算前需要轉換為double,以保證精度;很多矩陣資料也都是double的。要想顯示其,必須先

轉換為圖像的标準資料格式。如果轉換前的資料符合圖像資料标準(比如如果是double則要位于0~1之間)

,那麼可以直接使用im2uint8。如果轉換前的資料分布不合規律,則使用uint8,将其自動切割至0~255(

超過255的按255)。最好使用mat2gray,将一個矩陣轉化為灰階圖像的資料格式(double)

3、double類型圖像的顯示

圖像資料在進行計算前要轉化為double類型的,這樣可以保證圖像資料運算的精度。很多矩陣的很多矩

陣資料也都是double的,要想顯示其,必須先轉換為圖像的标準資料格式。如果直接運作imshow(I),我們會

發現顯示的是一個白色的圖像。這是因為imshow()顯示圖像時對double型是認為在0~1範圍内,即大于1時都

是顯示為白色,而imshow顯示uint8型時是0~255範圍。而經過運算的範圍在0-255之間的double型資料就被

不正常得顯示為白色圖像了。具體方法有:

imshow(I/256); ———-将圖像矩陣轉化到0-1之間

imshow(I,[]); ———-自動調整資料的範圍以便于顯示 (注意這裡,必須是灰階圖,否

則不行)

imshow(uint8(I));

imshow(mat2gray(I));

上面的mat2gray是将最終獲得的矩陣轉化為灰階圖像。常用的為:

A = im2uint8(mat2gray(result))

這樣就将result矩陣轉化為uint8類型的圖像。

繼續閱讀