1.uint8,uint16與double
為了節省存儲空間,matlab為圖像提供了特殊的數據類型uint8(8位無符號整數),以此方式存儲的圖像稱作8位圖像。matlab讀入圖像的數據是uint8,而matlab中數值一般采用double型(64位)運算。
概括:uint8,uint16--存儲,顯示
double---計算數據處理
2.轉換
I = rgb2gray(imread(‘dog2.jpg')); %把圖像變為灰度圖像
f = im2double(I); % 灰度圖轉double類型--數據處理,保證精度
g = im2uint8(f); % 圖像轉 uint8 類型,一般不在計算中用,容易引入舍入誤差
f = double(I); %double()將無符號整型轉換為雙精度浮點型double,數據大小沒有變化,原本數據是0~255之間,轉化后還是0~255。
g = im2uint8(f); % im2uint8()實現double轉化為uint8,如果圖像矩陣數據是double類型的0-255,直接im2uint8()轉換的話,matlab會將大於1的數據都轉換為255,0-1之間的數據才會映射到0~255之間整型的數據,所以圖像會顯示白色。
h = uint8(round(f)); %uint8()實現double轉化為uint8
3.為什么要進行rgb轉灰度?
- 自然界中,顏色本身非常容易受到光照的影響,rgb變化很大,反而梯度信息能提供更本質的信息
- 三通道轉為一通道后,運算量大大減少
- opencv的很多函數只支持單通道
什么時候不需要轉灰度?
基於顏色的算法,顏色本身由於樣本環境的特殊原因很有價值,比如醫療圖像中染色劑都是紅色