1. 程式人生 > >Matlab影象的讀取和儲存

Matlab影象的讀取和儲存

影象處理,主要是對已有的影象進行處理,然後再儲存起來,並不是無中生有,創造出一幅影象。因此,影象的讀取和儲存顯得比較重要。

    這裡建立test.m檔案放入已經建立的Matlab資料夾裡,之後的操作都在這裡進行。由於在檔案中操作和Command Window操作的效果一樣,所以就不再加入說明。

第一章:一些函式的介紹

  1. 介紹三個常用函式

    clc;clear;closeall;

    這三個函式不分家,在一個檔案的開頭經常會看到。那麼他們的作用是什麼呢?clc的作用就是清螢幕,即Command Window裡的內容會被清除掉,但是他的值仍然存在軟體裡。 clear是刪除所有的變數。比如在前面定義了

     A=5;clear函式之後,A就被清除了。後面想要用,就需要重新定義。close all是將所有開啟的圖片關掉。在函式的開頭寫上這樣的函式,就保證不會受到之前變數等的影響。

    當然,也可以單獨使用。這樣就能單獨完成任務。這時最好在Command Window裡操作。

  2. typefunction

    Matlab 裡面有很多內建的函式,當我們想檢視函式內容的時候,就可以用type function來實現。比如想要檢視mean函式,Matlab到底是怎麼實現,直接type mean就可以看到。如果是檢視別人的寫的程式,在mean上點選右鍵,open mean就可以了。

  3. ver

    檢視當前

    Matlab版本的函式。一般用不到。

  4. docfunction /help function

可以用來檢視函式的用途,語法,用途。可以說Matlabhelp本身就是一本百科全書。很多內容都可以找到

第二章讀取影象

  1. 影象的讀取    
    I=imread(‘pout.tif’);

imread是讀取影象的函式。pout.tifmatlab內建的影象,不管在什麼程式內都可以直接讀取。那麼,如果我們要讀取其他位置的函式怎麼做呢?這裡我們來說幾種常見的情形。

注: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\2520個影象。

for i=1:20

 I=imread([‘D:\1023\25\’,num2str(i),’.jpg’]);

end

注:第四種情況需要注意的是,裡面添加了[ ],來保證這是一個整句。num2str(i)是將i由數字轉換成字元形式。這樣就能實現迴圈讀取。一般來說,會將影象跟.m檔案放在一起。當影象較多時,影象放入image文件中,讀取方式將(2)和(4)結合起來。利用相對路徑來讀取,這樣當程式和影象同時放在其他電腦上時,不會因為路徑而產生問題。

  1. 影象的顯示

  1. imshow(I)

  2. imtool(I)

  3. 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