Matlab影象的讀取和儲存
影象處理,主要是對已有的影象進行處理,然後再儲存起來,並不是無中生有,創造出一幅影象。因此,影象的讀取和儲存顯得比較重要。
這裡建立test.m檔案放入已經建立的Matlab資料夾裡,之後的操作都在這裡進行。由於在檔案中操作和Command Window操作的效果一樣,所以就不再加入說明。
第一章:一些函式的介紹
-
介紹三個常用函式
clc;clear;closeall;
這三個函式不分家,在一個檔案的開頭經常會看到。那麼他們的作用是什麼呢?clc的作用就是清螢幕,即Command Window裡的內容會被清除掉,但是他的值仍然存在軟體裡。 clear是刪除所有的變數。比如在前面定義了
當然,也可以單獨使用。這樣就能單獨完成任務。這時最好在Command Window裡操作。
-
typefunction
Matlab 裡面有很多內建的函式,當我們想檢視函式內容的時候,就可以用type function來實現。比如想要檢視mean函式,Matlab到底是怎麼實現,直接type mean就可以看到。如果是檢視別人的寫的程式,在mean上點選右鍵,open mean就可以了。
-
ver
檢視當前
-
docfunction /help function
可以用來檢視函式的用途,語法,用途。可以說Matlab的help本身就是一本百科全書。很多內容都可以找到
第二章讀取影象
-
影象的讀取
I=imread(‘pout.tif’);
imread是讀取影象的函式。pout.tif是matlab內建的影象,不管在什麼程式內都可以直接讀取。那麼,如果我們要讀取其他位置的函式怎麼做呢?這裡我們來說幾種常見的情形。
注:Matlab資料夾內有test.m,1.jpg,image資料夾,同時image資料夾內有2.jpg
(1)讀取1.jpg
I=imread(‘1.jpg’);
(2)讀取2.jpg
I=imread(‘image\2.jpg’);%相對路徑的讀取
(3)讀取D:\1023\25\1.jpg
I=imread(‘D:\1023\25\1.jpg’);%絕對路徑的讀取
(4)讀取D:\1023\25內20個影象。
for i=1:20
I=imread([‘D:\1023\25\’,num2str(i),’.jpg’]);
end
注:第四種情況需要注意的是,裡面添加了[ ],來保證這是一個整句。num2str(i)是將i由數字轉換成字元形式。這樣就能實現迴圈讀取。一般來說,會將影象跟.m檔案放在一起。當影象較多時,影象放入image文件中,讀取方式將(2)和(4)結合起來。利用相對路徑來讀取,這樣當程式和影象同時放在其他電腦上時,不會因為路徑而產生問題。
-
影象的顯示
-
imshow(I)
-
imtool(I)
-
image(I)
關於這三個函式用法的區別,就在上面這個文章內。主要的意思是:imshow顯示按照原來的比例,而image會改變原來影象的比例。imtool,很少用到。那麼用到的時候就再研究吧。一般用imshow就足夠了。
那麼什麼時候用figure呢?當程式中只顯示一幅影象時,直接imshow就可以。然後當影象多的時候,就需要用到figuure;imshow(I1);figure;imshow(I2);figure;imshow(I3)
如果想要在一張圖片內,顯示好幾個圖怎麼辦呢?title顯示在影象的上方,起到提示的作用。
I=imread('pout.tif');
subplot(221);imshow(I);title('1');
subplot(222);imshow(I);title('2');
subplot(223);imshow(I);title('3');
subplot(224);imshow(I);title('4');
其中前面的22代表是2*2的分佈,也可以是2*3,3*4等。按照行來排列,從第一行開始分別為1 2 3 4。如圖所示。
這裡還值得一提的是figure;如果沒有要求的話,直接用figure。此時希望圖2來顯示某個影象,那麼figure(2),就指定來顯示某個影象。當然了,如果僅有一個影象顯示這樣做,那麼可能會被覆蓋掉,因此,一個程式中的用法一定要統一,並且保證後面的,不要把前面的覆蓋掉。
3、檢視和分析結果:
在workspace中會有I 291*240 uint8 74 224 ,就這說明了I是二維影象,大小是291*240,uint8型的。最小值為74,最大值是224.這裡指的是灰度值。
用函式whos就能顯示I的相關資訊:
第三章影象的儲存
1、影象的儲存
imwrite(I,’pout1.jpg’);
同樣,imwrite也有相對路徑和絕對路徑的儲存,以及連續的儲存方法。同imread
imwrite(I,’pout1.jpg’);
imwrite(I,’image\pout1.jpg’);
imwrite(I,’D:\Matlab\image\pout1.jpg’);
imwrite(I,[’image\’,num2str(i),’.jpg’]);%i是變數,需要定義
這裡的.jpg可以改成.bmp等,想要的格式。
需要註明的是,儲存所選擇的資料夾,需要已經建立好。那麼怎麼去自動建立資料夾呢?
需要用mkdir函式。
mkdir(‘D:\image\1’)%絕對路徑的建立。
mkdir(‘image\1’);%絕對路徑資料夾的建立。建立之後,在Matlab資料夾內。
這樣就能夠節省很多的人力。當檔案比較多的情況下,人工去建立的話,還容易出錯。
最後附上今天的程式:當影象較多時,讀取都主要選擇相對路徑,以及迴圈讀取。程式較為簡單。
clc;clear;closeall;
I=imread('pout.tif');
figure;
subplot(221);imshow(I);title('1');
subplot(222);imshow(I);title('2');
subplot(223);imshow(I);title('3');
subplot(224);imshow(I);title('4');
whos;
mkdir('image')
imwrite(I,'image\pout2.jpg');
轉自:http://blog.csdn.net/cy_543/article/details/41145245