需要將uint8轉換成double型數據才能計算
https://blog.csdn.net/lihe4151021/article/details/89372688
圖像數據格式uint8與double以及圖像類型轉換
- 圖像數據格式
double(64位):matlab中數值一般采用double型存儲和運算。
uint8(8位無符號整數):為了節省存儲空間,matlab為圖像提供的特殊數據類型。imread把灰度圖像存入一個8位矩陣,當為RGB圖像時,就存入8位RGB矩陣中,因此,matlab讀入圖像的數據是uint8. - 圖像類型轉換
matlab讀入圖像的數據是uint8,而matlab中數值一般采用double型(64位)存儲和運算。所以要先將圖像轉為double格式的才能運算,區別如下:
img = imread('test.jpg'); % 讀入是unit8型(0~255)數據
I1 = im2double(img); % 把圖像轉換成double精度類型(0~1)
I2 = double(img)/255; % uint8轉換成double,作用同im2double
(1) im2double( )和double( )的區別。double( img)就是簡單的數據類型轉換,將無符號整型轉換為雙精度浮點型double,但是數據大小沒有變化,原本數據是0-255之間,轉化后還是0-255。例如原來是255,那么轉換后為255.0,小數位0個數是由double數據長度決定,實際數據大小還是255,只不過這個255已經是double類型空間存儲了,再增加不會發生溢出情況。而im2double(img)則不僅僅是將uint8轉換到double類型,而且把數據大小從0-255映射到0-1區間。
(2)對double型數據進行im2double處理沒有任何作用,即imdouble不會對double類型數據0-255映射到區間0-1