關於『數位影像分析之智慧型監視系統』的Q&A - Part 2
作者:Mr. Lai Tai-Yu, Averill, 赖岱佑, 賴岱佑
標題:關於『數位影像分析之智慧型監視系統』的Q&A - Part 2
由於有讀者對於數位影像分析之智慧型監視系統一書有疑問,因此整理如下:
P.S. 整理得很粗糙,不好意思,凡是來信有帳號名稱、人名、稱謂、單位名稱或地名,都不包含在內。小弟儘量仔細檢查,將可以放上來的問題公佈出來,以供其他讀者參考。但若您認為不方便將問題公開,煩請來信告知,有冒犯之處,還請多多見諒。我會儘速處理,謝謝各位,靜祝各位萬事如意、鴻圖大展、健康快樂、心想事成。感謝。
P.S. 小弟的回答,僅供參考,還需要各位先進指導,謝謝。
Q1: 首先感謝前輩的指導讓我在智慧型監視器的知識上能有收穫,再想請教前輩學生目前使用vc++6.0的初學者,對於演算法這部分不大了解,無法寫出像您一樣寫出龐大的影像演算法程式,不知能否請您推介一些國內相關的演算法相關書籍,讓我對寫程式這領域有更深一層的了解,謝謝。
A1: 經過這麼多年的驗證,Visual C++ 6.0有許多的Bug,建議更新到SP6。或者改用Visual C++ 2003 以上的版本,來開發Win32的程式。原因是Visual C++ 6.0的時代,微軟還是充斥著許多自己的格式及模式,並沒有完全遵循標準C的規格。因此您使用標準C的規格或語法,某些時候會出問題。但到了Visual C++ 2003之後,微軟開始遵循標準C的模式,因此穩固多了。特別是要開發長年長時間運作的程式,就需要穩固的開發函式。
相關書籍:(這個問題問我就對了,我有市面上所有的影像處理書籍,從民國85年到現在最新的都有。)
基礎:
如果您有需要知道簡體書籍或是英文書籍,相關的推薦,再來信,我在抽時間幫您整理。
Q2: 感謝前輩的指導把完整的書單都細心的列出給我,實在感激不盡。學生想再次請教賴先生,關於C語言如何能夠在影像處理上能夠更進步呢?畢竟學生學VC才3個多月,實在無法寫出像前輩一樣龐大的影像處理程式,國內有沒有哪些書籍對寫程式能有助於學生去學習,煩請前輩推介一下,不勝感激
A2: 您知道我學習VC花了多久時間嗎?只花了一年又四個月。在這之前都是一直用VB做影像處理,為了配合公司政策,所以改學VC,剛開始真的很痛苦。痛苦在於知道數位影像怎麼處理,但卻無法用VC撰寫出來。為了生存,所以一邊學VC一邊做影像處理。因為我有生存的壓力,所以這種壓力轉變為動力,才能在短時間內學起來。『學習』有一件事情很重要,就是要接近成功的人。你越常接近成功的人,自然而然你也會慢慢成功。我在公司有很多VC的高手,多多請益,自然而然就越懂越多。要學VC之前,請先學標準C/C++,因為VC畢竟含有微軟自訂的規範,只能在微軟上運作。如果您學了標準C/C++,在任何平台都可以運作。等於成為世界公認的程式設計師。
關於書單的部分如下:
Q3. 一般市面上IVS所使用的攝影影像大概有那幾種規格大小?
A3: 請參考ACTi的網頁,www.acti.com,推薦ACTi是因為價格、規格,都很優。
一般來說,目前IVS處理的格式大多是D1 Size。
Q4. 一秒內需要處理多少張影像?
A4: 業界目前沒有標準,以市場產品來說的話,最少六張以上。
Q5. 是否須做攝影機被搖晃、被塗鴉等偵測? 用什麼方式可以偵測?
A5: 最好要作出這些保護偵測,可以減少誤偵測的部分。請參考拙作『數位影像分析之智慧型監視系統』的『5-12場景切換』。
Q6. 在遺失遺留物偵測、入侵偵測、虛擬圍籬偵測、滯留偵測等是否都需要做物件追蹤?若是多個物件在畫面中該怎麼追蹤?
A6: 只要關於物體的演算法,最好都要作物件追蹤,但是若需求非常明顯,為求效率,就可以不用最物件追蹤,作範圍標示即可。這點在人臉偵測中有提到,利用輪廓演算法,將其改良,就可以做多個物件追蹤。或者用老方法,連通標記法。或者用迭代法也可。我自己偏好使用輪廓演算法改良,因為速度比較快。
Q7. 在您的書中有提到許多偵測方法,但是對於每一項偵測並沒有一個完整的流程,可以請您列出遺失遺留物偵測、入侵偵測、虛擬圍籬偵測、滯留偵測等各種偵測的完整流程嗎?
A7: 因為目前數位影像分析在學術界或業界都沒有標準,所以要列出完整流程也只是我自己的流程,而非一個公認的流程。建議您先研究關於物件分割,再研究物件追蹤,只要物件追蹤可行,要研究遺失遺留物偵測、入侵偵測、虛擬圍籬偵測、滯留偵測就不會太難。每一種演算法的難易度都可以調整,不過最主要還是分離不開 物件、事件、條件 。
Q8. 在目前的物件追蹤有那些演算法可參考?
A8: 我建議先瞭解物件分割,而後利用空間資訊來判斷物件追蹤。這點做完之後,就可以利用相似度演算法加強。這是最基礎的做法。當然如果要做到實用的話,請參考Particle Filter Object Tracking
Q9: 非常感謝您在百忙之中為學生解開疑問,學生目前有在研讀 motion detection 和 object tracking 相關的論文,但是很少有paper 提到在object tracking之後如何進行遺失遺留物偵測、入侵偵測、虛擬圍籬偵測、滯留偵測的部份如何處理,不知您是否可以講解這些部份的處理,解開學生的疑惑,謝謝。
A9: 遺失遺留物偵測:
1. 如果有Object Tracking,計算當物體停留多少時間(畫格Frame),就出現警示。同樣的有物體由畫面內往外移,就出現警示。
2. 如果沒有Object Tracking,利用像素差異,以及細節判斷,就可以作出遺失遺留物偵測。主要關鍵在建立背景的時機。
入侵偵測:
1. 如果有Object Tracking,計算物體是否與警示區重疊,用AND邏輯運算即可。還可以判斷方向性,當物體由外而內才發生警示,反之,則不警示。
2. 如果沒有Object Tracking,計算前景是否與警示區重疊,用AND邏輯運算。
虛擬圍籬偵測:
1. 如果有Object Tracking,計算圍籬立體位置(或用狄卡爾座標判斷),若物件超過圍籬(簡單作法是物件低於圍籬座標),則判斷穿越圍籬。
2. 如果沒有Object Tracking,計算前景是否與圍籬重疊,切割前景物件,細節調整,判斷是否穿越圍籬。
滯留偵測:
1. 如果有Object Tracking,當物件移動位置與前一位置差異不大時,則開始計數,超過時間(門檻值),則判定滯留。
2. 如果沒有Object Tracking,當某一前景像素出現,建立計數表,計數表內的數值超過門檻值,則判定滯留。(雖是蠢方法,但有國際公司早期版本就是用這種方法)
您會發現數位影像處理智慧型視訊分析人工智慧,慢慢的就會越來越接近人工智慧的部分了。加油。
Q10. 在您寄給我的[監視視訊中有關物件分離與追蹤技術]這篇論文中,於3-1 Motion Detection的部份,學生不了解為什麼要將循序畫面差分影像(亦
即Dt=Tt-Tt-1)與背景差分影像(Db = Tt − B)在二元化之後取交集?這樣不是會得到一張非常破損的影像,而且之後還使用opening運算,之後得到的影像不是破碎的更嚴重?
A10. 請您先瞭解義大利發表的論文,S1 = T1 – T2, S2 = T2 – T3, Mask = S1 and S2,Object = T2 and Mask。先瞭解這樣的原理之後,您就會豁然開朗。用理解的會花很多時間,用筆在紙上畫每一個流程的影像及圖,或者直接實作,馬上就會理解了。至於破損的問題,關係到門檻值,每個人設定的門檻值都不同,結果也就會不同。基本上快速物件追蹤法,可以避免光線、色差的變化,因此我都應用為參考資料或作為事件觸發之用。其實快速物件追蹤法還有很大的改良空間,可以改得更快。
Q11. 在很多的文章中,不管是利用循序畫面差分影像或者背景差分影像獲得移動影像後,都沒有提到如何重建這些破損的影像,頂多使用dilation與erosion來消除雜訊與稍微填補一些坑洞,但是所得到的影像還是會有同一物件卻分成多個部份的情形,這種情形該如何解決?這樣會影響到後續的處理嗎?
A11. 使用Dilation和Erosion是最基本的方法,進階一點可使用Convex Hulls(中文有人叫:凸包法,呵呵~~好饒口)。還可以再精進一點,使用濾波器或者類聚器,加以分析。簡單的類聚器,例如:CMeans。值得研究看看。
Q12: 非常感謝您不吝分享您的研究成果,讓小弟獲益良多,由於小弟以往均是以VB6開發一些商業類的軟體業餘對影像方面的領域相當有興趣,因此在購入賴老師的書後獲益良多,但因本身數學基礎不好,因此在學習上較為吃力
A12: 歡迎您對於數位影像處理有興趣,數學基礎不是主要關鍵,若能在實做加強,用直覺邏輯的方法,也是一個很好的方向。往後有相關的題目,歡迎一起研究。
Q13:滯留偵測:
如果有Object Tracking,當物件移動位置與前一位置差異不大時,則開始計數,超過時間(門檻值),則判定滯留。
Q13-1.這是指全景偵測嗎?對物件移動位置與前一位置差異不大這個限制條件不太了解。是否滯 留一定會有位移不大的情形?
A13-1: 業界產品來說,近年來改採用 Object Tracking 的方法,早期則是使用像素時間表,所謂物件移動位置的限制條件因環境情境的不同而有所不同,實際上在使用時,使用者會希望以時間為單位,而對設計者來說會比較喜歡以畫格(frame)為單位。做產品,滯留要看使用者定義。做學術,滯留必須要定義清楚。一個物件出現在畫面時間過久,就設定為滯留,這是我的方式。攝影機拍攝的場景不可能很大,因此移動位置就顯得短少些。
Q13-2.若是全景偵測,當物體的移動較大,但是卻是滯留的狀況,就不容易偵測出來,難度是否 在位移的門檻值不好定?
A13-2: 您這個問題的場景應該是室內環境,所以物體移動較大,但卻是滯留。所以在室內的話,可以用像素時間表的方法。其實要依照場景來決定會比較好,也就是這功能的設定交由使用者去決定。我一直在提場景,主要就是希望您可以找到關於真正保全業監視的畫面,這樣子研究才不會失去實用性。
真正監視器室外場景。
室內場景。
Q13-3.若不是全景偵測,而是區域偵測,是否就不需偵測物體移動位置的差異,只要物體在限制 區域內就一直計數,超過時間,則判定滯留?
A13-3: 無論是全景偵測或是區域偵測,用的方法都是一樣的,不過若是區域偵測就變成警戒區偵測,所以要請您先思考,定義清楚您要做的場景為何。這樣才能有方向及目標。上圖兩個場景用的方法可以是一樣的,但我建議剛開始研究最好先以小目標達成法,然後您會慢慢發現,有一些演算法可以化簡、共用,自然而然就可以找到方法。我不是在講心法。而是您目前實作經驗可能不足,由數學或學理來推斷的話,可能也需要花些時間。所以一次到位可能沒那麼容易,先把 Object Tracking做出來,路就寬廣了。Object Tracking 也不是那麼簡單,您會遇到光影跟顏色的變化,場景不同,陰天、雨天、艷陽天,這些都要一一克服。這些我在書中都沒有提及,是因為怕把讀者嚇跑,而您這麼有興趣,實在應該試試看。例如:下雨天的場景,把雨滴濾掉,變成沒有下雨的場景。這就很有趣了。
Q14:遺失遺留物偵測
遺失物:
如果有Object Tracking,計算當物體停留多少時間(畫格Frame),就出現警示。同樣的有物體由畫面內往外移,就出現警示。
Q14-1.需否先決定偵測的物體(範圍)?(全景or區域)
A14-1: 這點與您做的研究方向有關,是做學術還是產品,以國際業界產品規格來說是全景。以台北市規格來說物件大小是50x50pixels的滯留物要被偵測出來。學術上你做區域也可以,只要方法快速(比前人),準確,以及有所貢獻,那就可以了。
Q14-2.開始偵測後,如何決定是否有物體遺失? (1).是不是需先將偵測區域儲存起來?若要儲存的話,需要隨著時間去更新偵測區域的亮度嗎?這樣應該會比較準確吧?
A14-2: 目前我所知道的方法都是必須要建立背景,也就是需要儲存偵測區域。當然一定要隨著時間場景的變化而有所更新。最簡單的方式就是時間背景法的應用。只要您可以作出在人來人往的捷運站前放下滯留物,而被偵測出來的話。就證明您已經進階了。
Q14-3:(2).若是偵測區域的話,是否在偵測區域內沒有移動資訊的時候來判斷偵測區域是否有改變?需設臨界值嗎?
A14-3: 建議您去找一找IBM的漸進式背景法,讀過一遍,保證您會有很大的收穫。不用實作,因為他是做彩色的,運算量太大,但要理解。
Q14-4: (3).當偵測區域有移動資訊的時候(遮蔽or交錯),是否還有方法可做失物偵測?還是一定要在沒有移動資訊的時候才能做偵測?
A14-4: 實務上偵測區域一定會有遮蔽或交錯的問題,還記得有Object Tracking嗎?用Object Tracking就可以解決這樣的問題。
Q15: 虛擬圍籬偵測:
如果有Object Tracking,計算圍籬立體位置(或用狄卡爾座標判斷),若物件超過圍籬(簡單作法是物件低於圍籬座標),則判斷穿越圍籬。
Q15-1.如何建立圍籬立體位置,只有一架攝影機可以做到嗎?
A15-1: 有沒有看過遊戲人工智慧的書籍,或者會影像處理軟體,只要具有圖層的概念,就可以模擬立體圍籬。一架攝影機當然做得到,這是學界四年科專的研究成果之一。
Q15-2.若並非一定要做圍籬立體位置的話,如何判斷物體有越過虛擬圍籬?
A15-2: 這用筆紙畫一畫場景圖及流程圖就可以理解了。請問您用2D如何判定物體的前後順序呢?這題回答出來您就解了立體圍籬的問題。簡單的很,真的,知道答案您一定會笑死,然後想扁我一頓。會寫遊戲設計的人都知道的方法,有玩過2D Game吧。思考一下。
別怪我給您題目做,因為如果真的要研究的話,我怕把讀者嚇跑。不過您真的很有心,我會循序漸進的告訴您答案。
Q16.在您的書中所提到的[複雜背景之監視系統失物及遺物演算法]中,關於5-1-2-1的時間背景法 部份:
(1).是否能偵測出靜態前景物?
A16-1-1: 靜態的前景物被拿走就會偵測到物件遺失。
(2).在更新背景的式子中除以255,這個255的值是如何定的?是否會影響到所建立的背景對於環境變化的靈敏度?若調小會如何?調大會如何?在整個演算法中扮演什麼樣的角色?會否影響到後續的處理?
A16-1-2: 除以255是因為灰階的關係。這個值的高低會影像到環境(時間)變化的靈敏度。調小更新速度變快,調大更新速度變慢。在這個演算法扮演穩定背景的作用。會影響到後續的處理。
Q16-2.在5-1-2-2中的邊緣萃取中,對於Edgo=P-B+g(x,y)的部份: P-B是二值化後的值嗎?而g(x,y)是什麼值? P-B+g(x,y)是什麼值? P-B+g(x,y)之後是否還有其他運算才得到Edgo?這邊的值真的很怪Edgo是什麼值?
A16-2: 在一般數位影像的論文中,若沒有提及名稱用途,Edge代表邊緣,B代表背景,g代表邊緣(斜率)。理解了名稱,應該就可以瞭解數學式的用途了。
Q16-3.在5-1-2-2中的形狀輪廓中,對於每塊移動區域的連接:
A16-3: 這邊問的好,代表您真的有實作過。
(1).怎麼判斷那些區塊是屬於同一物體,區塊間到底要不要連接?
A16-3-1: 我們可以參考其他資訊來做判斷,例如:影像解析度。還記得有邊緣Edge的加入嗎?因為有邊緣我們就可以推斷區塊是否為同一個物體。然後完連連看的遊戲,就可以獲得一個物件了。這是在上一個階段獲得的。
(2).若同時有多個物體,而移動區塊卻以最接近的區塊來連接,那整張畫面不就只剩下一個物體?或者明明是a物體的區塊卻連接到b物體?
A16-3-2: 多個物體的邊緣幾乎是不會連接。若有連接情形那是因為太近或重疊所造成的。
(3).做完區塊連接後,物體的形狀不是還呈現有破洞的情形,該怎麼處理?這是我最好奇的,好多paper從移動偵測後做完去雜訊,之後就開始做物件追蹤了,都沒提到這些還有破洞的物體該怎麼辦?
A16-3-3: 破洞是一定會的。最簡單的方法就是Erosion, Dilation,不過我想您一定已經試過了。顏色、形狀邊緣都是很好的參數,顏色方面可以採用Cmeans,形狀方面可以參考邊緣偵測,自己設計一個濾波器也可。不過這裡有一點我覺得怪怪的,應該是做完去雜訊後再作移動偵測,為何您是說先做移動偵測再去雜訊呢?如果您說的是真的,我很有興趣看看那些Paper。還有您也可以用最小距離法做判斷物體 (S1-S2) * (S1-S2) ,這樣就可以拉大差距了。
(4).在 shape filled 的部份,若有多個物體該怎麼 filled ,有可能一個 一個去 filled?那樣不是太耗費記憶體與時間?有什麼方式可節省時間與記憶體?
A16-3-4: 您是使用何種語言開發呢?以及您是使用多少解析度做研究呢?有多個物體當然要一個一個去搜尋跟框選,要不然怎麼獲得完整物件資訊呢?去框選的時候我們還可以順便計算物件的高、寬、週長、形狀、座標、週長,等等。而且使用D1 Size同時圈選三十個物件,也還可以保持15FPS。耗費記憶體也很少。怎麼會多呢?而且我們現在都使用GB 以上的記憶體,D1 Size的物件也不過幾百Pixel,又是灰階,應該不會耗費記憶體太多。除非您做彩色三維空間,那我保證一定動不了,因為我已經實驗過了。
Q17.在5-1-2-4的sence的部份, 您在blog中有提到[場景資訊沒有存到時間背景資訊的必要,都是時間背景資訊 存到場景資訊中,所以正好相反。],我不懂時間背景資訊為什麼存到場景資訊? 場景資訊不是只用來判斷背景是否需立即更新嗎?
場景資訊還有其他作用嗎?
A17: 實作時,當Scene到達某一門檻值時,就直接將當下的畫面(Frame)複製到背景資訊(B)。實際應用時,當背景畫面變換極大時,或用手指遮住輸入裝置鏡頭,重新放開時,背景會自動更新,而整個物件抽取還是可以繼續進行。場景和背景一樣都需要更新,否則就會發生每過一段時間場景差異就達到門檻值,而重新更新。而時間資訊存入場景與背景的更新值可以透過不同條件來決定。簡單的說,背景資訊是屬於漸進式的更新,更新來源是時間資訊;場景資訊是屬於間斷式的更新,更新來源也是時間資訊。或者是其他有參考價值的資訊都可以作為更新來源。背景是提供即時的抽取前景之用,場景主要用來提供畫面遮蔽或拍攝位置移動時的機制。
Q18.在5-1-3所用到的場景資訊是指什麼?怎麼突然有時間背景資訊更新到場景資訊,在失物與遺物的部份,可否再說明清楚。您所提到的失物與遺物演算法要確認沒有移動資訊,這個移動資訊是指什麼?是frame中都 沒有移動物嗎?這似乎不太可能?環境使用上就會被限制。
A18: 當時間背景法的背景處於穩定狀態時,就將該畫面更新為場景資訊(Scene Information)。而時間背景法的更新速度是可以做調整的,透過像素的比例,來決定更新的速度。
這個方法在使用上會受到環境的限制,您說的沒錯,他只有遇到沒有移動資訊的時候,才會計算出遺失遺留的物體位置,所以只適合室內場景使用。
要做到在人來人往的捷運站前放置物品,而被偵測出來。我可提供兩個方向,第一個就是改良本方法,讓本方法也可以在有移動資訊的情況下計算出遺失遺留物;第二個方法就是採用漸進式背景法,可參考IBM的網頁。由於漸進式背景法製作難度比較高,所以沒有放在書中。本書的內容適合學校研究教學使用,算是入門級。您已經發現了進階級的問題,進步很快。加油。
標題:關於『數位影像分析之智慧型監視系統』的Q&A - Part 2
由於有讀者對於數位影像分析之智慧型監視系統一書有疑問,因此整理如下:
P.S. 整理得很粗糙,不好意思,凡是來信有帳號名稱、人名、稱謂、單位名稱或地名,都不包含在內。小弟儘量仔細檢查,將可以放上來的問題公佈出來,以供其他讀者參考。但若您認為不方便將問題公開,煩請來信告知,有冒犯之處,還請多多見諒。我會儘速處理,謝謝各位,靜祝各位萬事如意、鴻圖大展、健康快樂、心想事成。感謝。
P.S. 小弟的回答,僅供參考,還需要各位先進指導,謝謝。
Q1: 首先感謝前輩的指導讓我在智慧型監視器的知識上能有收穫,再想請教前輩學生目前使用vc++6.0的初學者,對於演算法這部分不大了解,無法寫出像您一樣寫出龐大的影像演算法程式,不知能否請您推介一些國內相關的演算法相關書籍,讓我對寫程式這領域有更深一層的了解,謝謝。
A1: 經過這麼多年的驗證,Visual C++ 6.0有許多的Bug,建議更新到SP6。或者改用Visual C++ 2003 以上的版本,來開發Win32的程式。原因是Visual C++ 6.0的時代,微軟還是充斥著許多自己的格式及模式,並沒有完全遵循標準C的規格。因此您使用標準C的規格或語法,某些時候會出問題。但到了Visual C++ 2003之後,微軟開始遵循標準C的模式,因此穩固多了。特別是要開發長年長時間運作的程式,就需要穩固的開發函式。
相關書籍:(這個問題問我就對了,我有市面上所有的影像處理書籍,從民國85年到現在最新的都有。)
基礎:
- 數位影像處理技術手冊,賴岱佑,文魁 使用Visual Basic 6.0,開南管理學院三學分教科書
- 數位影像處理MATLAB (附光碟 ) ,連國珍 ,儒林 必買,我就是由這本的上一版啟蒙的,那時候還是用C
- C 語言數位影像處理(附範例光碟片)(修訂版) ,吳上立 林宏墩 ,全華科技 當小說看看就好,介紹的技術很舊,但是很基礎
- 數位影像處理技術,陳同孝 張真誠 黃國峰/著 ,松崗 當故事書看就好,是一本很不錯的入門書
- 數位影像處理-運用MATLAB,繆紹綱 ,東華
- 數位影像處理技術,張真誠 黃國峰 陳同孝/著 ,旗標
- 數位影像處理-活用Matlab(附範例光碟片) ,繆紹綱 ,全華科技
- Visual C++數位影像模式識別技術及工程實踐(附光碟) ,張宏林 ,文魁 這是翻譯簡體書,如果不討厭簡體用語,是一本實做的好書
- 精通Visual C++視訊/音訊編解碼技術(附光碟) ,馬蘭 沈笑雲 萬棣 ,文魁
- Visual C++數位影像技術大全,求是科技,文魁 這是翻譯簡體書,如果不討厭簡體用語,是一本實作的好書
如果您有需要知道簡體書籍或是英文書籍,相關的推薦,再來信,我在抽時間幫您整理。
Q2: 感謝前輩的指導把完整的書單都細心的列出給我,實在感激不盡。學生想再次請教賴先生,關於C語言如何能夠在影像處理上能夠更進步呢?畢竟學生學VC才3個多月,實在無法寫出像前輩一樣龐大的影像處理程式,國內有沒有哪些書籍對寫程式能有助於學生去學習,煩請前輩推介一下,不勝感激
A2: 您知道我學習VC花了多久時間嗎?只花了一年又四個月。在這之前都是一直用VB做影像處理,為了配合公司政策,所以改學VC,剛開始真的很痛苦。痛苦在於知道數位影像怎麼處理,但卻無法用VC撰寫出來。為了生存,所以一邊學VC一邊做影像處理。因為我有生存的壓力,所以這種壓力轉變為動力,才能在短時間內學起來。『學習』有一件事情很重要,就是要接近成功的人。你越常接近成功的人,自然而然你也會慢慢成功。我在公司有很多VC的高手,多多請益,自然而然就越懂越多。要學VC之前,請先學標準C/C++,因為VC畢竟含有微軟自訂的規範,只能在微軟上運作。如果您學了標準C/C++,在任何平台都可以運作。等於成為世界公認的程式設計師。
關於書單的部分如下:
- Standard C++ 徹底研究、戴至中譯、博碩文化 ç這本好入門,但是讀完這本還是不夠ㄉ。
- Ivor Horton的C++程式設計手冊、何霖譯、博碩文化
- C++ Primer中文版、侯捷譯、碁峰
- 最新Windows程式設計實例入門 Visual C++實作、Yasutaka Kumei著、博碩文化 ç 學VC先看這本,比較有成就感
Q3. 一般市面上IVS所使用的攝影影像大概有那幾種規格大小?
A3: 請參考ACTi的網頁,www.acti.com,推薦ACTi是因為價格、規格,都很優。
一般來說,目前IVS處理的格式大多是D1 Size。
Q4. 一秒內需要處理多少張影像?
A4: 業界目前沒有標準,以市場產品來說的話,最少六張以上。
Q5. 是否須做攝影機被搖晃、被塗鴉等偵測? 用什麼方式可以偵測?
A5: 最好要作出這些保護偵測,可以減少誤偵測的部分。請參考拙作『數位影像分析之智慧型監視系統』的『5-12場景切換』。
Q6. 在遺失遺留物偵測、入侵偵測、虛擬圍籬偵測、滯留偵測等是否都需要做物件追蹤?若是多個物件在畫面中該怎麼追蹤?
A6: 只要關於物體的演算法,最好都要作物件追蹤,但是若需求非常明顯,為求效率,就可以不用最物件追蹤,作範圍標示即可。這點在人臉偵測中有提到,利用輪廓演算法,將其改良,就可以做多個物件追蹤。或者用老方法,連通標記法。或者用迭代法也可。我自己偏好使用輪廓演算法改良,因為速度比較快。
Q7. 在您的書中有提到許多偵測方法,但是對於每一項偵測並沒有一個完整的流程,可以請您列出遺失遺留物偵測、入侵偵測、虛擬圍籬偵測、滯留偵測等各種偵測的完整流程嗎?
A7: 因為目前數位影像分析在學術界或業界都沒有標準,所以要列出完整流程也只是我自己的流程,而非一個公認的流程。建議您先研究關於物件分割,再研究物件追蹤,只要物件追蹤可行,要研究遺失遺留物偵測、入侵偵測、虛擬圍籬偵測、滯留偵測就不會太難。每一種演算法的難易度都可以調整,不過最主要還是分離不開 物件、事件、條件 。
Q8. 在目前的物件追蹤有那些演算法可參考?
A8: 我建議先瞭解物件分割,而後利用空間資訊來判斷物件追蹤。這點做完之後,就可以利用相似度演算法加強。這是最基礎的做法。當然如果要做到實用的話,請參考Particle Filter Object Tracking
Q9: 非常感謝您在百忙之中為學生解開疑問,學生目前有在研讀 motion detection 和 object tracking 相關的論文,但是很少有paper 提到在object tracking之後如何進行遺失遺留物偵測、入侵偵測、虛擬圍籬偵測、滯留偵測的部份如何處理,不知您是否可以講解這些部份的處理,解開學生的疑惑,謝謝。
A9: 遺失遺留物偵測:
1. 如果有Object Tracking,計算當物體停留多少時間(畫格Frame),就出現警示。同樣的有物體由畫面內往外移,就出現警示。
2. 如果沒有Object Tracking,利用像素差異,以及細節判斷,就可以作出遺失遺留物偵測。主要關鍵在建立背景的時機。
入侵偵測:
1. 如果有Object Tracking,計算物體是否與警示區重疊,用AND邏輯運算即可。還可以判斷方向性,當物體由外而內才發生警示,反之,則不警示。
2. 如果沒有Object Tracking,計算前景是否與警示區重疊,用AND邏輯運算。
虛擬圍籬偵測:
1. 如果有Object Tracking,計算圍籬立體位置(或用狄卡爾座標判斷),若物件超過圍籬(簡單作法是物件低於圍籬座標),則判斷穿越圍籬。
2. 如果沒有Object Tracking,計算前景是否與圍籬重疊,切割前景物件,細節調整,判斷是否穿越圍籬。
滯留偵測:
1. 如果有Object Tracking,當物件移動位置與前一位置差異不大時,則開始計數,超過時間(門檻值),則判定滯留。
2. 如果沒有Object Tracking,當某一前景像素出現,建立計數表,計數表內的數值超過門檻值,則判定滯留。(雖是蠢方法,但有國際公司早期版本就是用這種方法)
您會發現數位影像處理智慧型視訊分析人工智慧,慢慢的就會越來越接近人工智慧的部分了。加油。
Q10. 在您寄給我的[監視視訊中有關物件分離與追蹤技術]這篇論文中,於3-1 Motion Detection的部份,學生不了解為什麼要將循序畫面差分影像(亦
即Dt=Tt-Tt-1)與背景差分影像(Db = Tt − B)在二元化之後取交集?這樣不是會得到一張非常破損的影像,而且之後還使用opening運算,之後得到的影像不是破碎的更嚴重?
A10. 請您先瞭解義大利發表的論文,S1 = T1 – T2, S2 = T2 – T3, Mask = S1 and S2,Object = T2 and Mask。先瞭解這樣的原理之後,您就會豁然開朗。用理解的會花很多時間,用筆在紙上畫每一個流程的影像及圖,或者直接實作,馬上就會理解了。至於破損的問題,關係到門檻值,每個人設定的門檻值都不同,結果也就會不同。基本上快速物件追蹤法,可以避免光線、色差的變化,因此我都應用為參考資料或作為事件觸發之用。其實快速物件追蹤法還有很大的改良空間,可以改得更快。
Q11. 在很多的文章中,不管是利用循序畫面差分影像或者背景差分影像獲得移動影像後,都沒有提到如何重建這些破損的影像,頂多使用dilation與erosion來消除雜訊與稍微填補一些坑洞,但是所得到的影像還是會有同一物件卻分成多個部份的情形,這種情形該如何解決?這樣會影響到後續的處理嗎?
A11. 使用Dilation和Erosion是最基本的方法,進階一點可使用Convex Hulls(中文有人叫:凸包法,呵呵~~好饒口)。還可以再精進一點,使用濾波器或者類聚器,加以分析。簡單的類聚器,例如:CMeans。值得研究看看。
Q12: 非常感謝您不吝分享您的研究成果,讓小弟獲益良多,由於小弟以往均是以VB6開發一些商業類的軟體業餘對影像方面的領域相當有興趣,因此在購入賴老師的書後獲益良多,但因本身數學基礎不好,因此在學習上較為吃力
A12: 歡迎您對於數位影像處理有興趣,數學基礎不是主要關鍵,若能在實做加強,用直覺邏輯的方法,也是一個很好的方向。往後有相關的題目,歡迎一起研究。
Q13:滯留偵測:
如果有Object Tracking,當物件移動位置與前一位置差異不大時,則開始計數,超過時間(門檻值),則判定滯留。
Q13-1.這是指全景偵測嗎?對物件移動位置與前一位置差異不大這個限制條件不太了解。是否滯 留一定會有位移不大的情形?
A13-1: 業界產品來說,近年來改採用 Object Tracking 的方法,早期則是使用像素時間表,所謂物件移動位置的限制條件因環境情境的不同而有所不同,實際上在使用時,使用者會希望以時間為單位,而對設計者來說會比較喜歡以畫格(frame)為單位。做產品,滯留要看使用者定義。做學術,滯留必須要定義清楚。一個物件出現在畫面時間過久,就設定為滯留,這是我的方式。攝影機拍攝的場景不可能很大,因此移動位置就顯得短少些。
Q13-2.若是全景偵測,當物體的移動較大,但是卻是滯留的狀況,就不容易偵測出來,難度是否 在位移的門檻值不好定?
A13-2: 您這個問題的場景應該是室內環境,所以物體移動較大,但卻是滯留。所以在室內的話,可以用像素時間表的方法。其實要依照場景來決定會比較好,也就是這功能的設定交由使用者去決定。我一直在提場景,主要就是希望您可以找到關於真正保全業監視的畫面,這樣子研究才不會失去實用性。
真正監視器室外場景。
室內場景。
Q13-3.若不是全景偵測,而是區域偵測,是否就不需偵測物體移動位置的差異,只要物體在限制 區域內就一直計數,超過時間,則判定滯留?
A13-3: 無論是全景偵測或是區域偵測,用的方法都是一樣的,不過若是區域偵測就變成警戒區偵測,所以要請您先思考,定義清楚您要做的場景為何。這樣才能有方向及目標。上圖兩個場景用的方法可以是一樣的,但我建議剛開始研究最好先以小目標達成法,然後您會慢慢發現,有一些演算法可以化簡、共用,自然而然就可以找到方法。我不是在講心法。而是您目前實作經驗可能不足,由數學或學理來推斷的話,可能也需要花些時間。所以一次到位可能沒那麼容易,先把 Object Tracking做出來,路就寬廣了。Object Tracking 也不是那麼簡單,您會遇到光影跟顏色的變化,場景不同,陰天、雨天、艷陽天,這些都要一一克服。這些我在書中都沒有提及,是因為怕把讀者嚇跑,而您這麼有興趣,實在應該試試看。例如:下雨天的場景,把雨滴濾掉,變成沒有下雨的場景。這就很有趣了。
Q14:遺失遺留物偵測
遺失物:
如果有Object Tracking,計算當物體停留多少時間(畫格Frame),就出現警示。同樣的有物體由畫面內往外移,就出現警示。
Q14-1.需否先決定偵測的物體(範圍)?(全景or區域)
A14-1: 這點與您做的研究方向有關,是做學術還是產品,以國際業界產品規格來說是全景。以台北市規格來說物件大小是50x50pixels的滯留物要被偵測出來。學術上你做區域也可以,只要方法快速(比前人),準確,以及有所貢獻,那就可以了。
Q14-2.開始偵測後,如何決定是否有物體遺失? (1).是不是需先將偵測區域儲存起來?若要儲存的話,需要隨著時間去更新偵測區域的亮度嗎?這樣應該會比較準確吧?
A14-2: 目前我所知道的方法都是必須要建立背景,也就是需要儲存偵測區域。當然一定要隨著時間場景的變化而有所更新。最簡單的方式就是時間背景法的應用。只要您可以作出在人來人往的捷運站前放下滯留物,而被偵測出來的話。就證明您已經進階了。
Q14-3:(2).若是偵測區域的話,是否在偵測區域內沒有移動資訊的時候來判斷偵測區域是否有改變?需設臨界值嗎?
A14-3: 建議您去找一找IBM的漸進式背景法,讀過一遍,保證您會有很大的收穫。不用實作,因為他是做彩色的,運算量太大,但要理解。
Q14-4: (3).當偵測區域有移動資訊的時候(遮蔽or交錯),是否還有方法可做失物偵測?還是一定要在沒有移動資訊的時候才能做偵測?
A14-4: 實務上偵測區域一定會有遮蔽或交錯的問題,還記得有Object Tracking嗎?用Object Tracking就可以解決這樣的問題。
Q15: 虛擬圍籬偵測:
如果有Object Tracking,計算圍籬立體位置(或用狄卡爾座標判斷),若物件超過圍籬(簡單作法是物件低於圍籬座標),則判斷穿越圍籬。
Q15-1.如何建立圍籬立體位置,只有一架攝影機可以做到嗎?
A15-1: 有沒有看過遊戲人工智慧的書籍,或者會影像處理軟體,只要具有圖層的概念,就可以模擬立體圍籬。一架攝影機當然做得到,這是學界四年科專的研究成果之一。
Q15-2.若並非一定要做圍籬立體位置的話,如何判斷物體有越過虛擬圍籬?
A15-2: 這用筆紙畫一畫場景圖及流程圖就可以理解了。請問您用2D如何判定物體的前後順序呢?這題回答出來您就解了立體圍籬的問題。簡單的很,真的,知道答案您一定會笑死,然後想扁我一頓。會寫遊戲設計的人都知道的方法,有玩過2D Game吧。思考一下。
別怪我給您題目做,因為如果真的要研究的話,我怕把讀者嚇跑。不過您真的很有心,我會循序漸進的告訴您答案。
Q16.在您的書中所提到的[複雜背景之監視系統失物及遺物演算法]中,關於5-1-2-1的時間背景法 部份:
(1).是否能偵測出靜態前景物?
A16-1-1: 靜態的前景物被拿走就會偵測到物件遺失。
(2).在更新背景的式子中除以255,這個255的值是如何定的?是否會影響到所建立的背景對於環境變化的靈敏度?若調小會如何?調大會如何?在整個演算法中扮演什麼樣的角色?會否影響到後續的處理?
A16-1-2: 除以255是因為灰階的關係。這個值的高低會影像到環境(時間)變化的靈敏度。調小更新速度變快,調大更新速度變慢。在這個演算法扮演穩定背景的作用。會影響到後續的處理。
Q16-2.在5-1-2-2中的邊緣萃取中,對於Edgo=P-B+g(x,y)的部份: P-B是二值化後的值嗎?而g(x,y)是什麼值? P-B+g(x,y)是什麼值? P-B+g(x,y)之後是否還有其他運算才得到Edgo?這邊的值真的很怪Edgo是什麼值?
A16-2: 在一般數位影像的論文中,若沒有提及名稱用途,Edge代表邊緣,B代表背景,g代表邊緣(斜率)。理解了名稱,應該就可以瞭解數學式的用途了。
Q16-3.在5-1-2-2中的形狀輪廓中,對於每塊移動區域的連接:
A16-3: 這邊問的好,代表您真的有實作過。
(1).怎麼判斷那些區塊是屬於同一物體,區塊間到底要不要連接?
A16-3-1: 我們可以參考其他資訊來做判斷,例如:影像解析度。還記得有邊緣Edge的加入嗎?因為有邊緣我們就可以推斷區塊是否為同一個物體。然後完連連看的遊戲,就可以獲得一個物件了。這是在上一個階段獲得的。
(2).若同時有多個物體,而移動區塊卻以最接近的區塊來連接,那整張畫面不就只剩下一個物體?或者明明是a物體的區塊卻連接到b物體?
A16-3-2: 多個物體的邊緣幾乎是不會連接。若有連接情形那是因為太近或重疊所造成的。
(3).做完區塊連接後,物體的形狀不是還呈現有破洞的情形,該怎麼處理?這是我最好奇的,好多paper從移動偵測後做完去雜訊,之後就開始做物件追蹤了,都沒提到這些還有破洞的物體該怎麼辦?
A16-3-3: 破洞是一定會的。最簡單的方法就是Erosion, Dilation,不過我想您一定已經試過了。顏色、形狀邊緣都是很好的參數,顏色方面可以採用Cmeans,形狀方面可以參考邊緣偵測,自己設計一個濾波器也可。不過這裡有一點我覺得怪怪的,應該是做完去雜訊後再作移動偵測,為何您是說先做移動偵測再去雜訊呢?如果您說的是真的,我很有興趣看看那些Paper。還有您也可以用最小距離法做判斷物體 (S1-S2) * (S1-S2) ,這樣就可以拉大差距了。
(4).在 shape filled 的部份,若有多個物體該怎麼 filled ,有可能一個 一個去 filled?那樣不是太耗費記憶體與時間?有什麼方式可節省時間與記憶體?
A16-3-4: 您是使用何種語言開發呢?以及您是使用多少解析度做研究呢?有多個物體當然要一個一個去搜尋跟框選,要不然怎麼獲得完整物件資訊呢?去框選的時候我們還可以順便計算物件的高、寬、週長、形狀、座標、週長,等等。而且使用D1 Size同時圈選三十個物件,也還可以保持15FPS。耗費記憶體也很少。怎麼會多呢?而且我們現在都使用GB 以上的記憶體,D1 Size的物件也不過幾百Pixel,又是灰階,應該不會耗費記憶體太多。除非您做彩色三維空間,那我保證一定動不了,因為我已經實驗過了。
Q17.在5-1-2-4的sence的部份, 您在blog中有提到[場景資訊沒有存到時間背景資訊的必要,都是時間背景資訊 存到場景資訊中,所以正好相反。],我不懂時間背景資訊為什麼存到場景資訊? 場景資訊不是只用來判斷背景是否需立即更新嗎?
場景資訊還有其他作用嗎?
A17: 實作時,當Scene到達某一門檻值時,就直接將當下的畫面(Frame)複製到背景資訊(B)。實際應用時,當背景畫面變換極大時,或用手指遮住輸入裝置鏡頭,重新放開時,背景會自動更新,而整個物件抽取還是可以繼續進行。場景和背景一樣都需要更新,否則就會發生每過一段時間場景差異就達到門檻值,而重新更新。而時間資訊存入場景與背景的更新值可以透過不同條件來決定。簡單的說,背景資訊是屬於漸進式的更新,更新來源是時間資訊;場景資訊是屬於間斷式的更新,更新來源也是時間資訊。或者是其他有參考價值的資訊都可以作為更新來源。背景是提供即時的抽取前景之用,場景主要用來提供畫面遮蔽或拍攝位置移動時的機制。
Q18.在5-1-3所用到的場景資訊是指什麼?怎麼突然有時間背景資訊更新到場景資訊,在失物與遺物的部份,可否再說明清楚。您所提到的失物與遺物演算法要確認沒有移動資訊,這個移動資訊是指什麼?是frame中都 沒有移動物嗎?這似乎不太可能?環境使用上就會被限制。
A18: 當時間背景法的背景處於穩定狀態時,就將該畫面更新為場景資訊(Scene Information)。而時間背景法的更新速度是可以做調整的,透過像素的比例,來決定更新的速度。
這個方法在使用上會受到環境的限制,您說的沒錯,他只有遇到沒有移動資訊的時候,才會計算出遺失遺留的物體位置,所以只適合室內場景使用。
要做到在人來人往的捷運站前放置物品,而被偵測出來。我可提供兩個方向,第一個就是改良本方法,讓本方法也可以在有移動資訊的情況下計算出遺失遺留物;第二個方法就是採用漸進式背景法,可參考IBM的網頁。由於漸進式背景法製作難度比較高,所以沒有放在書中。本書的內容適合學校研究教學使用,算是入門級。您已經發現了進階級的問題,進步很快。加油。