讀古今文學網 > 刷臉背後:人臉檢測 人臉識別 人臉檢索 > 2.3 數字圖像處理的基本操作 >

2.3 數字圖像處理的基本操作

在數字圖像處理中,計算機對圖像有著很多處理和操作方法,其中最常見的是圖像的讀取、顯示、修改和保存,以及獲取圖像的基本信息。本節會對這些內容進行介紹,並結合相關內容對圖像進行一些簡單的處理。

2.3.1 圖像的讀取

如果要對數字圖像進行處理,則首先需要讀取圖片。在MATLAB中,函數imread可以實現對圖像的讀取,其格式如下。

灰度圖像或真彩色圖像的讀取:

A = imread(\'filename\',\'fmt\')或imread(\'filename .fmt\')

索引圖像的讀取:

[X,map] = imread(\'filename\' , \'fmt\')或imread(\'filename .fmt\')

filename是圖像的文件名,fmt是圖像類型(如.jpg、.gif、.jpeg、.png等)。圖像讀取可以為A=imread(\'lena\',\'jpg\')或A=imread(\'lena.jpg\')。如果lena.jpg不在MATLAB的當前路徑下,則filename要包含文件的路徑。該函數讀取的圖像為灰度圖像或真彩色圖像,如果讀取的是灰度圖像,則A是一個M×N的二維數組(M、N分別是圖像的高度和寬度);如果讀取的是真彩色圖像,則A是一個M×N×3的三維數組。如果讀取的是索引圖像,則X代表數據矩陣,是M×N的二維數組;map代表調色板矩陣,是m×3的二維數組。

下面我們通過Code7來瞭解如何利用函數imread實現圖像的讀取。

Code7:ch2_7.m

上述代碼演示了讀取圖像的不同方式,gray1、gray2讀取的是灰度圖像,rgb1、rgb2讀取的是真彩色圖像。運行Code7後,結果如圖2-14所示。

圖2-14 Code7的運行結果

Code7運行結束後,查看MATLAB的工作空間,可以看到四個矩陣,即gray1和gray2是灰度圖像,對應的是二維數組;rgb1和rgb2是真彩色圖像,對應的是三維數組,如圖2-15所示。

圖2-15 Code7運行結束後MATLAB的工作空間

函數imread還可以讀取特殊格式的圖像文件。關於函數imread特殊使用和圖像讀取的更多問題,讀者可參閱MATLAB幫助文檔。

2.3.2 圖像的顯示

通常對一幅圖像處理完成後,還需要將圖像顯示出來,查看處理後的效果。在MATLAB中,函數imshow可以實現對圖像的顯示。

imshow(\'img\')

img可以是imread返回的變量,也可以為圖片路徑,如「E:five.jpg」。

使用函數imshow,MATLAB會自動打開圖形圖像視窗,這是MATLAB中一種通用的圖像顯示方法,可以顯示灰度圖像、真彩色圖像、二值圖像、索引圖像等。在顯示灰度圖像時,可以加入一些限制,如imshow(gray,[40,120]),像素值小於40的會顯示為黑點,像素值大於120的會顯示為白點。下面我們通過Code8來說明如何利用函數imshow實現圖像的顯示。

Code8:ch2_8.m

運行Code8後,結果如圖2-16所示。圖(a)是對讀取的灰度圖像進行顯示;圖(b)是對讀取的RGB圖像進行顯示;圖(c)在顯示時限制了灰度圖像(a)的像素值範圍;圖(d)是根據路徑直接顯示圖像文件。

圖2-16 Code8運行後的結果

注意:圖像顯示是先打開圖形圖像窗口,然後將圖片顯示在窗口內,如圖2-16所示。為了清晰展示運行結果,本書中其他圖例只顯示圖像部分,不顯示整個圖形圖像窗口。

在MATLAB中,圖像的顯示函數還有imtool、image、imagesc、colorbar、montage等,關於這些函數的使用,讀者可查閱MATLAB幫助文檔。

2.3.3 圖像的修改

在數字圖像處理中,通常需要對圖像進行修改。修改圖像就是修改對應的數字矩陣中的像素值。下面我們結合程序Code9對圖像的修改進行介紹。

Code9:ch2_9.m

運行Code9後,結果如圖2-17所示。我們可以看到,修改後的圖像的左上角區域為黑色,因為圖像該區域內的像素值被修改為0。

圖2-17 Code9的運行結果

2.3.4 圖像的保存

對數字圖像處理結束後,通常需要對處理後的圖像進行保存。在MATLAB中,函數imwrite可以實現圖像的保存,格式如下。

imwrite(img,filename,fmt)

img是函數imread得到的圖像矩陣,filename和fmt分別是要存儲的文件名和文件類型。如果要保存的img是灰度圖像,則img是一個二維矩陣;如果要保存的img是真彩色圖像,則img是一個三維矩陣。下面我們通過Code10說明如何利用函數imwrite實現圖像的保存。

Code10:ch2_10.m

首先讀入了一個灰度圖像gray1,然後讀入了一個真彩色圖像rgb1,可以在工作空間中看到gray1是二維矩陣,rbg1是三維矩陣。通過函數imwrite把圖像矩陣保存在指定路徑下。運行Code10後,當前路徑下增加了一個灰度圖像,名字為gray.jpg;計算機E:盤下增加了一個真彩色圖像,名字為rgb.jpg。

通過函數imshow顯示圖像後,圖像會顯示在圖形圖像視窗內,如果利用hode on在該圖像上添加一個矩形框生成新圖像,由於圖像的像素值沒有改變,不能使用函數imwrite保存新圖像,那麼此時需要使用函數saveas,格式如下。

saveas(gcf,\'filename\',\'fmt\')

saveas是將圖形圖像窗口保存,相當於將該窗口進行另存為。

下面我們通過Code11說明如何利用函數saveas保存圖像。

Code11:ch2_11.m

運行Code11後,結果如圖2-18所示。

圖2-18 Code11的運行結果

2.3.5 獲取圖像的基本信息

在數字圖像處理中,通常需要查看圖像的基本信息,如圖像格式、圖像大小、圖像數據類型等。在MATLAB中,函數imfinfo可以獲取圖像的基本信息,格式如下。

INFO=imfinfo(imagename);

INFO返回圖像的基本信息,它是一個結構數組。

通過在MATLAB的命令行窗口中輸入如下語句,來查看圖像的基本信息。

返回的info包含著圖像「1.jpg」的基本信息。Filename代表圖像文件的路徑和名字;FileModDate表示圖像文件的最後修改時間;FileSize表示圖像文件的大小;Format表示圖像的格式;Width表示圖像的寬;Height表示圖像的高;BitDepth:24;ColorType表示圖像類型(灰度圖像、RGB圖像、索引圖像、二值圖像)。

如果僅需要獲取圖像的行和列,則可以使用如下語句。