您好,欢迎访问三七文档
当前位置:首页 > 金融/证券 > 金融资料 > 程式设计入门篇影像显示与读写
MATLAB程式設計入門篇影像顯示與讀寫張智星jang@cs.nthu.edu.tw~jang清大資工系多媒體檢索實驗室MATLAB程式設計入門篇:影像顯示與讀寫19-1MATLAB的影像格式MATLAB最常處理的影像格式為索引影像(IndexedImages)顯示此類型影像的語法如下:image(X)colormap(map)其中X為影像的資料矩陣,map為色盤矩陣。色盤矩陣的大小為K×3,每個橫列由三個元素所組成,分別是R(紅)、G(綠)、B(藍),每個元素的範圍為0~1X的值為1~K,也就是當X(i,j)的值為p,則像素點(i,j)的顏色為map(p,:)這一列的值所決定。MATLAB程式設計入門篇:影像顯示與讀寫顯示索引影像範例一在下例中,我們使用MATLAB顯示內建的小丑圖。範例19-1:image01.mloadclown.mat%載入小丑影像資料,含變數X和mapimage(X);%顯示影像colormap(map)%取用色盤矩陣MATLAB程式設計入門篇:影像顯示與讀寫顯示索引影像範例一5010015020025030020406080100120140160180200MATLAB程式設計入門篇:影像顯示與讀寫顯示索引影像範例二由於由X是索引影像,因此其最小值是1,最大值會等於map的列數(即「可顯示之顏色數目」),可驗証如下:範例19-2:image02.mloadclown.mat%載入小丑影像資料,含變數X和mapfprintf('min(min(X))=%d\n',min(min(X)));fprintf('max(max(X))=%d\n',max(max(X)));fprintf('size(map,1)=%d\n',size(map,1));MATLAB程式設計入門篇:影像顯示與讀寫顯示索引影像範例二min(min(X))=1max(max(X))=81size(map,1)=81由範例可知,此小丑影像共含有81種不同的顏色。MATLAB程式設計入門篇:影像顯示與讀寫顯示索引影像範例三要正確地顯示索引影像則需要正確的色盤,以上面的小丑影像為例,如果使用亂數產生的色盤則會產生下面的結果:範例19-3:image03.mloadclown.mat%載入小丑影像資料,含變數X和mapnewmap=rand(size(map));image(X);colormap(newmap)MATLAB程式設計入門篇:影像顯示與讀寫顯示索引影像範例三5010015020025030020406080100120140160180200MATLAB程式設計入門篇:影像顯示與讀寫顯示索引影像範例四如果我們的色盤矩陣只有K個橫列,但是X的某些元素值小於1或大於K,則我們可以使用imagesc指令將X的最小值轉換成1,最大值轉成K,其他中間值則依線性關係轉換成介於1與K的值,舉例如下:範例19-4:imagesc01.m:X=peaks;imagesc(X);colormap(gray);min(min(X))%顯示X的最小值max(max(X))%顯示X的最大值MATLAB程式設計入門篇:影像顯示與讀寫顯示索引影像範例四ans=-6.5466ans=8.0752具有上述特性的影像資料稱為強度影像(IntensityImages),一般經由數值運算產生的矩陣均屬此類,因此均可由imagesc來顯示。5101520253035404551015202530354045MATLAB程式設計入門篇:影像顯示與讀寫顯示索引影像範例五image指令亦接受全彩影像(TruecolorImages)。全彩影像可以表示成一個m×n×3的矩陣X,其中X(:,:,1)代表紅色的強度。X(:,:,2)代表綠色的強度,X(:,:,3)則代表藍色的強度。X的值的範圍可以是下列兩種:介於0~1的浮點數或是0~255的uint8(詳見本章第三節),舉例來說:範例19-5:image04.mX=imread('annie19980405.jpg');image(X)size(X)MATLAB程式設計入門篇:影像顯示與讀寫顯示索引影像範例五ans=4806403MATLAB程式設計入門篇:影像顯示與讀寫19-2影像的顯示與列印MATLAB在顯示影像時,會將之置於預設的圖軸之中,並以此圖軸的長寬比來成像,因而造成影像的失真。若要以影像本身的長寬比來成像,可加入axisimage,如下:範例19-6:image05.mloadmandrill.matimage(X);colormap(map);axisimageMATLAB程式設計入門篇:影像顯示與讀寫以原影像長寬比例顯示範例10020030040050050100150200250300350400450MATLAB程式設計入門篇:影像顯示與讀寫將影像對應到螢幕上的點的範例若要使影像資料的每一點對應至螢幕上的一個像素(Pixel),可輸入如下:範例19-7:image06.mloadmandrill.mat[m,n]=size(X);figure('unit','pixel','position',[200,200,n,m]);image(X);colormap(map);set(gca,'position',[0,0,1,1]);MATLAB程式設計入門篇:影像顯示與讀寫範例:將影像對應到螢幕上的點此範例產生圖形如同前一個範例,如果你的螢幕解析度較低,圖形會變大。上述範例程式碼中,figure的‘position’性質為[200,200,n,m],代表視窗的左下角位置是[200,200](以pixel為單位),而視窗的寬度為n,高度為m,正好可以符合影像的大小。gca傳回使用中的圖軸,最後一個敘述將圖軸的位置設為整個視窗的大小,使用了正規化的單位。MATLAB程式設計入門篇:影像顯示與讀寫19-2影像的顯示與列印在列印影像時,MATLAB會根據視窗的Paperposition性質來調整圖形的長寬比,使得印出的影像再度變形。欲防止情況,可用下列指令:set(gcf,'PaperPositionMode','auto')若要使PaperPositionMode的預設值就是“auto”,可在startup.m檔案中加入下一行:set(0,'DefaultFigurePaperPositionMode','auto')MATLAB程式設計入門篇:影像顯示與讀寫19-38-bit影像在MATLAB第5版之後,提供了uint8的資料型態。由於uint8只有8個位元,所以能表示的數值範圍為0至255(=28-1)之間的整數。MATLAB程式設計入門篇:影像顯示與讀寫8-bit影像範例由於8-bit影像資料的最小值為0,和一般的雙精準索引影像資料相差1,因此在兩種資料相互轉換時,要特別小心。例如:範例19-8:uint801.mloadclown.matZ8=uint8(X-1);%將X-1轉成uint8的資料型態closeall%關掉所有的圖形視窗image(Z8)colormap(map)MATLAB程式設計入門篇:影像顯示與讀寫8-bit影像範例5010015020025030020406080100120140160180200MATLAB程式設計入門篇:影像顯示與讀寫19-38-bit影像若要將8-bit影像轉回雙精準影像,可輸入如下:Z64=double(Z8)+1;uint8資料型態亦可用於全彩影像資料,此時每一像素的原色(R,G或B)範圍為0至255間的整數,而不再是0至1的實數。MATLAB程式設計入門篇:影像顯示與讀寫19-38-bit影像欲將雙精準的全彩影像轉作uint8資料型態,可輸入如下:RGB8=uint8(round(RGB64*255));其中RGB64為雙精準的全彩影像資料,而RGB8則是unit8的8-bit影像資料。反之,若欲進行反轉換,可輸入如下:RGB64=double(RGB8)/255;關於影像類別及其資料型態的關係,可見下表:MATLAB程式設計入門篇:影像顯示與讀寫影像類別及型態關係表資料型態影像類別雙精準(Double)uint8索引影像(IndexedImages)影像矩陣大小:m×n影像矩陣大小:m×n影像資料範圍:介於[1,k]的整數影像資料範圍:介於[0,k-1]的整數色盤矩陣大小:k×3色盤矩陣大小:k×3色盤資料範圍:介於[0,1]的實數色盤資料範圍:介於[0,1]的實數影像顯示指令:image影像顯示指令:image(註:k的值不大於256)強度影像(IntensityImages)影像矩陣大小:m×n影像矩陣大小:m×n影像資料範圍:任意實數(但通常是[0,1])影像資料範圍:介於[0,255]的整數色盤矩陣大小:k×3色盤矩陣大小:k×3色盤資料範圍:介於[0,1]的實數色盤資料範圍:介於[0,1]的實數影像顯示指令:imagesc(色盤通常是灰階)影像顯示指令:imagesc(色盤通常是灰階)全彩影像(TruecolorImages)影像矩陣大小:m×n×3影像矩陣大小:m×n×3影像資料範圍:介於[0,1]的實數影像資料範圍:介於[0,255]的整數影像顯示指令:image影像顯示指令:imageMATLAB程式設計入門篇:影像顯示與讀寫19-4影像檔案的讀取與寫入imread指令可用於讀取影像檔案。imwrite則可用於寫入影像檔案。這兩個指令可以處理的影像格式有下列幾種:MATLAB程式設計入門篇:影像顯示與讀寫imread及imwrite支援的格式影像檔案格式副檔名相關字串微軟視窗的Bitmapbmp‘bmp’階層式資料格式(HierarchicalDataFormat)hdf‘hdf’JointPhotographicExpertGroupjpg或jpge‘jpg’或‘jpge’微軟視窗的Paintbrushpcx‘pcx’可攜式網路圖形(PortableNetworkGraphics)png‘png’標記式影像檔案格式(TaggedImageFileFormat)tiff‘tif’或‘tiff’X視窗傾印(XWindowsDump)xwd‘xwd’圖形交換格式(GraphicInterchangeFormat)(第六版才支援)gif‘gif’MATLAB程式設計入門篇:影像顯示與讀寫19-4影像檔案的讀取與寫入imread指令可以讀取上述格式的影像檔案,並進行必要之轉換,如下:對於強度影像,imread將資料以uint8的矩陣(大小為m×n)傳回。對於索引影像,imread將資料以uint8的矩陣(大小為m×n)傳回,並同時傳回一個雙精準的色盤矩陣,其每個元素值介於[0,1]。對於全彩矩陣,imread將資料以uint8的矩陣(大小為m×n×3)傳回。MATLAB程式設計入門篇:影像顯示與讀寫使用imread讀取全彩jpg影像imread可讀出下列全彩影像:範例19-9:uint802.mRGB=imread('simulinkteam.jpg');image(RGB)MATLAB程式設計入門篇:影像顯示與讀寫使用imread讀取全彩jpg影像MATLAB程式設計入門篇:影像顯示與讀寫影像檔案寫入範例imwrite指令可將資料寫成影像檔如下:範例19-10:imwrite01.m上述最後一列敘述將會呼叫Windows作業系統下的應用程式來開啟myClown.jpg檔案。loadclown.matimwrite(X,map,'myClown.jpg');!startmyClown.jpgMATLAB程式設計入門篇:影像顯示與讀寫19-4影像檔案的讀取與寫入imfinfo指令可用於傳回影像檔案的各項資訊,例如:info=imfinfo('simulinkteam
本文标题:程式设计入门篇影像显示与读写
链接地址:https://www.777doc.com/doc-3992364 .html