一直以來,在使用MATLAB進行運算的過程中,經常會用到對圖像的各種處理,因此需要對圖像進行數據轉換,因此對經常用到的轉換進行整理,方便查看。
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類型的圖像。