Matlab保存uint16格式文件的相關注意事項

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

       那麼如何解決這個問題呢?筆者曾經用fix()函數把圖像矩陣由實數形式轉化成整數形式,但這樣仍沒法改變圖像矩陣是double型的事實。        java

        經過搜索,找到兩個解決方法:                函數

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

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

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

此外還找到一些方法,尚未試過,記錄以下:it

uint8和im2uint8的區別

       圖像數據在計算前須要轉換爲double,以保證精度;        不少矩陣數據也都是double的,要想顯示其,必須先轉換爲圖像的標準數據格式.        若是轉換前的數據符合圖像數據標準(好比若是是double則要位於0~1之間),那麼能夠直接使用im2uint8       class

       若是轉換前的數據分佈不合規律,則使用uint8,將其自動切割至0~255(超過255的按255)        原理

   最好使用mat2gray,將一個矩陣轉化爲灰度圖像的數據格式(double)       搜索

   例如:imwrite(mat2gray(subimg),'fang ai chun_t1_328_864_666.png','bitdepth',8);

       上述的subimg是uint16格式的文件;

       另外,能夠用isgray判斷矩陣是不是一個圖像數據矩陣       

       總之,im2uint八、im2double要跟uint八、double

相關文章
相關標籤/搜索