Skip to main content

關於『數位影像分析之智慧型監視系統』的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年到現在最新的都有。)
基礎:
  • 數位影像處理技術手冊,賴岱佑,文魁 使用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先看這本,比較有成就感
其他還有國內作家的書籍,不過必須具有Standard的知識,讀起來才會快。因為不適合入門,所以先不列出。以上供您參考。

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的網頁。由於漸進式背景法製作難度比較高,所以沒有放在書中。本書的內容適合學校研究教學使用,算是入門級。您已經發現了進階級的問題,進步很快。加油。

Popular posts from this blog

Python 日期與時間的處理

Visual Basic 6.0 (VB6) 程式語言案例學習 (10. 條碼列印程式)

寫作:波蘭文學習之旅:1-1. 波蘭文字母與發音(注音版)

Python 日期與時間的處理

Image

Visual Basic 6.0 (VB6) 程式語言案例學習 (10. 條碼列印程式)

Image

寫作:波蘭文學習之旅:1-1. 波蘭文字母與發音(注音版)

Image

數位影像處理:最佳化處理策略之快速消除扭曲演算法

Image

Visual Basic 6.0 (VB6) 程式語言案例學習 (04. 人事考勤管理系統)

Image

用10種程式語言做影像二值化(Image binarization)

Visual Basic 6.0 (VB6) 程式語言案例學習 (07. 收據列印程式)

Image

Visual Basic .Net (VB.Net) 程式語言案例學習 (03. 場地預約系統)

Image

Visual Basic 6.0 (VB6) 程式語言案例學習 (11. 生產線拍照程式)

Image

Visual Basic .Net (VB.Net) 程式語言案例學習 (06. 題庫測驗系統)

Image