【原創】關於MATLAB中imagesc函數圖像保存的問題


這幾天我在搞用contourlet變換來做圖像融合。

期間,遇到了一個問題,就是將得到的多層矩陣用contourlet反變換后,得到的不是一個正規的圖片矩陣,就是每個像素點灰度值大小都在0~255之間,這個矩陣像素點的灰度值有的大於了255,有的小於了0。當直接用imshow()函數來顯示這個矩陣的時候,在figure窗口中畫出來的完全不是一張正常圖片,而是白白的一片,底部有些黑色的東西。
我查看了contourlet工具包里的各種文檔說明,參考工具包里的demo程序,使用imagesc(I,[0,255])語句可以將這個矩陣顯示為一張圖片了,但是顏色很詭異,有點像美圖秀秀加的效果,而且圖像的大小也被壓縮。后來查閱資料,發現imagesc()這個函數,本來就是將圖片壓縮后再顯示的。之后添加colormap(gray);axis image;語句可以將圖片顯示為正常的灰度圖像,圖像的大小也恢復了本來面目。
那么現在問題來了,怎樣將這張圖片保存,然后將其用到我的其他測試函數中,來比較圖像融合的效果呢?
在網上一直都找到解決方法,不過現在我已經解決這個問題啦!
其實使用imshow(I,[255])就可以將這個矩陣以正常的圖片顯示,而且不會像imagesc()函數有壓縮圖片這個副作用。同樣還是上面的問題,但是怎樣將figure窗口里的圖片保存呢?
我參看了一下imshow()的實際函數過程,其實就是將灰度值大於255或小於0的像素直接分別修改成了255和0.那么我自己寫了一個函數,對最初的矩陣進行了處理,通過遍歷矩陣中的每一個像素點,將這個矩陣中灰度值大於255或小於0的像素的值直接分別修改成了255和0,得到一個新的矩陣,就是我想要的圖像。
但是我之后直接用imshow(I)函數顯示這個矩陣,又是一片大白。
其實還有把這個矩陣用uint8(I)變換一下,最后得到的矩陣,再用imshow(I)直接顯示,就一切正常啦!
然后再用imwrite()語句保存一下這個矩陣,就得到可以用於下一步操作的圖片啦!
脫水版:
step1:用imagesc(img,[l,h])顯示一張圖片,想保存。
step2:寫一個遍歷矩陣中所有像素的函數,將灰度值小於l的修改為0,將灰度值大於h的修改為255。得到矩陣img
step3:imgfinal = unit8(img).
step4:imwrite(imafinal,'final.jpg','jpg')

 


免責聲明!

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



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