matlab中用imshow()顯示圖像與圖像矩陣的數據類型的關系


在matlab中,我們常使用imshow()函數來顯示圖像,而此時的圖像矩陣可能經過了某種運算。在matlab中,為了保證精度,經過了運算的圖像矩陣I其數據類型會從unit8型變成double型。如果直接運行imshow(I),我們會發現顯示的是一個白色的圖像。這是因為imshow()顯示圖像時對double型是認為在0~1范圍內,即大於1時都是顯示為白色,而imshow顯示uint8型時是0~255范圍。而經過運算的范圍在0-255之間的double型數據就被不正常得顯示為白色圖像了。  

              那么如何解決這個問題呢?筆者曾經用fix()函數把圖像矩陣由實數形式轉化成整數形式,但這樣仍無法改變圖像矩陣是double型的事實。         通過搜索,找到兩個解決方法:            

     imshow(I/256); -----------將圖像矩陣轉化到0-1之間          

       imshow(I,[]);       -----------自動調整數據的范圍以便於顯示 (不明白原理!)     

   從實驗結果看兩種方法都解決了問題,但是從顯示的圖像看,第二種方法顯示的圖像明暗黑白對比的強烈些!不知什么原理!   

      此外還找到一些方法,還沒有試過,記錄如下:
uint8和im2uint8的區別
      圖像數據在計算前需要轉換為double,以保證精度;        很多矩陣數據也都是double的,要想顯示其,必須先轉換為圖像的標准數據格式.        如果轉換前的數據符合圖像數據標准(比如如果是double則要位於0~1之間),那么可以直接使用im2uint8        如果轉換前的數據分布不合規律,則使用uint8,將其自動切割至0~255(超過255的按255)        最好使用mat2gray,將一個矩陣轉化為灰度圖像的數據格式(double)        另外,可以用isgray判斷矩陣是否是一個圖像數據矩陣        總之,im2uint8、im2double要跟uint8、double


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM