曹海燕 秦文華 周崇波曲阜師范大學物理工程學院
?
MATLAB環(huán)境下攝像頭的啟動方法綜述
曹海燕 秦文華 周崇波
曲阜師范大學物理工程學院
摘要:文章簡單介紹了MATLAB軟件在圖像處理中的應用情況,及其功能、特點等。根據(jù)在MATLAB環(huán)境下啟動攝像頭的方法,對啟動的不同方法及其獲取的圖像進行了說明??偨Y(jié)了在啟動過程或是獲取圖像時容易出現(xiàn)的問題,并對問題進行分析與解答。對于目前啟動攝像頭獲取圖像的主要應用進行歸納。
關(guān)鍵字:MATLAB 啟動攝像頭 獲取
MATLAB是由美國Mathwokrs公司發(fā)布的面向科學計算、數(shù)據(jù)可視化以及交互式程序設計的高技術(shù)計算語言。MATLAB經(jīng)過多年的發(fā)展與競爭,現(xiàn)已成為國際公認的最優(yōu)秀的科技應用軟件之一。目前,MATLAB已經(jīng)發(fā)展成了一系列的產(chǎn)品:MATLAB主包與各種工具箱。而且,公司針對不同領(lǐng)域的應用,推出了信號處理、控制系統(tǒng)、神經(jīng)網(wǎng)絡、圖像處理、小波分析、魯棒控制、非線性系統(tǒng)控制設計、系統(tǒng)辨識、通信等30多個具有專門功能的工具箱。正因其具有強大的功能,才使得其更好地運用在圖像處理方面。MATLAB中的數(shù)字圖是以矩陣形式表示,這意味著它強大的矩陣運算能力用于圖像處理非常有利,矩陣運算的語法對MATLAB中的數(shù)字圖像同樣適用。圖像處理操作包括讀入圖像、顯示圖像、處理圖像和存儲圖像等幾個部分。其中的圖像可以是數(shù)據(jù)矩陣,也可以是顏色映射表矩陣,主要包含了4 種基本的圖像類型:索引圖像、灰度圖像和二值圖像。下面介紹在MATLAB環(huán)境下對攝像頭的啟動的圖像處理的操作。
整個啟動調(diào)用攝像頭的過程需要以下幾個步驟:1)查詢攝像頭的具體參數(shù);2)創(chuàng)建視頻輸入對象;3)圖像預覽和顯示;4)獲取視頻圖像;5)圖像獲取設備的獲取和設置;6)關(guān)閉視頻對象。
1.1 啟動攝像頭的過程
1.1.1 查詢攝像頭的具體參數(shù)
在啟動攝像頭之前,我們需要知道使用的攝像頭的具體參數(shù)才能進行編程。以USB 攝像頭為例,在MATLAB環(huán)境下輸入如下語句:info=imaqhwinfo,可以獲取適配器的種類:‘gentl’,matrox’,‘winvideo’;版本:‘8.0(R2012b)’;工具箱名稱:‘Image Acquisition Toolbox’ ;工具箱版本:‘4.4(R2012b)’ 。輸入如下語句:d e v _ w i n _ i n f o = w i n _ i n f o . DeviceInfo,可以獲取圖像的默認格式,設備名稱和獲取的圖像支持格式。
1.1.2 啟動過程步驟及MATLAB語句
(1)創(chuàng)建視頻輸入對象。在info=imaqhwinfo,可以獲取適配器的種類:‘gentl’ ,環(huán)境下啟動攝像頭時首先要做的是將攝像頭與軟件相連接,用到的主要參數(shù)videoinput ,創(chuàng)建視頻輸入對象的語句為:obj=videoinput(adaptorname,device ID,format),其中,adaptorname為適配器名稱;deviceID 為設備ID號;format 為視頻采集格式。
(2)打開視頻預覽窗口。創(chuàng)建視頻連接,打開視頻預覽窗口,使用參數(shù)preview,其語句為:
himage=preview(obj,himage),其中,obj為視頻采集對象;himage 為視頻預覽窗口對應的句柄。
(3)圖像獲取、顯示和保存。視頻預覽窗口提供可供查看的視頻,我們需要從視頻中得到其中一幀的圖像,并將圖片顯示與保存,其語句如下所示:frame=getsnapshot(obj);
imshow(frame);imwrite(frame,’M.jpg’,’jpg’);其中,frame是矩陣。
1.2 啟動攝像頭的基本MATLAB語句及效果圖
在MATLAB 環(huán)境下啟動攝像頭的方法有許多種,并且根據(jù)其用途不同更有不同的方法,下面介紹三種不同的方法:1)單張圖像的獲??;2)多張圖像的連續(xù)獲取;3)多攝像頭的啟動。
(1)單張圖像的獲取。進行單張圖像的捕捉、顯示和保存時,首先輸入如下代碼,得到預覽下的默認格式的攝像頭捕捉窗口:
obj=videoinput(‘winvideo’,1);preview(obj);
在上述代碼的基礎之上輸入以下代碼得到MATLAB啟動攝像頭后獲取的照片,并將照片以文件名M進行保存:frame=getsnapshot(obj);frame=ycbcr2rgb(frame);imshow(frame);imwrite(frame,’M.jpg’,’jpg’);
(2)多張圖像的連續(xù)獲取。在實際應用中,我們往往需要連續(xù)拍攝多張照片,比如在進行人臉追蹤或是馬路上安裝的攝像頭,這要求我們所要控制的攝像頭要不間斷地拍攝多張照片。此方法與單張圖像的獲取的不同之處在于,需要運用for循環(huán)語句或是while循環(huán)語句控制拍攝的圖像張數(shù),用定時器設定獲取圖像的時間間隔。下面介紹連續(xù)拍攝多張圖像所用到的for循環(huán)語句。for ii=1:5a=getsnapshot(vid);
以上講述的是關(guān)于多張圖像的連續(xù)獲取程序,在進行上述操作時,其中的for循環(huán)語句時連續(xù)獲取5張圖像的程序,可根據(jù)要求對其進行相應的修改獲取不同數(shù)量的圖像。
(3)多攝像頭的啟動。在MATLAB環(huán)境下可以啟動單攝像頭獲取多張照片,也可以同時啟動多個攝像頭,我們以雙攝像頭為例來說明啟動多攝像頭的過程。雙攝像頭啟動的應用非常廣泛,如圖像拼接、視頻拼接和雙目檢測等。啟動雙攝像頭是PC機上的兩個攝像頭進行同時開啟,并同時獲取圖像,其啟動過程與啟動單攝像頭的過程相似,首先創(chuàng)建視頻輸入對象,創(chuàng)建窗口,設置相應的參數(shù)等,其不同之處在于,在進行設置的過程中,無論是視頻輸入對象的創(chuàng)建還是各個窗口等的創(chuàng)建都是對于兩個攝像頭進行設置,而不是一個攝像頭。并且,其中有可能碰到的問題是需要設置的兩個攝像頭,其型號是不一樣的,這就要求我們在進行設置時要多加注意。首先在創(chuàng)建視頻輸入對象時,要根據(jù)實際情況(每臺筆記本或是PC機自帶的攝像頭或是使用的USB攝像頭其參數(shù)是不一樣的)設定攝像頭的格式,其主要是對參數(shù)formate進行設置;創(chuàng)建窗口時,主要是對視頻預覽窗口的按鍵進行設置,并且將兩個攝像頭的畫面設置在一個窗口下;對兩個攝像頭進行參數(shù)的設置,其中包括兩個攝像頭的手柄、視頻的分辨率、獲取的圖像的格式和獲取圖像的時間間隔等;界面設計,主要是對視頻預覽窗口中兩個攝像頭的位置及顯示的圖像的設計,其中有一項是界面的平移情況,一般要求將界面移到屏幕的中心位置,其語句為:movegui(figure_handle,‘center’)。
在MATLAB環(huán)境下啟動攝像頭時,有時會出現(xiàn)錯誤,下面針對其中出現(xiàn)的問題進行分析說明。
(1)MATLAB調(diào)用攝像頭獲取圖片時,其視頻窗口或是獲取的圖片顏色顯示不正常,有時會出現(xiàn)紅色失真或是灰度失真等問題,這些問題都與攝像頭的參數(shù)有關(guān),需要設置參數(shù)讓其視頻窗口顯示正常,下面介紹一種紅色失真的問題出現(xiàn)的原因及解決方法:截圖的圖片制式應為默認制式,有可能攝像頭的默認制式是ycbcr制式,避免問題的出現(xiàn)可以在imshow之前加語句:frame=ycbcr2rgb(frame) ;進行轉(zhuǎn)換。
(2)一般攝像頭支持的默認分辨率為160 120,所以在編寫MATLAB語句時,如果沒有指出視頻預覽窗口及捕獲照片的分辨率就會導致其分辨率不高,視頻獲取窗口很小,如圖1 所示。針對這種情況可以在寫語句時指定其分辨率,攝像頭不同,其支持的分辨率就不同,一般有160 120、640 480等幾種分辨率,可以根據(jù)需要修改語句,其matlab語句為:obj=videoinput(‘winvideo’,1,’YUY2_640 480’)。
(3)在多次運行程序時,會出現(xiàn)這樣的錯誤,提示攝像頭已使用。這種情況說明程序停止了,但是未關(guān)閉攝像頭,應該關(guān)閉設備,運行語句stop 和delete,將設備停止再運行程序。(4)攝像頭拍攝的照片格式為ycrcb格式的,要把它轉(zhuǎn)換為rgb 格式才能顯示正常。需要的語句為:a=getsnapshot(vid);a=ycbcr2rgb(a)。
(5)在視頻窗口或是拍攝照片時會有一定的延時,其出現(xiàn)的原因及解決方法為:預覽。預覽可以解決延時問題,因為每次調(diào)用攝像頭需要時間。
關(guān)于MATLAB軟件及在其環(huán)境下啟動攝像頭的情況都有很多的應用,如:利用MATLAB調(diào)用攝像頭可直接從攝像頭實時采集圖像,進行人臉識別;利用MATLAB調(diào)用雙攝像頭,進行雙目檢測;利用MATLAB調(diào)用攝像頭拍照并發(fā)到郵箱;利用MATLAB調(diào)用攝像頭實現(xiàn)間隔一段時間拍攝照片并進行保存的功能;利用MATLAB可以調(diào)用別臺電腦上的攝像頭并進行實時視頻監(jiān)控;利用MATLAB實現(xiàn)實時采集并制作視頻;利用MATLAB搭建一個家庭監(jiān)控系統(tǒng)。
MATLAB軟件其功能強大,并且應用廣泛,尤其是其在圖像處理方面的應用。本文主要對MATLAB進行簡單地介紹,針對MATLAB啟動攝像頭的一些情況進行了總結(jié)與分析,對其啟動的方法與目前容易出現(xiàn)的問題及解決方案進行了綜述,并總結(jié)了其主要的應用。
參考文獻
[1] MathWorks,Lnc. Late-Breaking News for the 5.2 Product Family[M]. 1998: 3-9.
[2] 許志影,李晉平. Matlab及其在圖像處理中的應用[J].計算機與現(xiàn)代化,2003(4): 64-65.
[3] 李了了,鄧善熙. MATLAB在圖像處理技術(shù)方面的應用[J].微計算機信息,2003,19(2):65-66.Washington,USA,2008:2347-2354.
[4] John P O,Brenda L S. Improving image quality in poor visibility conditions using a physical model for contrast degradation[C]//Proceedings of IEEE Transactions on Image Processing. Washington,USA,1998:167-179.
[5] 徐晶,劉鵬,唐降龍.大氣光估計對單幅圖像去霧復原的影響[J].智能計算機與應用,2012,2(3):68-71.
[6] He K M,Sun J,Tang X O. Guided image filtering[C]// Proceedings of IEEE Transactions on Pattern Analysis and Machine Intelligence. Washington,USA,2013: 1-13. [7] Levin A,Lischinski D,Weiss Y. A closed form solution to natural image matting[C]// Proceedings of IEEE Conference on Computer Vision and PatterRecogition. Washington,USA,2006: 61-68.
[8] 郭璠,蔡自興,謝斌,等.單幅圖像自動去霧新算法[J].中國圖象圖形學報,2011,16(4):516-521.