當前位置:首頁 » 操作系統 » 圖片跟蹤演算法

圖片跟蹤演算法

發布時間: 2022-05-07 01:50:03

A. 計算機視覺領域主流的演算法和方向有哪些

人工智慧是當下很火熱的話題,其與大數據的完美結合應用於多個場景,極大的方便了人類的生活。而人工智慧又包含深度學習和機器學習兩方面的內容。深度學習又以計算機視覺和自然語言處理兩個方向發展的最好,最火熱。大家對於自然語言處理的接觸可能不是很多,但是說起計算機視覺,一定能夠馬上明白,因為我們每天接觸的刷臉支付等手段就會和計算機視覺掛鉤。可以說計算機視覺的應用最為廣泛。

目標跟蹤,就是在某種場景下跟蹤特定對象的過程,在無人駕駛領域中有很重要的應用。目前較為流行的目標跟蹤演算法是基於堆疊自動編碼器的DLT。語義分割,則是將圖像分為像素組,再進行標記和分類。目前的主流演算法都使用完全卷積網路的框架。實例分割,是指將不同類型的實例分類,比如用4種不同顏色來標記4隻貓。目前用於實例分割的主流演算法是Mask R-CNN。

B. 計算機視覺中,目前有哪些經典的目標跟蹤演算法

電腦的視覺,是用掃描儀完成的。
掃描儀是文字和圖片輸入的主要設備,相當於電腦的眼睛,能夠通過光電器件把光信號轉換為電信號,把電信號通過模數轉換器轉化為數字信號傳輸到電腦中,把大量的文字、圖片信息輸入到電腦中。
掃描儀的關鍵器件是電荷耦合器,採用三棱鏡分色光學系統,以三棱鏡來分離自然光為紅、綠、藍三原色來掃描圖形。
平板式掃描儀,文字和圖片固定在一個玻璃窗口中,掃描頭在文字或圖片下移動,接受來自文字或圖片的反射光,這些反射線由一個鏡面系統進行反射,通過凸透鏡把光聚焦到光敏二極體上面,把光變成電流,最後再轉換成數字信息存儲在電腦中,它能一次掃描,讀入一整頁的文字或圖片。
掃描儀的性能指標包括:光學解析度、色彩位數、掃描速度和幅面大小。光學解析度也叫水平解析度,單位為像素/英寸或點/英寸。色彩位數是掃描儀對圖片色彩的分辨能力。
希望我能幫助你解疑釋惑。

C. 在雙目視覺系統中有哪些比較好的跟蹤演算法

與普通的圖像模板匹配不同的是,立體匹配是通過在兩幅或多幅存在視點差異、幾何畸變、灰度畸變、雜訊干擾的圖像對之間進行的,不存在任何標准模板進行匹配。立體匹配方法一般包含以下三個問題:(1)基元的選擇,即選擇適當的圖像特徵如點、直線、相位等作為匹配基元;(2)匹配的准則,將關於物理世界的某些固有特徵表示為匹配所必須遵循的若干規則,使匹配結果能真實反映景物的本來面目;(3)演算法結構,通過利用適當的數學方法設計能正確匹配所選擇基元的穩定演算法。 根據匹配基元的不同,立體視覺匹配演算法目前主要分為三大類,即區域匹配、相位匹配和特徵匹配: 基於區域灰度的匹配演算法是把一幅圖像(基準圖)中某一點的灰度鄰域作為模板,在另一幅圖像(待匹配圖)中搜索具有相同(或相似)灰度值分布的對應點鄰域,從而實現兩幅圖像的匹配。這類演算法的性能取決於度量演算法及搜索策略的選擇。另外,也必須考慮匹配窗口大小、形式的選擇,大窗口對於景物中存在的遮擋或圖像不光滑的情況會更多的出現誤匹配,小窗口則不具有足夠的灰度變化信息,不同的窗口形式對匹配信息也會有不同的影響。因此應該合理選取匹配區域的大小和形式來達到較好的匹配結果。 相位匹配是近二十年發展起來的一種匹配演算法,相位作為匹配基元,即認為圖像對中的對應點局部相位是一致的。最常用的相位匹配演算法有相位相關法和相位差——頻率法,雖然該方法是一種性能穩定、具有較強的抗輻射抗透視畸變能力、簡單高效、能得到稠密視差圖的特徵匹配方法。但是,當局部結構存在的假設不成立時,相位匹配演算法因帶通輸出信號的幅度太低而失去有效性,也就是通常提到的相位奇點問題,在相位奇點附近,相位信息對位置和頻率的變化極為敏感,因此用這些像素所確定的相位差異來衡量匹配誤差將導致極不可靠的結果。此外,相位匹配演算法的收斂范圍與帶通濾波器的波長有關,通常要考慮相位卷繞,在用相位差進行視差計算時,由於所採用的相位只是原信號某一帶通條件下的相位,故視差估計只能限制在某一限定范圍之內,隨視差范圍的增大,其精確性會有所下降。 基於特徵的圖像匹配方法是目前最常用的方法之一,由於它能夠將對整個圖像進行的各種分析轉化為對圖像特徵(特徵點、特徵曲線等)的分析的優點,從而大大減小了圖像處理過程的計算量,對灰度變化、圖像變形、噪音污染以及景物遮擋等都有較好的適應能力。 基於特徵的匹配方法是為使匹配過程滿足一定的抗噪能力且減少歧義性問題而提出來的。與基於區域的匹配方法不同,基於特徵的匹配方法是有選擇地匹配能表示景物自身特性的特徵,通過更多地強調空間景物的結構信息來解決匹配歧義性問題。這類方法將匹配的搜索范圍限制在一系列稀疏的特徵上。利用特徵間的距離作為度量手段,具有最小距離的特徵對就是最相近的特徵對,也就是匹配對。特徵間的距離度量有最大最小距離、歐氏距離等。 特徵點匹配演算法嚴格意義上可以分成特徵提取、特徵匹配和消除不良匹配點三步。特徵匹配不直接依賴於灰度,具有較強的抗干擾性。該類方法首先從待匹配的圖像中提取特徵,用相似性度量和一些約束條件確定幾何變換,最後將該變換作用於待匹配圖像。匹配中常用的特徵基元有角點、邊緣、輪廓、直線、顏色、紋理等。同時,特徵匹配演算法也同樣地存在著一些不足,主要表現為: (l)特徵在圖像中的稀疏性決定了特徵匹配只能得到稀疏的視差場,要獲得密集的視差場必須通過使用插值的過程,插值過程通常較為復雜。 (2)特徵的提取和定位的准確與否直接影響特徵匹配結果的精確度。 (3)由於其應用場合的局限性,特徵匹配往往適用於具有特徵信息顯著的環境中,在缺少顯著主導特徵環境中該方法有很大困難。 總之,特徵匹配基元包含了演算法編程上的靈活性以及令人滿意的統計特性。演算法的許多約束條件均能清楚地應用於數據結構,而數據結構的規則性使得特徵匹配非常適用於硬體設計。例如,基於線段的特徵匹配演算法將場景模型描繪成相互聯結的邊緣線段,而不是區域匹配中的平面模型,因此能很好地處理一些幾何畸變問題,對對比度和明顯的光照變化等相對穩定。特徵匹配由於不直接依賴於灰度,計算量小,比基於區域的匹配演算法速度快的多。且由於邊緣特徵往往出現在視差不連續的區域,特徵匹配較易處理立體視覺匹配中的視差不連續問題。

D. 高效光線跟蹤的演算法有那些

淺析3D Max中的高級燈光技術

摘要:3D Max在3D製作軟體中渲染功能一直比較薄弱,使其只甘居Maya等3D製作軟體之下。為彌補這一缺陷,在5.0版中3D Max增加了高級燈光技術,擁有光能傳遞、光線追蹤器兩個全局照明系統,在渲染功能上有了非常顯著的改善。本文主要介紹新的光能傳遞演算法。

關鍵詞:渲染 全局照明 光能傳遞

3D MAX 的渲染功能一直比較薄弱,其效果遠不如其他軟體(例如Maya)那樣逼真,這在很大程度上是因為3D MAX默認的燈光技術不夠先進。

在3D MAX中經常使用「光線追蹤(Ray-Trace)」材質,與之相聯系的就是光線追蹤渲染演算法。這種演算法假設發出很多條光線,光線遇到物體時,被遮擋、反射或者折射,通過跟蹤這些光線,就可以得到場景的渲染效果。但是這種方法有一個嚴重的缺點,就是不能反映現實生活中光的很多特性。例如,在現實生活中,燈光照射到物體後,每個物體都會發射一部分光線,形成環境光,從而導致沒有被燈光直射的物體也能被照明,而不是完全出於黑暗狀態。又如,把一個紅色物體靠近白色的牆壁,那麼牆壁靠近物體的地方會顯出也帶有紅色。還有很多諸如此類的燈光效果,使用光線追蹤演算法都不能產生。

為了解決這些問題,人們發明了更先進的演算法來計算燈光的效果,這就是「光能傳遞(Radiosity)」演算法。這種演算法把光作為光量子看待(實際上更符合現代物理學),通過計算光量子的能量分布獲得渲染結果。這種方法能夠獲得最逼真的照明效果,因此,通常將光能傳遞演算法和光線追蹤演算法結合起來,以獲得最佳的效果。3D MAX5.0新增的高級光照功能則包含了兩個不同的系統:光能傳遞(radiosity)和光線追蹤器(light tracer)。它所得到的結果非常接近對真實事物的再現。

光線追蹤器比較通用,也容易使用,使用它不需要理解許多技術概念,任何模型和燈的類型都適用。光能傳遞相對較復雜,需要為這種處理方式專門准備模型和場景。燈必須是光度控制燈,材質也必須仔細設計。但光能傳遞在物理上是精確的,對於建築模型的精確設計是必須的,這一點非常重要,尤其當建模的目的是進行光照分析時。另外,光線追蹤器的結果與視點無關,而光能傳遞不是這樣的。光線追蹤器在每一幀都計算光照。光能傳遞只會計算一次,除非場景中的物體移動了或燈發生了變化,或者是從另一個不同的視點渲染場景時。基本原則是光線追蹤器更適用於有大量光照的室外場景、角色動畫和在空曠的場景中渲染物體。光能傳遞更適合於使用了聚光燈的室內場景和建築渲染。

使用光線追蹤器進行室內光照模擬時,為避免平坦表面上的噪波,可能需要相當高質量的設定和很長的渲染時間。光能傳遞則可以用更短的時間提供更好的效果。另一方面,光能傳遞用於有許多多邊形的角色模型時,需要額外的細化步驟、過濾,甚至是Regathering(重新聚合)。而光線追蹤器適用默認的設置一次渲染就可以得到更好的效果。

傳統的渲染引擎值考慮直接光照

不考慮反射光,然而,反射光是

一個場景的重要組成部分。 對相同的場景使用全局光照渲染,

上圖使用了光能傳遞(radiosity)

就可以得到一種真實的結果。

光能傳遞是在一個場景中重現從物體表面反射的自然光線,實現更加真實和物理上精確的照明結果。如圖所示。光能傳遞基於幾何學計算光從物體表面的反射。幾何面(三角形)成為光能傳遞進行計算的最小單位。大的表面可能需要被細分為小的三角形面以獲得更精確的結果。場景中三角形面的數目很重要。如果數目不夠結果會不精確,但如果太多時間又會太長。光能傳遞提供一種將大的三角形面自動細分的方法,同時也可以控制每個物體的細分和細化程度。光能傳遞依賴於材質和表面屬性以獲得物理上精確的結果。在場景中進行建模時必須牢記這一點。要使用光度控制燈,而且模型的幾何結構應盡可能准確。

1.單位

要獲得精確的結果,場景中作圖單位是一個基礎。如果單位是「英寸」,一個100×200×96單位的房間可以被一個相當於60瓦燈泡的光度控制燈正確照明,但如果單位是「米」,相同場景會變得非常暗。

2.光能傳遞的解決方案

光能傳遞是一個獨立於渲染的處理過程,一旦解決方案被計算出來,結果被保存在幾何體自己內部。對幾何體或光照作改變將使原解決方案無效。解決方案是為整個場景全局計算的,這意味著它與視點無關。一旦計算出來,就可以從任何方向觀察場景。當攝像機在一個固定場景中移動時,這將會節省時間。如果對幾何體或燈作了動畫,每一幀都必須計算光能傳遞。渲染菜單中的選項允許定義如何處理光能傳遞過程。

E. 求一篇:圖像識別的主要方法及其特點的比較的開題報告。速度!!十萬火急,就這么多分!!

利用計算機進行遙感信息的自動提取則必須使用數字圖像,由於地物在同一波段、同一地物在不同波段都具有不同的波譜特徵,通過對某種地物在各波段的波譜曲線進行分析,根據其特點進行相應的增強處理後,可以在遙感影像上識別並提取同類目標物。早期的自動分類和圖像分割主要是基於光譜特徵,後來發展為結合光譜特徵、紋理特徵、形狀特徵、空間關系特徵等綜合因素的計算機信息提取。
常用的信息提取方法是遙感影像計算機自動分類。首先,對遙感影像室內預判讀,然後進行野外調查,旨在建立各種類型的地物與影像特徵之間的對應關系並對室內預判結果進行驗證。工作轉入室內後,選擇訓練樣本並對其進行統計分析,用適當的分類器對遙感數據分類,對分類結果進行後處理,最後進行精度評價。遙感影像的分類一般是基於地物光譜特徵、地物形狀特徵、空間關系特徵等方面特徵,目前大多數研究還是基於地物光譜特徵。
在計算機分類之前,往往要做些預處理,如校正、增強、濾波等,以突出目標物特徵或消除同一類型目標的不同部位因照射條件不同、地形變化、掃描觀測角的不同而造成的亮度差異等。
利用遙感圖像進行分類,就是對單個像元或比較勻質的像元組給出對應其特徵的名稱,其原理是利用圖像識別技術實現對遙感圖像的自動分類。計算機用以識別和分類的主要標志是物體的光譜特性,圖像上的其它信息如大小、形狀、紋理等標志尚未充分利用。
計算機圖像分類方法,常見的有兩種,即監督分類和非監督分類。監督分類,首先要從欲分類的圖像區域中選定一些訓練樣區,在這樣訓練區中地物的類別是已知的,用它建立分類標准,然後計算機將按同樣的標准對整個圖像進行識別和分類。它是一種由已知樣本,外推未知區域類別的方法;非監督分類是一種無先驗(已知)類別標準的分類方法。對於待研究的對象和區域,沒有已知類別或訓練樣本作標准,而是利用圖像數據本身能在特徵測量空間中聚集成群的特點,先形成各個數據集,然後再核對這些數據集所代表的物體類別。
與監督分類相比,非監督分類具有下列優點:不需要對被研究的地區有事先的了解,對分類的結果與精度要求相同的條件下,在時間和成本上較為節省,但實際上,非監督分類不如監督分類的精度高,所以監督分類使用的更為廣泛。
細小地物在影像上有規律地重復出現,它反映了色調變化的頻率,紋理形式很多,包括點、斑、格、壠、柵。在這些形式的基礎上根據粗細、疏密、寬窄、長短、直斜和隱顯等條件還可再細分為更多的類型。每種類型的地物在影像上都有本身的紋理圖案,因此,可以從影像的這一特徵識別地物。紋理反映的是亮度(灰度)的空間變化情況,有三個主要標志:某種局部的序列性在比該序列更大的區域內不斷重復;序列由基本部分非隨機排列組成;各部分大致都是均勻的統一體,在紋理區域內的任何地方都有大致相同的結構尺寸。這個序列的基本部分通常稱為紋理基元。因此可以認為紋理是由基元按某種確定性的規律或統計性的規律排列組成的,前者稱為確定性紋理(如人工紋理),後者呈隨機性紋理(或自然紋理)。對紋理的描述可通過紋理的粗細度、平滑性、顆粒性、隨機性、方向性、直線性、周期性、重復性等這些定性或定量的概念特徵來表徵。
相應的眾多紋理特徵提取演算法也可歸納為兩大類,即結構法和統計法。結構法把紋理視為由基本紋理元按特定的排列規則構成的周期性重復模式,因此常採用基於傳統的Fourier頻譜分析方法以確定紋理元及其排列規律。此外結構元統計法和文法紋理分析也是常用的提取方法。結構法在提取自然景觀中不規則紋理時就遇到困難,這些紋理很難通過紋理元的重復出現來表示,而且紋理元的抽取和排列規則的表達本身就是一個極其困難的問題。在遙感影像中紋理絕大部分屬隨機性,服從統計分布,一般採用統計法紋理分析。目前用得比較多的方法包括:共生矩陣法、分形維方法、馬爾可夫隨機場方法等。共生矩陣是一比較傳統的紋理描述方法,它可從多個側面描述影像紋理特徵。
圖像分割就是指把圖像分成各具特性的區域並提取出感興趣目標的技術和過程,此處特性可以是像素的灰度、顏色、紋理等預先定義的目標可以對應單個區域,也可以對應多個區域。
圖像分割是由圖像處理到圖像分析的關鍵步驟,在圖像工程中占據重要的位置。一方面,它是目標表達的基礎,對特徵測量有重要的影響;另一方面,因為圖像分割及其基於分割的目標表達、特徵抽取和參數測量的將原始圖像轉化為更抽象更緊湊的形式,使得更高層的圖像分析和理解成為可能。
圖像分割是圖像理解的基礎,而在理論上圖像分割又依賴圖像理解,彼此是緊密關聯的。圖像分割在一般意義下是十分困難的問題,目前的圖像分割一般作為圖像的前期處理階段,是針對分割對象的技術,是與問題相關的,如最常用到的利用閾值化處理進行的圖像分割。
圖像分割有三種不同的途徑,其一是將各象素劃歸到相應物體或區域的象素聚類方法即區域法,其二是通過直接確定區域間的邊界來實現分割的邊界方法,其三是首先檢測邊緣象素再將邊緣象素連接起來構成邊界形成分割。
閾值是在分割時作為區分物體與背景象素的門限,大於或等於閾值的象素屬於物體,而其它屬於背景。這種方法對於在物體與背景之間存在明顯差別(對比)的景物分割十分有效。實際上,在任何實際應用的圖像處理系統中,都要用到閾值化技術。為了有效地分割物體與背景,人們發展了各種各樣的閾值處理技術,包括全局閾值、自適應閾值、最佳閾值等等。
當物體與背景有明顯對比度時,物體的邊界處於圖像梯度最高的點上,通過跟蹤圖像中具有最高梯度的點的方式獲得物體的邊界,可以實現圖像分割。這種方法容易受到雜訊的影響而偏離物體邊界,通常需要在跟蹤前對梯度圖像進行平滑等處理,再採用邊界搜索跟蹤演算法來實現。
為了獲得圖像的邊緣人們提出了多種邊緣檢測方法,如Sobel, Canny edge, LoG。在邊緣圖像的基礎上,需要通過平滑、形態學等處理去除雜訊點、毛刺、空洞等不需要的部分,再通過細化、邊緣連接和跟蹤等方法獲得物體的輪廓邊界。
對於圖像中某些符合參數模型的主導特徵,如直線、圓、橢圓等,可以通過對其參數進行聚類的方法,抽取相應的特徵。
區域增長方法是根據同一物體區域內象素的相似性質來聚集象素點的方法,從初始區域(如小鄰域或甚至於每個象素)開始,將相鄰的具有同樣性質的象素或其它區域歸並到目前的區域中從而逐步增長區域,直至沒有可以歸並的點或其它小區域為止。區域內象素的相似性度量可以包括平均灰度值、紋理、顏色等信息。
區域增長方法是一種比較普遍的方法,在沒有先驗知識可以利用時,可以取得最佳的性能,可以用來分割比較復雜的圖像,如自然景物。但是,區域增長方法是一種迭代的方法,空間和時間開銷都比較大。
基於像素級別的信息提取以單個像素為單位,過於著眼於局部而忽略了附近整片圖斑的幾何結構情況,從而嚴重製約了信息提取的精度,而面向對象的遙感信息提取,綜合考慮了光譜統計特徵、形狀、大小、紋理、相鄰關系等一系列因素,因而具有更高精度的分類結果。面向對象的遙感影像分析技術進行影像的分類和信息提取的方法如下:
首先對圖像數據進行影像分割,從二維化了的圖像信息陣列中恢復出圖像所反映的景觀場景中的目標地物的空間形狀及組合方式。影像的最小單元不再是單個的像素,而是一個個對象,後續的影像分析和處理也都基於對象進行。
然後採用決策支持的模糊分類演算法,並不簡單地將每個對象簡單地分到某一類,而是給出每個對象隸屬於某一類的概率,便於用戶根據實際情況進行調整,同時,也可以按照最大概率產生確定分類結果。在建立專家決策支持系統時,建立不同尺度的分類層次,在每一層次上分別定義對象的光譜特徵、形狀特徵、紋理特徵和相鄰關系特徵。其中,光譜特徵包括均值、方差、灰度比值;形狀特徵包括面積、長度、寬度、邊界長度、長寬比、形狀因子、密度、主方向、對稱性,位置,對於線狀地物包括線長、線寬、線長寬比、曲率、曲率與長度之比等,對於面狀地物包括面積、周長、緊湊度、多邊形邊數、各邊長度的方差、各邊的平均長度、最長邊的長度;紋理特徵包括對象方差、面積、密度、對稱性、主方向的均值和方差等。通過定義多種特徵並指定不同權重,建立分類標准,然後對影像分類。分類時先在大尺度上分出"父類",再根據實際需要對感興趣的地物在小尺度上定義特徵,分出"子類"。

F. 現在所說的多目標跟蹤是在單攝像頭還是多攝像頭下的

一、靜態背景下的目標跟蹤方法1、單目標:目標跟蹤還可以分為單目標的跟蹤和多目標的跟蹤。單目標的靜態背景下的目標跟蹤指的是攝像頭是固定在某一方位,其所觀察的視野也是靜止的。通常採用背景差分法,即先對背景進行建模,然後從視頻流中讀取圖像(我們稱之為前景圖像),將前景圖像與背景圖像做差,就可以得到進入視野的目標物體。對於目標的描述,通常用目標連通區域的像素數目的多少來表達目標的大小,或者用目標區域的高寬比等。目標的位置信息可採用投影的方式來定位。2、多目標:靜態環境下的多目標跟蹤,需要確定每個目標的特徵,位置,運動方向,速度等信息。3、預處理:由於獲得的圖像總會有著雜訊,需要對圖像做一些預處理,如高斯平滑,均值濾波,或者進行一些灰度拉伸等圖像增強的操作。二、動態背景下的目標跟蹤 攝像頭在雲台控制下的旋轉,會使得他所採集的圖像時可在變化,所以,對於整個目標跟蹤過程來說,背景是變化,目標也是在整個過程中運動的,所以跟蹤起來較有難度。 目前課題組提出的方案是:跟蹤過程:在攝像頭不同偏角情況下取得若干背景圖片,建立背景圖片庫――>攝像頭保持固定時,取得當前幀圖片,與圖片庫中的背景圖像匹配,背景差分(灰度差分?),獲得目標――>目標特徵提取――>實時獲得當前幀圖片,採用跟蹤演算法動態跟蹤目標。 提取特徵是一個難點,課題組提出多顏色空間分析的方法。根據彩色圖像在不同的顏色空間里表徵同一物體呈現出的同態性,可以把目標物體在不同的顏色空間里進行分解,並將這些關鍵特徵信息進行融合,從而找出判別目標的本質特徵。跟蹤過程中採用的各種方法說明:1)在0-360度不同偏角時,獲得背景圖片,可進行混合高斯背景建模,建立圖片庫,以俯仰角和偏轉角不同標志每張背景圖片,以備匹配使用;2)背景差分獲得目標後,對差分圖像需要進行平滑、去噪等處理,去除干擾因素;3)對目標採用多顏色空間(HSV、YUV)特徵提取,對不同顏色空間的特徵相與(AND),得到目標特徵,以更好的在當前幀圖片中找到目標;4)實時得到的當前幀圖片,進行混合高斯建模,排除樹葉搖動等引起的背景變化;5)跟蹤演算法可採用多子塊匹配方法、camshift方法等。

G. 什麼叫圖像跟蹤技術,主要應用的什麼領域

利用可見光成像和紅外成像感測器實現實時目標成像跟蹤是精確制導武器的核心技術,隨著實際戰場環境日益復雜,偽裝、隱身等目標特性控制技術飛速發展,極大地增加了實時目標成像跟蹤系統研究的難度。目前,盡管國內外對該領域的關鍵技術進行了大量的研究,並取得了一些成果,但實時成像跟蹤系統研究中許多實際問題仍沒有得到很好的解決,有待進一步深入研究。紅外跟蹤處理器系統對實時性要求極高,要求必須具有處理大數據量的能力,以保證系統的實時性;其次對系統的體積、功耗、穩定性等也有較嚴格的要求。實時信號處理演算法中經常用到對圖像的求和、求差運算,二維梯度運算,圖像分割及區域特徵提取等不同層次、不同種類的處理。其中有的運算本身結構比較簡單,但是數據量大,計算速度要求高,適於用FPGA進行硬體實現;有些處理對速度並沒有特殊的要求,但計算方式和控制結構比較復雜,難以用純硬體實現,適於用運算速度高、定址方式靈活、通信機制強大的DSP晶元來實現。本系統選擇計算簡單,匹配精度高的平均絕對差(MAD)演算法,為了方便硬體實現,對演算法加以適當改進,同時提高了系統運算速度及目標定位精度。並研究了相關跟蹤置信度評估、模板自適應刷新准則,系統抗干擾能力,以及相似目標辨識、目標丟失判斷和再捕獲策略,有效地提高了系統復雜場景條件下目標跟蹤的穩定性。

H. 如何使用opencv實現金字塔光流lk跟蹤演算法

#include <stdio.h>
#include <windows.h>
#include "cv.h"
#include "cxcore.h"
#include "highgui.h"
#include <opencv2\opencv.hpp>
using namespace cv;

static const double pi = 3.14159265358979323846;
inline static double square(int a)
{
return a * a;
}
/*該函數目的:給img分配內存空間,並設定format,如位深以及channel數*/
inline static void allocateOnDemand(IplImage **img, CvSize size, int depth, int channels)
{
if (*img != NULL) return;
*img = cvCreateImage(size, depth, channels);
if (*img == NULL)
{
fprintf(stderr, "Error: Couldn't allocate image. Out of memory?\n");
exit(-1);
}
}
/*主函數,原程序是讀取avi視頻文件,然後處理,我簡單改成從攝像頭直接讀取數據*/
int main(int argc, char *argv[])
{

//讀取攝像頭
VideoCapture cap(0);
//讀取視頻文件

//VideoCapture cap; cap.open("optical_flow_input.avi");
if (!cap.isOpened())
{
return -1;
}
Mat frame;

/*
bool stop = false;
while (!stop)
{
cap >> frame;
// cvtColor(frame, edges, CV_RGB2GRAY);
// GaussianBlur(edges, edges, Size(7, 7), 1.5, 1.5);
// Canny(edges, edges, 0, 30, 3);
// imshow("當前視頻", edges);
imshow("當前視頻", frame);
if (waitKey(30) >= 0)
stop = true;
}
*/

//CvCapture *input_video = cvCaptureFromFile( "optical_flow_input.avi" );
//cv::VideoCapture cap = *(cv::VideoCapture *) userdata;

//if (input_video == NULL)
// {
// fprintf(stderr, "Error: Can't open video device.\n");
// return -1;
// }

/*先讀取一幀,以便得到幀的屬性,如長、寬等*/
//cvQueryFrame(input_video);

/*讀取幀的屬性*/
CvSize frame_size;
frame_size.height = cap.get(CV_CAP_PROP_FRAME_HEIGHT);
frame_size.width = cap.get(CV_CAP_PROP_FRAME_WIDTH);

/*********************************************************/

/*用於把結果寫到文件中去,非必要
int frameW = frame_size.height; // 744 for firewire cameras
int frameH = frame_size.width; // 480 for firewire cameras
VideoWriter writer("VideoTest.avi", -1, 25.0, cvSize(frameW, frameH), true);

/*開始光流法*/
//VideoWriter writer("VideoTest.avi", CV_FOURCC('D', 'I', 'V', 'X'), 25.0, Size(640, 480), true);

while (true)
{
static IplImage *frame = NULL, *frame1 = NULL, *frame1_1C = NULL,
*frame2_1C = NULL, *eig_image = NULL, *temp_image = NULL,
*pyramid1 = NULL, *pyramid2 = NULL;

Mat framet;
/*獲取第一幀*/
// cap >> framet;
cap.read(framet);
Mat edges;
//黑白抽象濾鏡模式
// cvtColor(framet, edges, CV_RGB2GRAY);
// GaussianBlur(edges, edges, Size(7, 7), 1.5, 1.5);
// Canny(edges, edges, 0, 30, 3);

//轉換mat格式到lpiimage格式
frame = &IplImage(framet);
if (frame == NULL)
{
fprintf(stderr, "Error: Hmm. The end came sooner than we thought.\n");
return -1;
}

/*由於opencv的光流函數處理的是8位的灰度圖,所以需要創建一個同樣格式的
IplImage的對象*/
allocateOnDemand(&frame1_1C, frame_size, IPL_DEPTH_8U, 1);

/* 把攝像頭圖像格式轉換成OpenCV慣常處理的圖像格式*/
cvConvertImage(frame, frame1_1C, 0);

/* 我們需要把具有全部顏色信息的原幀保存,以備最後在屏幕上顯示用*/
allocateOnDemand(&frame1, frame_size, IPL_DEPTH_8U, 3);
cvConvertImage(frame, frame1, 0);

/* 獲取第二幀 */
//cap >> framet;
cap.read(framet);
// cvtColor(framet, edges, CV_RGB2GRAY);
// GaussianBlur(edges, edges, Size(7, 7), 1.5, 1.5);
// Canny(edges, edges, 0, 30, 3);
frame = &IplImage(framet);
if (frame == NULL)
{
fprintf(stderr, "Error: Hmm. The end came sooner than we thought.\n");
return -1;
}

/*原理同上*/
allocateOnDemand(&frame2_1C, frame_size, IPL_DEPTH_8U, 1);
cvConvertImage(frame, frame2_1C, 0);

/*********************************************************
開始shi-Tomasi演算法,該演算法主要用於feature selection,即一張圖中哪些是我
們感興趣需要跟蹤的點(interest point)
input:
* "frame1_1C" 輸入圖像.
* "eig_image" and "temp_image" 只是給該演算法提供可操作的內存區域.
* 第一個".01" 規定了特徵值的最小質量,因為該演算法要得到好的特徵點,哪就
需要一個選擇的閾值
* 第二個".01" 規定了像素之間最小的距離,用於減少運算復雜度,當然也一定
程度降低了跟蹤精度
* "NULL" 意味著處理整張圖片,當然你也可以指定一塊區域
output:
* "frame1_features" 將會包含fram1的特徵值
* "number_of_features" 將在該函數中自動填充上所找到特徵值的真實數目,
該值<= 400
**********************************************************/

/*開始准備該演算法需要的輸入*/

/* 給eig_image,temp_image分配空間*/
allocateOnDemand(&eig_image, frame_size, IPL_DEPTH_32F, 1);
allocateOnDemand(&temp_image, frame_size, IPL_DEPTH_32F, 1);

/* 定義存放frame1特徵值的數組,400隻是定義一個上限 */
CvPoint2D32f frame1_features[400];
int number_of_features = 400;

/*開始跑shi-tomasi函數*/
cvGoodFeaturesToTrack(frame1_1C, eig_image, temp_image,
frame1_features, &number_of_features, .01, .01, NULL);

/**********************************************************
開始金字塔Lucas Kanade光流法,該演算法主要用於feature tracking,即是算出
光流,並跟蹤目標。
input:
* "frame1_1C" 輸入圖像,即8位灰色的第一幀
* "frame2_1C" 第二幀,我們要在其上找出第一幀我們發現的特徵點在第二幀
的什麼位置
* "pyramid1" and "pyramid2" 是提供給該演算法可操作的內存區域,計算中間
數據
* "frame1_features" 由shi-tomasi演算法得到的第一幀的特徵點.
* "number_of_features" 第一幀特徵點的數目
* "optical_flow_termination_criteria" 該演算法中迭代終止的判別,這里是
epsilon<0.3,epsilon是兩幀中對應特徵窗口的光度之差的平方,這個以後的文
章會講
* "0" 這個我不知道啥意思,反正改成1就出不來光流了,就用作者原話解釋把
means disable enhancements. (For example, the second array isn't
pre-initialized with guesses.)
output:
* "frame2_features" 根據第一幀的特徵點,在第二幀上所找到的對應點
* "optical_flow_window" lucas-kanade光流演算法的運算窗口,具體lucas-kanade
會在下一篇詳述
* "5" 指示最大的金字塔層數,0表示只有一層,那就是沒用金字塔演算法
* "optical_flow_found_feature" 用於指示在第二幀中是否找到對應特徵值,
若找到,其值為非零
* "optical_flow_feature_error" 用於存放光流誤差
**********************************************************/

/*開始為pyramid lucas kanade光流演算法輸入做准備*/
CvPoint2D32f frame2_features[400];

/* 該數組相應位置的值為非零,如果frame1中的特徵值在frame2中找到 */
char optical_flow_found_feature[400];

/* 數組第i個元素表對應點光流誤差*/
float optical_flow_feature_error[400];

/*lucas-kanade光流法運算窗口,這里取3*3的窗口,可以嘗試下5*5,區別就是5*5
出現aperture problem的幾率較小,3*3運算量小,對於feature selection即shi-tomasi演算法來說足夠了*/
CvSize optical_flow_window = cvSize(5, 5);
// CvSize optical_flow_window = cvSize(5, 5);
/* 終止規則,當完成20次迭代或者當epsilon<=0.3,迭代終止,可以嘗試下別的值*/
CvTermCriteria optical_flow_termination_criteria= cvTermCriteria(CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 20, .3);

/*分配工作區域*/
allocateOnDemand(&pyramid1, frame_size, IPL_DEPTH_8U, 1);
allocateOnDemand(&pyramid2, frame_size, IPL_DEPTH_8U, 1);

/*開始跑該演算法*/
cvCalcOpticalFlowPyrLK(frame1_1C, frame2_1C, pyramid1, pyramid2,frame1_features, frame2_features, number_of_features,
optical_flow_window, 5, optical_flow_found_feature,optical_flow_feature_error, optical_flow_termination_criteria, 0);

/*畫光流場,畫圖是依據兩幀對應的特徵值,
這個特徵值就是圖像上我們感興趣的點,如邊緣上的點P(x,y)*/
for (int i = 0; i< number_of_features; i++)
{
/* 如果沒找到對應特徵點 */
if (optical_flow_found_feature[i] == 0)
continue;
int line_thickness;
line_thickness = 1;

/* CV_RGB(red, green, blue) is the red, green, and blue components
* of the color you want, each out of 255.
*/
CvScalar line_color;
line_color = CV_RGB(255, 0, 0);

/*畫箭頭,因為幀間的運動很小,所以需要縮放,不然看不見箭頭,縮放因子為3*/
CvPoint p, q;
p.x = (int)frame1_features[i].x;
p.y = (int)frame1_features[i].y;
q.x = (int)frame2_features[i].x;
q.y = (int)frame2_features[i].y;

double angle;
angle = atan2((double)p.y - q.y, (double)p.x - q.x);
double hypotenuse;
hypotenuse = sqrt(square(p.y - q.y) + square(p.x - q.x));

/*執行縮放*/
q.x = (int)(p.x - 5 * hypotenuse * cos(angle));
q.y = (int)(p.y - 5 * hypotenuse * sin(angle));

/*畫箭頭主線*/
/* "frame1"要在frame1上作畫.
* "p" 線的開始點.
* "q" 線的終止點.
* "CV_AA" 反鋸齒.
* "0" 沒有小數位.
*/
cvLine(frame1, p, q, line_color, line_thickness, CV_AA, 0);

/* 畫箭的頭部*/
p.x = (int)(q.x + 9 * cos(angle + pi / 4));
p.y = (int)(q.y + 9 * sin(angle + pi / 4));
cvLine(frame1, p, q, line_color, line_thickness, CV_AA, 0);
p.x = (int)(q.x + 9 * cos(angle - pi / 4));
p.y = (int)(q.y + 9 * sin(angle - pi / 4));
cvLine(frame1, p, q, line_color, line_thickness, CV_AA, 0);
}
/*顯示圖像*/

/*創建一個名為optical flow的窗口,大小自動改變*/
cvNamedWindow("Optical Flow", CV_WINDOW_NORMAL);
cvFlip(frame1, NULL, 2);
cvShowImage("Optical Flow", frame1);

/*延時,要不放不了*/
cvWaitKey(33);

/*寫入到文件中去*/

// cv::Mat m = cv::cvarrToMat(frame1);//轉換lpimgae到mat格式
// writer << m;//opencv3.0 version writer

}
cap.release();
cvWaitKey(33);
system("pause");
}

I. 若對一個視頻圖像中的人物進行跟蹤,會用到哪些圖像處理技術請用流程圖將之間

錄像監控人物活動時通常需要對人物進行跟蹤。人物的行為信息可以從他們運動產生軌跡線的特點以及他們之間的相互作用中推得。對單個對象的位置或者軌跡線進行分析,可以檢測出人物是否處在禁區、在跑、在跳或是在躲藏。把兩個人或是更多人的信息聯系在一起,就可以得到他們之間的互動信息。從採集的圖像獲取其中包含的物體信息的過程中,兩個步驟顯得尤為重要:前景檢測和目標跟蹤。本文中,我們提出了一種簡單的基於亮度對比度的前景檢測方法和一種僅僅依賴於對象匹配信息的跟蹤演算法,而不需要對模型進行統計學描述或是運動特性預測那麼麻煩。用到的追蹤器是英國工程和自然科學研究委員會在PerSer[14]項目中研發的軟體中的一部分。最初計劃與倫敦地鐵站(室內)的CCTVfootage合作,但相比獲得目標的精確軌跡,他們更側重於實時性和對象間相互作用的研究。雖然沒用到背景更新技術,這個演算法已經經過了PETS2001圖像集的測試,證明它能夠提供簡單的運動軌跡。建議事件監測的進一步研究要基於對象重心和運動軌跡

熱點內容
創建實例在linux 發布:2024-10-07 18:03:16 瀏覽:485
黑客學c語言 發布:2024-10-07 17:37:39 瀏覽:942
ftp比較文件 發布:2024-10-07 17:04:56 瀏覽:39
如何配置幼兒園園內的玩具 發布:2024-10-07 17:04:23 瀏覽:863
干支日演算法 發布:2024-10-07 16:47:17 瀏覽:502
sqlin語句用法 發布:2024-10-07 16:45:05 瀏覽:640
直出伺服器怎麼樣 發布:2024-10-07 15:41:36 瀏覽:479
比亞迪唐dmi哪個配置性價比 發布:2024-10-07 15:19:28 瀏覽:903
編譯器按變數 發布:2024-10-07 15:07:03 瀏覽:775
怎麼忘記電腦wifi密碼怎麼辦 發布:2024-10-07 15:02:18 瀏覽:426