標籤:
這幾天我在搞用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。得到矩陣imgstep3:imgfinal = unit8(img).step4:imwrite(imafinal,‘final.jpg‘,‘jpg‘)
關於MATLAB中imagesc函數映像儲存的問題