關於MATLAB圖像處理imshow函數涉及到的數據類型的思考
02-22
胖喵鎮樓~~~
今天在寫圖像濾波代碼時遇到了最後顯示圖像顯示不正常的問題,反覆修改半天才知道是數據類型的鍋,果斷決定寫筆記記下來~~~~~
%imshow函數是用來顯示圖像的
I=double(imread(lena.png));imshow(I);
然鵝出現的結果就會是醬,一篇雪白的。。。。流口水(ˉ﹃ˉ)
問度娘發現(敲黑板)是因為
imshow()顯示圖像時對double型是認為在0~1範圍內,
即大於1時都是顯示為白色,而imshow顯示uint8型時是0~255範圍。
而經過運算的範圍在0-255之間的double型數據就被不正常得顯示為白色圖像了。
下面奉上解決辦法,
imshow(uint8(I));#方法一 將數據轉化到Uint8類型imshow(I/255);#方法二 將數據值轉化到0與1之間imshow(I,[]);#方法三 []的目的是自動調整數據的範圍以便於顯示
其中,三種方法雖然都能正常顯示圖像,但圖像還是有差距的。
這是因為:
imshow(uint8(I))中按256級灰度值顯示圖像。0表示黑色,255表示白色。而大於255的值均變成255,即白色;
imshow(I,[]);中將最大值設為255,最小值設為零,故此種方法中圖像的對比度比較好。
推薦閱讀:
※「MatLab 模擬結論在工業界認可度低」是否屬實?
※學習 MATLAB 有哪些書籍是值得推薦的?
※基於MATLAB/SIMULINK車載吸附儲氫系統的集總參數模型
※如何實現多維數組的行 / 列按照 index 訪問都得到連續內存?
TAG:MATLAB |