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