MATLAB顯示圖像為什麼一片白
- imshow
- 錯誤使用
- 其他
by HPC_ZY
經常有朋友問,為什麼我imshow出來的圖一片白,我這明明是灰階圖的。
這是因為沒弄好圖檔的類型。
imshow
這個函數能顯示兩大類型的圖像
- 整形,最常見 uint8
- 非整形,最常見double
當圖像為uint8類型時,其支援範圍 0~255
當圖像為double類型時,其支援範圍 0~1(大于1的為白色,小于0的為黑色)
錯誤使用
- 把uint8的圖像轉為double後直接顯示,問題代碼如下
%% 問題代碼
im = imread('*.*');
im = double(im);
imshow(im)
所有大于1的像素就都為白色了,這也是最最最常見的錯誤。
如果就想轉為double,同時還想顯示,解決方法如下
%% 解決方法
im = imread('*.*');
im = double(im)/255;
imshow(im)
或
im = imread('*.*');
im = im2double(im);
imshow(im)
- 把已經歸一化的圖像轉為uint8後直接顯示,問題代碼如下
%% 問題代碼
im = imread('*.*');
im = mat2gray(im); % 歸一化
im = uint8(im)
imshow(im)
最大的值才1,整個圖像都黑了,這也第二類的錯誤。
如果需要這麼轉,解決方法如下
%% 解決方法
im = imread('*.*');
im = mat2gray(im); % 歸一化
im = uint8(im*255)
imshow(im)
其他
- 是以使用imshow前,需要核對圖像的類型。有必要的時候還可以在工作區點開矩陣看看,裡面都是些什麼值。
- 有時不想去費心思,也可以使用imagesc()代替imshow()。