1. 程式人生 > >Matlab顯示影象時函式imge和imshow的區別

Matlab顯示影象時函式imge和imshow的區別

利用GUI程式設計時,有時候,你需要建立一個axes,在axes上顯示你的影象,常用的函式有:imshow和image。但是這兩個是有著明顯的區別的,image是用來顯示附標影象,即顯示的影象上有x,y座標軸的顯示,可以看到影象的畫素大小,而imshow只是顯示影象。它們都可以用subplot來定點陣圖像顯示的位置,用colormap來定義影象顯示用的顏色查詢表,比如用colormap(pink),可以把黑白影象顯示成帶粉紅色的影象,很有趣的。具體的區別如下所示:

1.imshow的兩種用法:
1) imshow(路徑與檔名字串)
2) imshow(影象矩陣)
若當前figure存在座標軸,imshow會將產生的image物件(即影象物件)顯示在當前座標軸內;
若當前figure不存在座標軸,imshow會產生一個隱藏的座標軸,並將產生的image物件顯示於其中;
2.imshow(路徑與檔名字串)等價於:M=imread(路徑與檔名字串);imshow(M);
3.imshow不會擴充套件填充影象資料,即不會拉伸影象使其鋪滿座標軸,而是改變座標軸寬高比使其適應影象資料;
4.image的用法:
M=imread(路徑與檔名字串);image(M);
5.image不會改變座標軸的大小尺寸,而是擴充套件填充影象矩陣,使其鋪滿座標軸區域。


  image不會改變座標軸的大小尺寸而是擴充套件填充影象矩陣,使其鋪滿座標軸區域

  image是用來顯示附標影象,即顯示的影象上有x,y座標軸的顯示,可以看到影象的畫素大小。


在這裡最值得注意的是要顯示的影象畫素矩陣的資料型別。顯示真彩色影象畫素三維矩陣X,如果是uint8型別,要求矩陣的資料範圍為0-255,如果是double型,則其資料範圍為0-1,要不就會出錯或者出現空白頁。型別轉換很簡單,如果你原來的數值是uint8,在運算中轉換為double後,實際要顯示的數值沒有改變的話,只要用uint8(X)就可轉換為uint8型,如果不想轉換頻繁,也可在顯示時用X/255來轉換為符合0-1double類型範圍要求的數值顯示。如果顯示索引影象(二維矩陣),因為不同資料型別對應顏色查詢表colormap的基點不同,會有所區別,如果不對的話,會出現很多意外的顯示效果的。如果索引影象畫素數值是double型,則它的取值範圍為1-length(colormap),數值起點為1,則矩陣中數值為1的對應colormap中第一行資料,如果索引影象畫素數值是uint8,則取值範圍為0-255,數值起點為0,則矩陣中數值為0的對應colormap中第一行資料,所以索引影象這兩個資料型別之間的轉換,要考慮到+1或-1。直接用uint8或double轉換則會查詢移位,產生失真情況。uint16資料型別與uint8類似,取值範圍為0-65536。


  image不會改變座標軸的大小尺寸而是擴充套件填充影象矩陣,使其鋪滿座標軸區域

  image是用來顯示附標影象,即顯示的影象上有x,y座標軸的顯示,可以看到影象的畫素大小。