視頻監(jiān)控系統(tǒng)計(jì)算機(jī)專業(yè)畢業(yè)論文
《視頻監(jiān)控系統(tǒng)計(jì)算機(jī)專業(yè)畢業(yè)論文》由會員分享,可在線閱讀,更多相關(guān)《視頻監(jiān)控系統(tǒng)計(jì)算機(jī)專業(yè)畢業(yè)論文(44頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 裝 ┊ ┊ ┊ ┊ ┊ 訂 ┊ ┊ ┊ ┊ ┊ 線 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 目 錄 1.緒論 1 2.OpenCV的編程環(huán)境 3 2.1 OpenCV簡介 3 2.2 OpenCV環(huán)境介紹 5 2.2.1 OpenCV的基本結(jié)構(gòu) 5 2.2.2 OpenCV的特征 6 2.3安裝OpenCV 7 2.3.1安裝OpenCV1.0 7 2.3.2配置Windows環(huán)境變量 9 2
2、.3.3配置VC++6.0環(huán)境與全局設(shè)置 11 2.3.4項(xiàng)目設(shè)置 11 3.OpenCV的體系結(jié)構(gòu) 13 3.1 OpenCV中的常用數(shù)據(jù)結(jié)構(gòu)體系 13 3.2 OpenCV中常用類體系 14 3.3 OpenCV處理圖像常用的函數(shù) 14 4.視頻處理 17 4.1對視頻進(jìn)行讀寫處理 17 4.1.1獲取攝像頭并顯示視頻圖像 17 4.1.2對獲取的視頻進(jìn)行保存 19 4.1.3讀取AVI視頻 20 4.2小結(jié) 20 5.運(yùn)動目標(biāo)監(jiān)控系統(tǒng)的研究與實(shí)現(xiàn) 21 5.1運(yùn)動目標(biāo)監(jiān)控系統(tǒng) 21 5.2基于背景建模的圖像處理 23 5.2.1背景生成算法 23 5.2.
3、2對捕獲的圖像幀的處理 26 5.3運(yùn)動物體監(jiān)控的實(shí)現(xiàn) 30 結(jié)束語 34 致 謝 35 參考文獻(xiàn) 36 附錄(源代碼) 37 第 III 頁 1.緒論 20多年來,視頻監(jiān)控系統(tǒng)經(jīng)歷了從第一代百分之百的模擬系統(tǒng)(VCR),到第二代部分?jǐn)?shù)字化的系統(tǒng)(DVR/NVR),再到第三代完全數(shù)字化的系統(tǒng)(網(wǎng)絡(luò)攝像機(jī)和視頻服務(wù)器)三個階段的發(fā)展演變。在這一過程中,視頻監(jiān)控系統(tǒng)與設(shè)備雖然在功能和性能上得到了極大的提高,但是仍然受到了一些固有因素的限制,其中既包含人類作為監(jiān)控者自身在生理上的弱點(diǎn),也包含視頻監(jiān)控系統(tǒng)配置和以及視頻監(jiān)控設(shè)備在功能和性能上的局限性。這些限制因素使各類視頻監(jiān)控
4、系統(tǒng)均或多或少的存在報(bào)警精確度差、誤報(bào)和漏報(bào)現(xiàn)象多、報(bào)警響應(yīng)時間長、錄像數(shù)據(jù)分析困難等缺陷,從而導(dǎo)致整個系統(tǒng)在安全性和實(shí)用性的降低。 近年來,隨著網(wǎng)絡(luò)帶寬、計(jì)算機(jī)處理能力和存儲容量的迅速提高,以及各種視頻信息處理技術(shù)的出現(xiàn),全程數(shù)字化、網(wǎng)絡(luò)化的視頻監(jiān)控系統(tǒng)優(yōu)勢愈發(fā)明顯,其高度的開放性、集成性和靈活性為視頻監(jiān)控系統(tǒng)和設(shè)備的整體性能提升創(chuàng)造了必要的條件,同時也為整個安防產(chǎn)業(yè)的發(fā)展提供了更加廣闊的發(fā)展空間,嶄新的應(yīng)用模式和市場機(jī)遇不斷涌現(xiàn),而智能視頻監(jiān)控則是網(wǎng)絡(luò)化視頻監(jiān)控領(lǐng)域最前沿的應(yīng)用模式之一。 智能視頻監(jiān)控技術(shù)能夠?qū)龅剡M(jìn)行智能的監(jiān)控,與傳統(tǒng)的視頻監(jiān)控技術(shù)相比具有許多優(yōu)點(diǎn)。 首先,傳統(tǒng)的
5、視頻監(jiān)控系統(tǒng)雖然已經(jīng)可以滿足人們“眼見為實(shí)"的要求,但這種監(jiān)視系統(tǒng)要求監(jiān)控人員不停地監(jiān)視屏幕以獲得視頻信息,通過人為的理解和判斷得到結(jié)論,并做出相應(yīng)決策,監(jiān)控人員長期盯著眾多的電視監(jiān)視器成了一項(xiàng)非常繁重的任務(wù)。智能視頻監(jiān)控技術(shù)的應(yīng)用則完全改變了這一模式。其通過前端功能強(qiáng)大的分析模塊,自動對視頻圖像進(jìn)行分析,得到處理結(jié)果。 此外,運(yùn)用智能視頻監(jiān)控技術(shù)還能大大提高系統(tǒng)響應(yīng)速度,降低事件誤報(bào)的概率。智能視頻監(jiān)控具有強(qiáng)大的視頻分析處理能力,能夠有效地降低無用信息對監(jiān)控人員的千擾,精確地分析異常事件類型特征,在最短的時間內(nèi)分析出結(jié)果。 正是由于智能視頻監(jiān)控技術(shù)具有使用方便、監(jiān)測面積廣、設(shè)備簡單、響應(yīng)
6、速度快等優(yōu)點(diǎn),其取代傳統(tǒng)監(jiān)控技術(shù)的趨勢越來越明顯。 智能視頻監(jiān)控技術(shù)是計(jì)算機(jī)視覺領(lǐng)域一個新興的研究課題。它是指對監(jiān)控點(diǎn)某個范圍內(nèi)場景的監(jiān)控,是一種新的侵入探測技術(shù)。智能視頻監(jiān)控采用計(jì)算機(jī)對視頻監(jiān)控信號進(jìn)行分析,提取目標(biāo)檢測區(qū)域內(nèi)運(yùn)動物體的活動特征與活動信息,將這些內(nèi)容與設(shè)定的報(bào)警規(guī)則相比較。當(dāng)滿足報(bào)警條件時(即發(fā)現(xiàn)異常行為,如不允許侵入的區(qū)域出現(xiàn)了侵入行為等),自動產(chǎn)生報(bào)警信號。視頻智能監(jiān)控系統(tǒng)是一個龐大、復(fù)雜的系統(tǒng),其關(guān)鍵技術(shù)包括了多視頻融合和運(yùn)動檢測等方面,涉及計(jì)算機(jī)視覺、圖像處理、模式識別和人工智能等許多學(xué)科的內(nèi)容。其中,運(yùn)動檢測、屬于圖像處理的范疇,是初級層次的處理,是視頻監(jiān)控系統(tǒng)中
7、研究較多的問題;圖像分析和理解屬于人工智能的范疇,是高層次的處理,是近年來被廣泛關(guān)注的研究熱點(diǎn)。 自上個世紀(jì)末期開始,國外科研工作者在視頻監(jiān)控領(lǐng)域進(jìn)行了大量的研究探索工作,取得了很多成果,并多次召開與此相關(guān)的國際會議和研討會。歐美等發(fā)達(dá)國家還在這一領(lǐng)域內(nèi)展開了一些大型項(xiàng)目的研究,如美國國防高級研究計(jì)劃局資助研制的視頻監(jiān)視與監(jiān)控系統(tǒng)VSAM,該系統(tǒng)以卡內(nèi)基梅隆大學(xué)為首,麻省理工學(xué)院等高校參與,目標(biāo)是開發(fā)自動視頻理解技術(shù),用于實(shí)現(xiàn)未來戰(zhàn)爭中那些人力監(jiān)控費(fèi)用昂貴、具有高度危險(xiǎn)或者人力無法到達(dá)的場所的監(jiān)控;歐盟也資助研發(fā)了PRISMATICA系統(tǒng),該系統(tǒng)融合了多種智能監(jiān)控檢測設(shè)備,主要應(yīng)用于地鐵站的
8、安全監(jiān)控。 國內(nèi)在這一方面起步較晚。目前國內(nèi)使用的視頻監(jiān)控系統(tǒng)大部分均側(cè)重于對視頻數(shù)據(jù)的壓縮、存儲和傳輸,視頻終端接收到數(shù)據(jù)后需要由人來實(shí)時監(jiān)測分析,耗費(fèi)了大量的人力物力,遠(yuǎn)遠(yuǎn)無法滿足人們對監(jiān)控系統(tǒng)日益增長的智能化要求。直到2004年,一種基于視頻運(yùn)動分析檢測技術(shù)的入侵探測器開始在我國出現(xiàn),但核心技術(shù)仍然是從國外引進(jìn),國內(nèi)技術(shù)還不足以轉(zhuǎn)化成產(chǎn)品。不過可喜的是國內(nèi)有很多研究單位或機(jī)構(gòu)都對此技術(shù)進(jìn)行了研究,并取得了很好的研究成果。中國南京新奕天科技有限公司(Topsky)與香港大學(xué)合作開發(fā)出了一款高性能智能視頻監(jiān)控設(shè)備—ⅦinkSman,該設(shè)備不僅能精確檢測出多個移動目標(biāo),還能滿足禁區(qū)、入侵檢測
9、等特定的安全需求。 2.OpenCV的編程環(huán)境 本章將介紹OpenCV及其環(huán)境還有幫助工具的使用,說明Visual C++下的安裝與配置,介紹基于OpenCV編程時常用的基本類和基本函數(shù),初步了解OpenCV應(yīng)用程序的開發(fā)過程,最后通過實(shí)例來說明如何在Visual C++集成環(huán)境下快速建立應(yīng)用程序框架。 2.1 OpenCV簡介 OpenCV是Intel公司資助的開源計(jì)算機(jī)視覺庫。它由一系列C函數(shù)和少量C++類構(gòu)成,實(shí)現(xiàn)了圖像處理和計(jì)算機(jī)視覺方面的很多通用算法。 其重要重要特性包括: 擁有包括300多個C函數(shù)的跨平臺的中、高層API。它不依賴于其它的外部庫—盡管也可以使用某些外
10、部庫。 對非商業(yè)應(yīng)用和商業(yè)應(yīng)用都是免費(fèi)(FREE)的。 為Intel Intergrated Perfomance Primitives(IPP)提供了透明接口。這意味著如果有為特定處理器優(yōu)化的的IPP庫,OpenCV將在運(yùn)行時自動加載這些庫。 在過去的十年,隨著處理器速度和內(nèi)存容量以摩爾定律增長,計(jì)算機(jī)視覺的研究和應(yīng)用也得到了迅速的發(fā)展。以往傳統(tǒng)的開發(fā)方法要求工程人員在完成的硬件設(shè)計(jì)的同時,自己編碼實(shí)現(xiàn)所有底層的算法,所有的圖像處理函數(shù)都要從頭編寫,既造成時間和精力上的浪費(fèi),又難以保證穩(wěn)定性、實(shí)用性和通用性,越來越難以滿足現(xiàn)實(shí)的需求。為了解決理論到應(yīng)用的難題,出現(xiàn)了眾多的計(jì)算機(jī)視
11、覺和圖像處理軟件包。大多數(shù)軟件包是用C/C++編寫的。例如,TargetJr及其后續(xù)版本VXL(the Vision something LIbrarise)就是這樣一個C++庫的集合,在滿足的小型、快速和穩(wěn)固的系統(tǒng)的開發(fā)要求的同時提供了多平臺移植性。Gandalf提供了計(jì)算機(jī)視覺和數(shù)值計(jì)算庫,適合于可移植平臺的視覺應(yīng)用軟件的開發(fā)。Delft科學(xué)圖像處理庫DIPlib是另一個科學(xué)圖像處理C程序庫.包含了許多圖像數(shù)據(jù)多維分析和處理函數(shù)。同時許多商用圖像處理和計(jì)算機(jī)視覺軟件包也得到相應(yīng)開發(fā)。MVTec公司開發(fā)的HALCON是其中之一,它包含了C/C++代碼的圖像處理庫。LabView在Nl圖像處理
12、硬件的支持下能加速圖像處理。由微軟公司開發(fā)的SDK是一個底層的圖像操作分析的C++庫。在Matlab中的圖像處理工具包以及在Mathematica中的數(shù)字圖像處理軟件包都是較為強(qiáng)大的圖像處理工具,同時這兩個軟件包兼有許多高級數(shù)學(xué)計(jì)算功能。由Aurora公司開發(fā)的LEADTOOLS是一套商用化計(jì)算機(jī)視覺包,它包括了圖像處理服務(wù)器開發(fā)工具。允許用戶創(chuàng)建各種基于網(wǎng)絡(luò)的圖像處理服務(wù)程序。 這些軟件包為計(jì)算機(jī)圖像分析和機(jī)器視覺提供了極大的便利,但也存在不足之處。 大多數(shù)軟件包沒有高級數(shù)學(xué)計(jì)算函數(shù)。并且這些軟件包都不包括如目標(biāo)跟蹤、攝像機(jī)標(biāo)定、姿態(tài)識別、臉譜識別和三維重建等高層函數(shù)。 Matla
13、b是功能較為強(qiáng)大的科學(xué)計(jì)算和分析平臺,它提供了圖像處理工具包,也提供了較為豐富的數(shù)學(xué)計(jì)算函數(shù),但在Matlab環(huán)境下的運(yùn)行速度令人擔(dān)憂。雖然Matlab可以通過編譯器將m文件轉(zhuǎn)化為C代碼。但是轉(zhuǎn)換后的C代碼的執(zhí)行效率和可讀性存在較大問題。 除Matlab和LEADTOOLS。大部分軟件包不支持網(wǎng)絡(luò)服務(wù)器結(jié)構(gòu)的應(yīng)用程序的開發(fā);Matlab的網(wǎng)絡(luò)接口機(jī)制較為復(fù)雜,且同樣存在運(yùn)行效率的問題。 絕大多數(shù)軟件包不支持可嵌人性。 本文選取OpenCV進(jìn)行視頻序列圖像運(yùn)動分析,與上述軟件包相比,OpenCV的優(yōu)勢在于:純C代碼,源代碼開放。開放源代碼(open source)是信息技術(shù)界從20世
14、紀(jì)80年代開始興起的新名詞。源代碼是由軟件命令電腦執(zhí)行指定動作的程序語句,是一個軟件的核心所在,最著名的開源軟件當(dāng)屬芬蘭人林努斯托爾瓦茲提出的Linux。開源軟件之所以能夠風(fēng)靡世界,首先是其開源的免費(fèi)特性;此外,由于有全球眾多編程者的參與,開源軟件一般具有簡約精煉、資源占用少、功能集中和安全性好的優(yōu)點(diǎn)。不同于以往各種由業(yè)余愛好者憑興趣或是根據(jù)自己的項(xiàng)目要求而制作的源代碼開發(fā)包,OpenCV是由Intel資助的開源項(xiàng)目,其代碼規(guī)范而且具備良好的后繼開發(fā)和改進(jìn)能力。 豐富的函數(shù)功能,強(qiáng)大的圖像和矩陣運(yùn)算能力: OpenCV提供了數(shù)組、序列、矩陣、樹等基本結(jié)構(gòu),也包含了差分方程求解、傅立葉分析、
15、積分運(yùn)算、特殊函數(shù)等眾多高級數(shù)學(xué)計(jì)算函數(shù),以及各種圖像處理操作和目標(biāo)跟蹤、攝像機(jī)校準(zhǔn)、三維重建等高級視覺函數(shù)。 平臺無關(guān)性:基于OpenCV開發(fā)的程序可以直接在Windows、Unix、Linux、MacOSX、solaris、HP等平臺之間相互移植,無需對代碼進(jìn)行任何修改。 程序運(yùn)行的實(shí)時性:完成調(diào)試的代碼可以編譯連接成二進(jìn)制可執(zhí)行文件。從而得到較快的運(yùn)算速度,滿足實(shí)時性運(yùn)算的要求。 方便靈活的用戶接口。OpenCV作為一個開放的計(jì)算機(jī)視覺函數(shù)庫在使用上必然沒有Matlab那樣解釋執(zhí)行來得方便,而softhitegration將CH和OpenCV綁定起來推出的CH OpenCV,
16、解決了這一使用上的瓶頸。CH本身是一種嵌入式跨平臺的C/C一腳本解釋器,有自己的外殼程序,可以應(yīng)用于2D/3D繪圖、數(shù)值計(jì)算、分布式網(wǎng)絡(luò)運(yùn)算。CH OpenCV具有以下特性: 1.交互性:如同Matlab,CH OpenCV是交互式的。代碼不需要編譯就能解釋執(zhí)行。適合于快速建模和應(yīng)用程序開發(fā)。同時為游動代碼的計(jì)算機(jī)視覺提供了可能。 2.強(qiáng)大的擴(kuò)展功能:通過Ch SDK??梢允宫F(xiàn)在所有的C/C++動態(tài)庫、靜態(tài)庫和模塊成為Ch函數(shù)庫的一部分.因此Ch函數(shù)庫的擴(kuò)充潛能幾乎是無限的。先前提及的所有計(jì)算機(jī)視覺軟件包都能成為CH OpenCV補(bǔ)充部分。 3.Web實(shí)現(xiàn)性:類似于ASP和Java服
17、務(wù)程序。Ch提供了CGI通用網(wǎng)關(guān)接口。為CH OpenCV提供了基于web的計(jì)算機(jī)視覺服務(wù)器的開發(fā)手段。 4.可嵌入性:與C/C++一編譯器不同。Ch能嵌在C/C++應(yīng)用程序和硬件的機(jī)器腳本中。它為用戶減輕了開發(fā)維護(hù)應(yīng)用程序龐大機(jī)器代碼的沉重負(fù)擔(dān)。 統(tǒng)一的結(jié)構(gòu)和功能定義,基于Intel處理器指令集開發(fā)的優(yōu)化代碼。 可見,作為一個基本的圖像處理、計(jì)算機(jī)視覺和模式識別的開源項(xiàng)目OpenCV可以直接應(yīng)用于很多領(lǐng)域,作為二次開發(fā)的理想工具。本設(shè)計(jì)用OpenCV的版本為OpenCV1.0。 2.2 OpenCV環(huán)境介紹 Visual C++是Microsoft 公司開發(fā)的基于Windo
18、ws操作系統(tǒng)的編程工具。像其他的可視化開發(fā)環(huán)境一樣,VC++集程序的代碼編輯、編譯、鏈接和調(diào)試于一體,給編程人員提供了一個完整而又方便的開發(fā)環(huán)境,和許多有效的輔助開發(fā)工具。同時,因?yàn)閂C++是微軟的產(chǎn)品,用它來編寫Windows程序有強(qiáng)大的程序接口和豐富的開發(fā)資源的支持,加之VC++嚴(yán)謹(jǐn)?shù)膬?nèi)存管理,在堆棧上良好的分配處理,生成代碼的體積小,穩(wěn)定性高的優(yōu)點(diǎn),Visual C++就成為目前主流開發(fā)工具。由于OpenCV 的代碼是用C和C++所編寫而且完全開放,因此可以在Microsoft Visual Studio 環(huán)境下很方便地使用OpenCV所提供的庫來進(jìn)行圖像處理。在介紹OpenCV編程環(huán)境
19、之前,首先要來了解如何安裝OpenCV和基本的編程軟件,下面的說明假設(shè)已經(jīng)安裝完成Microsoft Visual C++ 6.0. 2.2.1 OpenCV的基本結(jié)構(gòu)紛飛 OpenCV主體分為五個模塊,其中四個模塊如圖2-1所示。OpenCV的CV模塊包含基本的圖像處理函數(shù)和高級的計(jì)算機(jī)視覺算法。ML是機(jī)器學(xué)習(xí)庫,包含一些基于統(tǒng)計(jì)的分類和聚類工具。HighGUI包含圖像和視頻輸入/輸出的函數(shù)。CXCore包含OpenCV的一些基本數(shù)據(jù)結(jié)構(gòu)和相關(guān)函數(shù)。 MLL 統(tǒng)計(jì)分類器 CV 圖像處理和視覺算法 HighGUI GUI 圖像和視頻輸入/輸出 CXC
20、ORE 基本結(jié)構(gòu)和算法、XML支持、繪圖函數(shù) 圖2.1 OpenCV的基本結(jié)構(gòu) 圖2-1中并沒有包含CvAux模塊,該模塊中一般存放一些即將被淘汰的算法和函數(shù)(如基于嵌入式隱馬爾可夫模型的人臉識別算法),同時還有一些新出現(xiàn)的實(shí)驗(yàn)性的算法和函數(shù)(如背景和前景的分割)。 2.2.2 OpenCV的特征 OpenCV的主要特征有以下幾個方面: (1)圖像數(shù)據(jù)的操作 ( 分配、釋放、復(fù)制、設(shè)置和轉(zhuǎn)換)。 (2)圖像是視頻的輸入輸出I/O (文件與攝像頭的輸入、圖像和視頻文件輸出)。 (3)矩陣和向量的操作以及線性代數(shù)的算法程序(矩陣積、解方程、特征值以及奇異值等)。 (4
21、)各種動態(tài)數(shù)據(jù)結(jié)構(gòu)(列表、隊(duì)列、集合、樹、圖等)。 (5)基本的數(shù)字圖像處理(濾波、邊緣檢測、角點(diǎn)檢測、采樣與差值、色彩轉(zhuǎn)換、形態(tài)操作、直方圖、圖像金字塔等)。 (6)結(jié)構(gòu)分析(連接部件、輪廓處理、距離變換、各自距計(jì)算、模板匹配、Hough變換、多邊形逼近、直線擬合、橢圓擬合、Delaunay 三角劃分等)。 (7)攝像頭定標(biāo)(發(fā)現(xiàn)與跟蹤定標(biāo)模式、定標(biāo)、基本矩陣估計(jì)、齊次矩陣估計(jì)、立體對應(yīng))。 (8)運(yùn)動分析(光流、運(yùn)動分割、跟蹤)。 (9)目標(biāo)識別(特征法、隱馬爾可夫模型:HMM)。 (10)基本的GUI (圖像與視頻顯示、鍵盤和鼠標(biāo)事件處理、滾動條)。 (11)圖像
22、標(biāo)注(線、二次曲線、多邊形、畫文字) 2.3安裝OpenCV 本節(jié)介紹OpenCV的安裝與環(huán)境配置。 2.3.1安裝OpenCV1.0 要將OpenCV安裝到C:\Program Files\OpenCV。在安裝時選擇"將\OpenCV\bin加入系統(tǒng)變量"(Add\OpenCV\bin to the systerm PATH)。 圖2.2 安裝界面 圖2.3 選擇安裝目錄 圖2.4 選擇附加任務(wù) 圖2.5 安裝進(jìn)度 2.3.2配置Windows環(huán)境變量 檢查C:\Program Files\OpenCV\bin是否已經(jīng)被加入到環(huán)境變
23、量PATH,如果沒有,請加入。加入后需要注銷當(dāng)前Windows用戶(或重啟)后重新登陸才生效。(可以在任務(wù)管理器里重啟explorer.exe) 圖2.6 系統(tǒng)屬性 圖2.7 查看環(huán)境變量 2.3.3配置VC++6.0環(huán)境與全局設(shè)置 在菜單Tools->Options->Directories:先設(shè)置lib路徑,選擇Library files,在下方填入路徑: C:\Program Files\OpenCV\lib 然后選擇include files,在下方填入路徑: C:\Program Files\OpenCV\cxcore\include C:\P
24、rogram Files\OpenCV\cv\include C:\Program Files\OpenCV\cvaux\include C:\Program Files\OpenCV\ml\include C:\Program Files\OpenCV\otherlibs\highgui C:\Program Files\OpenCV\otherlibs\cvcam\include 然后選擇source files,在下方填入路徑: C:\Program Files\OpenCV\cv\src C:\Program Files\OpenCV\cxcore\src C:\Pr
25、ogram Files\OpenCV\cvaux\src C:\Program Files\OpenCV\otherlibs\highgui C:\Program Files\OpenCV\otherlibs\cvcam\src\windows 最后點(diǎn)擊“ok”,完成設(shè)置。 圖2.8 全局設(shè)置 2.3.4項(xiàng)目設(shè)置(這項(xiàng)配置在每次新建工程時都要配置) 每創(chuàng)建一個將要使用OpenCV的VC Project,都需要給它指定需要的lib。菜單:Project->Settings,然后將Setting for選為All Configurations,然后選擇右邊的link標(biāo)簽,在Obj
26、ect/library modules附加上(cxcore.lib cv.lib ml.lib cvaux.lib highgui.lib cvcam.lib)這些文件。 圖2.9 項(xiàng)目設(shè)置 3.OpenCV的體系結(jié)構(gòu) OpenCV本身就具有簡單方便的特點(diǎn),其中的大部分類和庫函數(shù)在實(shí)際應(yīng)用中都有著特定的背景和現(xiàn)實(shí)意義,因此整個庫的體系結(jié)構(gòu)顯得十分簡單明了。 3.1 OpenCV中的常用數(shù)據(jù)結(jié)構(gòu)體系 OpenCV設(shè)計(jì)了一些基礎(chǔ)的數(shù)據(jù)類型和一些幫助數(shù)據(jù)類型,在運(yùn)用OpeCV函數(shù)庫進(jìn)行編程的過程中,常常會需要用到這些結(jié)構(gòu)類型,只有正真了解這些結(jié)構(gòu)才能夠很好地利用OpenCV函
27、數(shù)庫來解決問題。 基礎(chǔ)的數(shù)據(jù)類型包括:圖像類的IplImage,矩陣類的CvMat,可變集合類的CvSeq、CvSet、CvGraph以及用于多維柱狀圖的混合類CvHistogram。幫助數(shù)據(jù)類型包括:用于表示二維點(diǎn)坐標(biāo)的CvPoint,用于表示圖像寬和高的CvSize,用于表示迭代過程結(jié)束條件的CvTermCriteria,用于表示圖像轉(zhuǎn)換內(nèi)核的IplConvKernel和用于表示空間力矩的CvMoments。 下面對CvSize和和IplImage兩個比較常用的簡單結(jié)構(gòu)進(jìn)行介紹。 1. CvSize結(jié)構(gòu) CvSize結(jié)構(gòu)用來表示矩形尺寸的結(jié)構(gòu),結(jié)構(gòu)體中分別定義了矩形的寬高
28、和高度。 定義如下: Typedef struct Cvsize {int width; /*矩形寬度,單位為像素*/ int height; /*矩形高度,單位為像素*/ }CvSize; 2. Iplmage 結(jié)構(gòu) 通常情況下,使用DIB格式來處理圖像,而OpenCV庫則是使用“IplImage”結(jié)構(gòu)體來創(chuàng)造和處理圖像。由于OpenCV主要針對的是計(jì)算機(jī)視覺方面的處理,因此在函數(shù)庫中,最重要的結(jié)構(gòu)體就是IplImage結(jié)構(gòu)。IplImage結(jié)構(gòu)來源于Inter的另外一個函數(shù)庫IPL,該函數(shù)庫主要是針對圖像處理
29、。使用這種格式的優(yōu)點(diǎn)是可以比DIB格式表示更多的圖像性質(zhì),而且可以很方便地存取圖像中的像素值,IplImage結(jié)構(gòu)的具體定義如下: Typedef struct IplImage {int nSize; /*IplImage大小*/ int ID; /*版本(=0)*/ int nChannels; /*大多數(shù)opencv函數(shù)支持1~4個信道*/ int depth; /*像素的位深度*/ int dataOrder; /*0:交叉存取顏色信道。
30、 1:分開的顏色信道。只有cvCreateImage可以創(chuàng)建交叉存取圖像*/ int origin; /*0:頂—左結(jié)構(gòu),1:底—左結(jié)構(gòu)*/ int width; /* 圖像寬像素 */ int heighet; /*圖像高像素*/ struct_IplROI *roi; /*圖像感興趣區(qū)域*/ int imageSize; /*圖像數(shù)據(jù)大小*/ int widthStep; /*排列的圖像大小,以字節(jié)為單位*/ } 3.2 OpenCV中常用類體系 OpenCV1.0版本
31、,包含以下五個部分. (1)CxCore:一些基本函數(shù)(各種數(shù)據(jù)類型的基本類型的基本運(yùn)算等)。 (2)CV:圖像處理和計(jì)算機(jī)視覺功能(圖像處理、結(jié)構(gòu)分析、運(yùn)動分析、物體跟蹤、模式識別、攝像機(jī)定標(biāo))。 (3)CvAux:一些實(shí)驗(yàn)性的函數(shù)。 (4)HighGUI:用戶交互部分(GUI,圖像視頻I/O、系統(tǒng)調(diào)用函數(shù))。 (5)CvCam:linux版本中已經(jīng)拋棄,Windows版本中將directx支持加入HighGUI后,CVCam將徹底去掉。 3.3 OpenCV處理圖像常用的函數(shù) 下面介紹一下OpenCV中常用的一些函數(shù),下面就這些函數(shù)分別做說明。 1.cv
32、LoadImage 從文件中讀取圖像 IplImage* cvLoadImage(const char* filename, int flags=CV_LOAD_IMAGE_COLOR ); filename :要被讀入的文件的文件名。 flags :指定讀入圖像的顏色和深度; 指定的顏色可以將輸入的圖片轉(zhuǎn)為3信道(CV_LOAD_IMAGE_COLOR), 單信道 (CV_LOAD_IMAGE_GRAYSCALE), 或者保持不變(CV_LOAD_IMAGE_ANYCOLOR)。 深度指定輸入的圖像是否轉(zhuǎn)為每個顏色信道每象素8位,(OpenCV的早期版本一樣),或者同輸入的圖像一
33、樣保持不變。 選中CV_LOAD_IMAGE_ANYDEPTH,則輸入圖像格式可以為8位無符號,16位無符號,32位有符號或者32位浮點(diǎn)型。 如果輸入有沖突的標(biāo)志,將采用較小的數(shù)字值。比如CV_LOAD_IMAGE_COLOR CV_LOAD_IMAGE_ANYCOLOR 將載入3信道圖。CV_LOAD_IMAGE_ANYCOLOR和CV_LOAD_IMAGE_UNCHANGED是等值的。但是,CV_LOAD_IMAGE_ANYCOLOR有著可以和CV_LOAD_IMAGE_ANYDEPTH同時使用的優(yōu)點(diǎn),所以CV_LOAD_IMAGE_UNCHANGED不再使用了。 如果想要載入最真實(shí)
34、的圖像,選擇CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR。 函數(shù)cvLoadImage從指定文件讀入圖像,返回讀入圖像的指針。目前支持如下文件格式: Windows位圖文件 - BMP, DIB; JPEG文件 - JPEG, JPG, JPE; 便攜式網(wǎng)絡(luò)圖片 - PNG; 便攜式圖像格式 - PBM,PGM,PPM; Sun rasters - SR,RAS; TIFF文件 - TIFF,TIF; OpenEXR HDR 圖片 - EXR; JPEG 2000 圖片- jp2。 2.cvNamedWin
35、dow 創(chuàng)建窗口 int cvNamedWindow( const char* name, int flags=CV_WINDOW_AUTOSIZE ); name :窗口的名字,它被用來區(qū)分不同的窗口,并被顯示為窗口標(biāo)題。 flags :窗口屬性標(biāo)志。目前唯一支持的標(biāo)志是CV_WINDOW_AUTOSIZE。當(dāng)這個標(biāo)志被設(shè)置后,用戶不能手動改變窗口大小,窗口大小會自動調(diào)整以適合被顯示圖像(參考cvShowImage)。 函數(shù)cvNamedWindow創(chuàng)建一個可以放置圖像和trackbar的窗口。被創(chuàng)建的窗口可以通過它們的名字被引用。 如果已經(jīng)存在這個名字的窗口,這個函數(shù)將不做
36、任何事情。 3.cvShowImage 在指定窗口中顯示圖像 void cvShowImage( const char* name, const CvArr* image ); name :窗口的名字。 image :被顯示的圖像。 函數(shù)cvShowImage 在指定窗口中顯示圖像。如果窗口創(chuàng)建的時候被設(shè)定標(biāo)志CV_WINDOW_AUTOSIZE,那么圖像將以原始尺寸顯示;否則,圖像將被伸縮以適合窗口大小。 4.cvWaitKey 等待按鍵事件 int cvWaitKey( int delay=0 ); delay :延遲的毫秒數(shù)。 函數(shù)cvWaitKe
37、y無限制的等待按鍵事件(delay<=0時);或者延遲"delay"毫秒。返回值為被按鍵的值,如果超過指定時間則返回-1。 注釋:這個函數(shù)是HighGUI中唯一能夠獲取和操作事件的函數(shù),所以在一般的事件處理中,它需要周期地被調(diào)用,除非HighGUI被用在某些能夠處理事件的環(huán)境中。 注:比如在MFC環(huán)境下,這個函數(shù)不起作用。 5.cvSaveImage 保存圖像到文件 int cvSaveImage( const char* filename, const CvArr* image ); filename :文件名(注明格式)。 image :要保存的圖像。 函數(shù)c
38、vSaveImage保存圖像到指定文件。圖像格式的的選擇依賴于filename的擴(kuò)展名,請參考cvLoadImage。只有8位單通道或者3通道(通道順序?yàn)锽GR )可以使用這個函數(shù)保存。如果格式,深度或者通道不符合要求,請先用cvCvtScale 和cvCvtColor轉(zhuǎn)換;或者使用通用的cvSave保存圖像為XML或者YAML格式。 6.cvDestroyWindow 銷毀一個窗口 void cvDestroyWindow( const char* name ); name :要被銷毀的窗口的名字。 函數(shù)cvDestroyWindow銷毀指定名字的窗口。如果沒有指定名字的窗
39、口則函數(shù)不做任何事情。 返回值:無。 7.cvReleaseImage:圖像銷毀函數(shù) 語法:void cvReleaseImage 銷毀已定義的IplImage指針變量,釋放占有的內(nèi)存空間。 返回值:無。 4.視頻處理 在OpenCV的CVcam庫中封裝了很多針對視頻流的處理函數(shù)。本章主要介紹使用HighGUI對視屏進(jìn)行讀寫處理以及使用CvCam對攝像頭和視頻流進(jìn)行處理。使用CvCam庫時,要設(shè)置預(yù)編譯的頭文件目錄*\OpenCV\otherlibs\cvcam\include,并在工程設(shè)置加入鏈接庫cvcam.lib. 4.1對視頻進(jìn)行讀寫處理 此小節(jié)介紹視
40、頻的讀寫與保存,還有如何讀取硬盤中的AVI文件。 4.1.1獲取攝像頭并顯示視頻圖像 (1)獲取攝像頭之前先來熟悉以下OpenCV中視頻獲取的數(shù)據(jù)結(jié)構(gòu)的管理方式。 1.CVCapture:視頻獲取結(jié)構(gòu) 說明:OpenCV中的視頻獲取結(jié)構(gòu)。結(jié)構(gòu)CVCapture沒有公共接口,他只能被用來作視頻獲取函數(shù)中使用的一個參數(shù)。 2.cvCreateFileCapture:初始化文件中獲取視頻 語法:CvCapture * cvCreateFileCapture(const char*filename); Filename : const char* 使用視頻文件名;
41、 說明:該函數(shù)給指定文件的視頻流分配和初始化CvCapture。 返回值:分配的CvCapture 3.cvCaptureFromCAM:從攝像頭中獲取視頻 語法:CvCapture * cvCaptureFromCAM(int index); Index : int index指的是攝像頭的索引,當(dāng)只有一個攝像頭時,index設(shè)為-1。 4.cvQueryFrame:從攝像頭或者文件中抓取并返回一幀 語法: IplImage * cvQueryFrame(CvCapture * capture); Capture : CvCapture * 視頻獲取結(jié)構(gòu);
42、
說明:函數(shù)cvQueryFrame從攝像頭或者文件中抓取一幀,然后解壓并返回這一幀。返回的圖像不可以被用戶釋放或者修改。
返回值:獲取的IplImage指針。
(2)顯示視頻圖像的過程和實(shí)現(xiàn)
在文件中創(chuàng)建窗口,然后將獲取的視頻流逐幀的顯示在窗口中就形成了視頻。
對視頻文件的處理,可用如下程序。獲得視頻圖像的效果如圖4.1。
#include
43、//聲明IplImage指針 IplImage* pFrame = NULL; CvCapture* capture = NULL; //創(chuàng)建窗口 cvNamedWindow("video", 1); //使窗口有序排列 cvMoveWindow("video", 30, 0); //打開攝像頭 capture = cvCaptureFromCAM(0); //逐幀讀取視頻 while(pFrame = cvQueryFrame( capture )) { cvShowImage("video", pFrame); //顯示圖像 //如果有按鍵事
44、件,則跳出循環(huán) if( cvWaitKey(2) >= 0 ) break; } //銷毀窗口 cvDestroyWindow("video"); cvReleaseCapture(&capture); return 0; } 圖4.1 獲取顯示的圖像 4.1.2對獲取的視頻進(jìn)行保存 用到的數(shù)據(jù)結(jié)構(gòu)有如下: 1. cvCreateVideoWriter 創(chuàng)建視頻文件寫入器 typedef struct CvVideoWriter CvVideoWriter; CvVideoWriter* cvCreateVideoWriter(
45、const char* filename, int fourcc, double fps, CvSize frame_size, int is_color=1 ); filename :輸出視頻文件名。 fourcc :四個字符用來表示壓縮幀的codec 例如,CV_FOURCC(P,I,M,1)是MPEG-1 codec, CV_FOURCC(M,J,P,G)是motion-jpeg codec等。 在Win32下,如果傳入?yún)?shù)-1,可以從一個對話框中選擇壓縮方法和壓縮參數(shù)。 fps :被創(chuàng)建視頻流的幀率。 frame_size :視頻流的大小。 is_color :如果非
46、零,編碼器將希望得到彩色幀并進(jìn)行編碼;否則,是灰度幀(只有在Windows下支持這個標(biāo)志)。 函數(shù)cvCreateVideoWriter創(chuàng)建視頻寫入器結(jié)構(gòu)。 2. cvWriteFrame 寫入一幀到一個視頻文件中 int cvWriteFrame( CvVideoWriter* writer, const IplImage* image ); writer :視頻寫入器結(jié)構(gòu)。 image :被寫入的幀。 函數(shù)cvWriteFrame寫入/附加到視頻文件一幀。 4.1.3讀取AVI視頻 用到的數(shù)據(jù)結(jié)構(gòu)有如下: 1. cvCreateFileCapture 初始化從
47、文件中獲取視頻 CvCapture* cvCreateFileCapture( const char* filename ); filename :視頻文件名。 函數(shù)cvCreateFileCapture給指定文件中的視頻流分配和初始化CvCapture結(jié)構(gòu)。 當(dāng)分配的結(jié)構(gòu)不再使用的時候,它應(yīng)該使用cvReleaseCapture函數(shù)釋放掉。(成功從文件中獲取視頻之后播放視頻的操作和從攝像頭捕獲視頻流后的操作是一樣的,用cvQueryFrame()和cvShowImage()顯示出視頻即可。) 4.2小結(jié) 在設(shè)計(jì)中對獲取的視頻進(jìn)行保存的函數(shù)cvCreateVideoWriter(
48、)中的用四個字符來表示壓縮幀的codec的fourcc變量,傳入的參數(shù)用的是-1,在運(yùn)行后的對話框中選擇壓縮方法和壓縮參數(shù),否則無法正確的保存視頻文件;要想保存的視頻文件可以播放還要安裝divx codec控件。 要讀取硬盤中的AVI文件要安裝K-Lite_Codec_Pack_710_Mega,此包是一套Video codec解碼器的組合,提供了Video For Windows的接口,而OpenCV打開視頻文件就是用的此接口。 5.運(yùn)動目標(biāo)監(jiān)控系統(tǒng)的研究與實(shí)現(xiàn) 視頻序列中運(yùn)動目標(biāo)的識別是計(jì)算機(jī)視覺和圖像編碼研究的一個重要課題,在計(jì)算機(jī)導(dǎo)航,智能監(jiān)控系統(tǒng),交通檢測,醫(yī)學(xué)圖像處理以及視頻
49、圖像壓縮和傳輸?shù)阮I(lǐng)域都有廣泛的應(yīng)用。 本節(jié)使用Microsoft Visual C++6.0結(jié)合OpenCV1.0共同實(shí)現(xiàn)了一個簡單的運(yùn)動目標(biāo)監(jiān)控系統(tǒng)。由于本文主要研究的是運(yùn)動目標(biāo)的檢測的效果,實(shí)驗(yàn)的樣本都是攝像頭在正常情況下的圖像的變化,沒有考慮監(jiān)控中出現(xiàn)的各種特殊的情形(如攝像頭晃動,光線突然變化等),因此目前開發(fā)的運(yùn)動目標(biāo)識別系統(tǒng)只能應(yīng)用于簡單的監(jiān)控場所,實(shí)現(xiàn)對一定區(qū)域的簡單監(jiān)控運(yùn)動檢測。如監(jiān)視的某個區(qū)域不允許有物體進(jìn)入,當(dāng)有東西進(jìn)入這個區(qū)域時系統(tǒng)就能夠檢測出有物體的出現(xiàn),并記錄下此時的圖像,并能夠回放監(jiān)控的錄像。 5.1運(yùn)動目標(biāo)監(jiān)控系統(tǒng) 運(yùn)動目標(biāo)監(jiān)控系統(tǒng)是將視頻圖像中變化的部分
50、作檢測,通過判斷圖像是否變化,識別出該區(qū)域是否有物體闖入。因此整個監(jiān)控系統(tǒng)主要包括視頻獲取、背景生成、保存錄像、圖像變化檢測等幾個部分。 本系統(tǒng)中的視頻圖像是來自攝像頭實(shí)時采集的圖像序列。 視頻捕獲 獲取圖像序列 獲取的幀數(shù)n是否小于10 更新背景 記錄變化的圖像 寫入視頻 前景圖是否有變化 是否按鍵跳出循環(huán) 是否已記錄10次 還原n值 是否回放寫入的視頻 回放寫入的視頻 結(jié)束 是 否 否 是
51、 是 否 否 是 否 是 圖5.1 運(yùn)動目標(biāo)監(jiān)控系統(tǒng)工作流程圖 如圖5.1所示,為本運(yùn)動目標(biāo)監(jiān)控系統(tǒng)的工作流程圖。系統(tǒng)的視頻捕獲器不停的將視頻信息輸入,當(dāng)緩存視頻幀數(shù)目達(dá)到一定數(shù)量(n=10)時系統(tǒng)就會對捕獲的一系列視頻幀進(jìn)行加權(quán)處理。為了獲取是否有運(yùn)動物體,首先需要產(chǎn)生視頻序列的背景,同時為了減少系統(tǒng)的運(yùn)行時間,考慮到監(jiān)控場所的背景一般不會很快變化,在系統(tǒng)中緩存了一個背景圖像,這個背景圖像也設(shè)置了一個計(jì)時器,若發(fā)現(xiàn)背景圖像已經(jīng)生成了很長的時間(如1000幀)或已陳舊(如前景提取的前景圖像與以前的不同但是時間過長),則再取10幀
52、的圖像使用背景更新算法來更新背景。有了背景之后,就可以運(yùn)用圖像差的方法來提取前景圖像。若發(fā)現(xiàn)有運(yùn)動物體進(jìn)入該區(qū)域,則前景圖像就會有變化,則記錄此時的圖像,若沒有過一會則重新開始。 5.2基于背景建模的圖像處理 本小節(jié)介紹背景的生成算法和圖像幀的處理方法。 5.2.1背景生成算法 本文處理的圖像是靜止背景序列,這種序列可以用背景相減法得到是否有前景圖像,但這需要當(dāng)前圖像對應(yīng)的背景圖像,因此就要進(jìn)行背景生成。同時場景中的光照等因素是在不斷變化的,為了適應(yīng)這種變化,背景需要有自適應(yīng)能力,因此對得到的背景還要進(jìn)行更新,以消除非目標(biāo)變化的影響。下面將介紹幾種常用的背景生成和更新方法,分析其
53、優(yōu)缺點(diǎn),并在其原有方法的基礎(chǔ)上提出了分組加權(quán)更新法,最后進(jìn)行了實(shí)驗(yàn)效果比較。 1. 平均圖像法 平均圖像法是一個經(jīng)典的自適應(yīng)背景生成和更新方法,它是對最近一段時間內(nèi)的圖像求平均,生成一個除運(yùn)動區(qū)域外與當(dāng)前圖像相似的背景圖像。假設(shè)圖像序列為 {Ii|i=1,2,…n},背景圖像Bkgn用公式可表示為 Bkgn=(I1+I2+…+In)/n n=1,2,3… (5.1) 平均圖像法雖然對物體連續(xù)運(yùn)動、大部分時間背景可見的圖像序列是有效的,但是在有較多物體運(yùn)動和物體作慢速運(yùn)動的情況下效果并不好,這樣會使背景中殘留較多的運(yùn)動目標(biāo)(前景中的
54、目標(biāo)被歸并到了背景中,成為背景的一部分),如果用背景差分的方法檢測運(yùn)動,殘留在背景中的先前的目標(biāo)將出現(xiàn)在差分圖像中,被錯誤地當(dāng)作一個新目標(biāo),影響進(jìn)一步處理。該算法生成背景圖像的效果如5.2(b)圖所示。 2. 加權(quán)更新法 加權(quán)更新法是對平均圖像法的改進(jìn),它是將得到的當(dāng)前圖像用加權(quán)的方法加入到背景圖像中,產(chǎn)生了加權(quán)更新背景。假設(shè)圖像序列為{Ii|i=1,2,…n} , 初始背景為 Bkg0=(I1+I2+…+In)/n n=1,2,3… (5.2) 則一般背景為 Bkgk+1=rBkgk+(1-r)In+k+1 k=0,1,2,… (
55、5.3) 其中,n是初始背景中的幀數(shù)目。r是更新因子,表示當(dāng)前背景圖像在新背景中所占的比例,且r的取值在0到1之間。 對于這個方法,如果r的取值在0附近,由于初始背景產(chǎn)生后每來一幀圖像算法更新一次背景,因此背景能迅速適應(yīng)當(dāng)前圖像的變化。極端的情況,當(dāng)r=0時,當(dāng)前背景即為前一幅圖像。如果r的取值在1附近,背景圖像被更新的比例不大,不能適應(yīng)當(dāng)前圖像的變化。極端的情況,當(dāng)r=1時背景圖像不被更新。如果r取在0.5附近,背景圖像被較快地更新,但同時也記錄下了目標(biāo)運(yùn)動的軌跡,即前幾幅圖像中的運(yùn)動也出現(xiàn)在當(dāng)前背景中,差分時當(dāng)前圖像和前幾幅圖像中的運(yùn)動被一起得到(如5.2(c)圖所示)。 對于這種方法,
56、靜止或慢速運(yùn)動的目標(biāo)會成為背景的一部分,也影響進(jìn)一步的處理。但由于這種方法引入了加權(quán)的思想,背景中的已有圖像所占比例會隨著背景的更新而越來越小,即舊的圖像在不斷地被更新掉,新的圖像不斷地進(jìn)入,背景圖像保持相對較新。如果參數(shù)選的合適,該方法對光照、場景的變化有較好的自適應(yīng)能力。 3. 分組加權(quán)更新法 在初始背景生成后,加權(quán)更新法是對每個當(dāng)前圖像幀都進(jìn)行一次背景更新,但是一旦當(dāng)前圖像有干擾,干擾便會進(jìn)入背景中。另外,對用于圖像差分的背景圖像來說,背景圖像和當(dāng)前圖像要有一個合理的間隔,如果兩者間隔太短,圖像的內(nèi)容變化太小,則可能檢測不到目標(biāo)的運(yùn)動;如果兩者間隔太大,背景就不能實(shí)時,檢測
57、到的目標(biāo)不可靠。因此本文提出了分組加權(quán)更新法。這種方法首先將圖像序列分組,對每組圖像經(jīng)過取平均后再更新背景,相對于加權(quán)平均法來說有一定的抗干擾能力。 假設(shè)圖像序列為 {Ii|i=1,2,…,N,N+1,N+2,…,2N,2N+1,…} ,N為每個分組中的圖像數(shù)目。定義第k組圖像的平均為 Avrk=(IkN+1+IkN+1+…+IkN+1)/N, k=0,1,2… (5.4) 則背景圖像為 Bkgj+1=rBkgj+(1-r)Avrj+1 j=0,1,2… (5.5) 其中,初始背景 Bkg0=(I1+I2+…+IN)/N=Avr0,r為更新因
58、子,0≤r≤1 (5.6) r控制著背景更新的速率,r=0時更新最快,背景的實(shí)時性最好;r=1時背景不更新。分組的大小N既控制背景更新的頻率,也控制了當(dāng)前圖像與當(dāng)前背景圖像的時間相隔。 分組更新法實(shí)現(xiàn)步驟如下: 先確定每組的圖像幀數(shù)N,然后進(jìn)行背景更新: step.1 累加最初的N幀圖像,取平均后作為初始背景。 step.2 重新累加最近的N幀圖像。 step.3 對得到的圖像取平均后按“(5.5)”對原背景進(jìn)行更新。 step.4 如不再需要背景,轉(zhuǎn)step.5,否則轉(zhuǎn)step.2。 step.5 結(jié)束。 對于該算法,靜止或緩慢運(yùn)動的目標(biāo)仍會出現(xiàn)在背景中,差分
59、時會誤認(rèn)為新的目標(biāo),影響進(jìn)一步的處理。但由于它仍具有加權(quán)的思想,舊的圖像在不斷的被更新掉,新的圖像在不斷的進(jìn)入,背景圖像相對較新,因此對光照,場景的變化有一定的自適應(yīng)能力。圖5.2(d)是這個方法對場景中運(yùn)動目標(biāo)由靜止而進(jìn)入背景到目標(biāo)離開的適應(yīng)過程。 圖5.2 原始圖像序列,3種背景生成算法生成的背景序列比較圖 圖5.2為背景生成實(shí)驗(yàn)效果圖,其中 (a)組圖像序列為原始視頻圖像序列中的部分圖像,其相應(yīng)的幀號分別為(從左到右,從上到下):37、54、84、132、162、286、316;(b)組圖像為使用平均圖像法生成的部分背景圖像,其中N=30; (c)組圖像為使用加權(quán)法生成的部分
60、背景圖像,其中N=30, r=0.8;(d)組圖像為使用分組加權(quán)法生成的部分背景圖像,其中N=30,r=0.5。 5.2.2對捕獲的圖像幀的處理 圖像序列的背景得到后,運(yùn)用圖像差運(yùn)算,如果有物體闖入該區(qū)域,那么在前景圖像中就可以看到圖像的變化并記錄此時的圖像,但此時的圖像存在諸多的干擾,其中噪聲是很大的一個不利因素。為了準(zhǔn)確提取出運(yùn)動物體,還要對該圖像進(jìn)行相關(guān)處理,具體包括:平滑圖像,轉(zhuǎn)換為灰度圖,去除噪聲,圖像二值化,圖像翻轉(zhuǎn)等處理,下面將做詳細(xì)介紹。 1. 差圖像 差圖像是一種經(jīng)典的運(yùn)動目標(biāo)檢測方法。因?yàn)檫\(yùn)動能夠?qū)е聢D像的變化,所以相鄰的兩幀或多幀圖像之間的關(guān)系,或當(dāng)前圖
61、像與背景圖像之間的關(guān)系,尤其是圖像差的關(guān)系,能較好地體現(xiàn)出運(yùn)動所帶來的變化。 設(shè)視頻圖像序列{Ii|i=1,2,…n}, 對應(yīng)的背景圖像為{Bkgi|i1,2,…n},那么當(dāng)前圖像和背景圖像之間的差分圖像為: Di=|Ii-Bkgi|=|f(x,y,ti,S)-Bkg(x,y,ti,S)| x,y∈[0,M-1] (5.7) 如圖5.4(1)所示,為當(dāng)前圖像5.4(a)與背景圖像5.4(b)做差所生成的結(jié)果圖像。 2. 灰度圖的轉(zhuǎn)換 當(dāng)前的幀減去背景圖像后,由于結(jié)果圖像的每個像素的三個分量R,G,B值不同,所以得到的結(jié)果仍為真彩色圖像。彩色圖像顏色眾多,不利于檢測運(yùn)動
62、物體。為了便于后面的二值化處理,需要將該位圖轉(zhuǎn)化為灰度圖?;叶葓D像沒有顏色上的差異,有的只是亮度上的不同,如圖5.4(2)所示。 將像素點(diǎn)的R,G,B三個分量用下面的公式做一下處理,然后將得到的數(shù)值再賦給R,G,B,這樣就使得一個像素點(diǎn)的三個分量值相等,從而實(shí)現(xiàn)了灰度圖的轉(zhuǎn)化: fgray(x,y,i)=f(x,y,i,R)0.299+ f(x,y,i,G)0.587+ f(x,y,i,B)0.114 (5.8) 該方程式中的f(x,y,i,R),f(x,y,i,G),f(x,y,i,B)分別代表源圖像中像素(x,y)的紅,綠,藍(lán)三種顏色的分量數(shù)值,i表示當(dāng)前圖像序號。 3.
63、噪聲的消除 在圖像的生成或傳輸過程中,由于種種原因會包含物理上的噪聲。圖像中的噪聲可定義為圖像中不希望有的部分,或者是圖像中不需要的部分。噪聲會造成圖像的退化,圖像的退化是指由場景得到的圖像沒有能完全的反映場景的真實(shí)內(nèi)容,產(chǎn)生了失真等問題。消除噪聲的方法較多,這里采用了中值濾波方法。 中值濾波是把局部區(qū)域中灰度的中央值(中值)作為輸出灰度值的,它的主要功能就是讓與周圍像素灰度值的差比較大的像素改取與周圍像素值相近的值,所以它對孤立的噪聲像素的消除能力很強(qiáng)。中值濾波既能消除噪聲又能保持圖像細(xì)節(jié),如圖5.4(3)為對圖5.4(2)運(yùn)用中值濾波后的結(jié)果圖。 4. 圖像二值化 在進(jìn)行了
64、灰度化處理后,圖像中的每一個像素只有一個值,即像素的灰度值,它的大小決定了該像素的明暗程度。為了更加醒目的顯示出運(yùn)動物體,還需要對已經(jīng)得到的灰度圖像做二值化處理,二值化處理后監(jiān)控人員就可以清晰的從圖中看出圖像是否有變化。 圖像的二值化就是把圖像中的像素根據(jù)一定的標(biāo)準(zhǔn)分成兩種顏色。在提取運(yùn)動物體目標(biāo)時,一般需要設(shè)置一個閾值,用于判定某像素是否處于運(yùn)動區(qū)域。為了分析圖像的特征,常常從圖像中分離出對象物,并為了分離圖像與背景而采用二值化處理。圖像的二值化可以根據(jù)下式的閾值處理來進(jìn)行: (5.9) 確定t的方法稱為閾值選擇。為了能夠得到一個合理的閾值,處理的過程中使用了迭代閾值的方法。迭代的
65、方法是基于逼近的思想,閾值可以由程序自動搜索而得到。 迭代閾值的求取步驟如下: 1)求出圖像的最大灰度值和最小灰度值,分別記為MAX和MIN,令初始閾值 T0=(MAX+MIN)/2 (5.10) 2)根據(jù)閾值Tk將圖像分割為前景和背景,分別求出兩者的平均灰度值Z0和ZB; 3)求出新閾值: Tk+1=(Z0+ZB)/2 (5.11) 4) 若Tk+1與Tk相等,則所得即為閾值;否則轉(zhuǎn)2),迭代計(jì)算。 如圖5.4(4)為圖5.4(3)的二值化圖像。 5.圖像的腐蝕
66、經(jīng)過上面處理后的圖像,會夾雜著一些干擾,表現(xiàn)為一些面積較小的離散的白色區(qū)域。如果采用濾波的方法比如中值濾波等也能處理噪聲,但考慮到這些方法對一些連通數(shù)目較多的離散點(diǎn)處理不佳,而且還有些圖像要多次使用濾波的方法才能去除圖像中的噪聲。為了便于統(tǒng)一處理,可以采用一種遞歸的算法來進(jìn)行像素點(diǎn)連通數(shù)目的判定。 與得到的運(yùn)動區(qū)域相比,離散區(qū)域噪聲點(diǎn)的一個最大特點(diǎn)就是連通的像素點(diǎn)個數(shù)比較少,由此可以通過統(tǒng)計(jì)連通點(diǎn)的個數(shù)來判斷這些區(qū)域是否要刪去。以當(dāng)前的像素點(diǎn)為中心,采用遞歸的方法,查看其周圍8個像素點(diǎn)的像素值。如果其中有像素值滿足的要求,則再以該點(diǎn)為中心,繼續(xù)查看該點(diǎn)周圍的像素。如此遞歸下去,直到查看的像素點(diǎn)周圍全部是黑點(diǎn)或像素點(diǎn)的個數(shù)已經(jīng)滿足統(tǒng)計(jì)要求,這時遞歸結(jié)束,從而判斷出該點(diǎn)是否是離散的,然后將離散點(diǎn)的像素值設(shè)置為0。如圖5.4(5)為對圖5.4(4)去除離散點(diǎn)后腐蝕的圖像。 6. 圖像的膨脹 雖然中值濾波在去除噪聲的同時可以較好的保護(hù)圖像的細(xì)節(jié),造成的模糊也比較少,但在以上的處理過程中有可能會對目標(biāo)區(qū)域造成一些破壞,諸如邊界的
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識競賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識測試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測工種技術(shù)比武題庫含解析
- 1 礦山應(yīng)急救援安全知識競賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案