星期四, 5月 28, 2009

Week 16: 如何去除監視畫面中的雜訊影響?

0. 我噗浪的帳號: YKLee
 如果期末 WebCam 程式寫不出來, 這邊可以找到我...

1. 如何去除監視畫面中的雜訊影響?
 
當我們建立好背景影像, 如果沒有物件闖入監視畫面中, 在最理想的狀況下, 監視畫面應該是全黑的才對。可是由於光線變化及雜訊的影響下, 總會有一些像素點與原來背景的色彩值差距過大, 因此產生上圖中的小白點。
 
 
 
我們該如何去除這些雜訊點的影響呢?
 
 

如果我們將畫面分成一個一個的 8*8 區塊, 在區塊中的亮點總數如果沒有超過一半(32), 那我們就將整個區塊設成全黑區塊, 從上圖的實驗我們可以發現, 右下角的圖片已經全黑了。
 
 
 
如果區塊中的亮點總數如果超過一半了, 那我們就將整個區塊設成全白區塊, 從上圖的實驗我們可以發現, 右下角的圖片只有手部的部分被設成全白區塊。

 SampleProgram16.txt
 
2. 如何與畫面中的虛擬物件互動呢?



換句話說, 就是伸手將畫面中的 WebCam 拍掉!



SampleProgram17.txt
 

星期二, 5月 26, 2009

Week 15: 如何在視訊視窗添加圖片?

直接將視訊擷取視窗中, (20, 20) 至 (50, 50) 的方塊, 塗成綠色:
SampleProgram13.txt

讀入一張 BMP 影像, 並將其色彩值存到 ucMarkR[][], ucMarkG[][], ucMarkB[][] 之中:
SampleProgram14.txt

將 ucMarkR[][], ucMarkG[][], ucMarkB[][] 中的影像, 顯示在視訊擷取視窗中:
SampleProgram15.txt

星期二, 5月 19, 2009

Week 14: 背景圖相關之理論與實作

今天一上課, 我們先補充關於如何取背景圖的理論。在攝影機不動的情況下拍攝靜物, 照理說, 連續兩個畫面(frame)應該是完全一樣的; 然而, 寫程式分析, 卻發現兩張畫面看起來一樣, 實際上卻有稍稍不同, 色彩值因為光線變化 (也許是因為光源閃爍, 或是空氣中的灰塵影響!), 讓不同畫面中, 相同位置的色彩值產生細微的不同。

假設在沒有雜訊的情況下,
第 k 個畫面的位置 (i,j) 的色彩值為 f k (i,j), 雜訊的函數為 X k(i,j),

假設我們所擷取到的色彩值為 F k (i,j),
因此,

 F k (i,j) = f k (i,j) + X k(i,j)

如果我們取連續 30 個畫面色彩值之總和

如何計算色彩距離的臨界值(Threshold) 的範例程式:
SampleProgram12.txt
 

星期二, 5月 12, 2009

Week 13: 背景圖與臨界值的建立

1. 將監視是否有物件的輸出畫面改成黑白畫面
 白: 與背景圖出現過大的色彩差距
 黑: 與背景圖色彩相近
 SampleProgram9.txt

2. 如何建立一張背景圖?
 取連續多張背景影像的平均。
 可以設計另外一個 Callback Function, 專門負責連續取 30 個畫面,
 將其平均後, 當作背景影像。
 SampleProgram10.txt
 SampleProgram11.txt

3. 如何計算色彩距離的臨界值 (Threshold)?
 當我們取得一張背景圖後, 我們如何判斷某個像素點是屬於背景?
 還是有物件進入到我們的畫面中呢?

Note: 下週上課以前務必繳交期末專案構想到 Homework Show @ VCGC,
   缺交的同學期末成績扣 5 分。

 

Maximal Connected Component

1. What's maximal connected component?
 a. Maximal Connected Component (Graph Theory)
 b. Connected Component Labeling

星期二, 5月 05, 2009

Week 13: Viedo Format

上星期期中考第三階段, 有不少同學發現明明同一個程式, 借用別人的 WebCam 來考試, 程式就可以順利執行, 用自己買的 WebCam 來 DEMO 程式, 偏偏就執行不出來。

我們今天就是要針對這個問題討論, 希望同學可以了解不同的攝影機, 傳送視訊資料進電腦的方式也是可以不同的, 一個好的程式設計師應該有能力可以處理不同廠牌的 WebCam, 一樣可以寫出一個好的程式來控制它的。



上面這個 Viedo Format 對話視窗是使用 capDlgVideoFormat(hwndVideo) 這個函式開啟的, 由視訊裝置的硬體商所提供的, 當你灌好驅動程式時, 就可以用 capDlgVideoFormat 這個指令將其呼叫出來, 請同學自己寫程式試試看, 看看自己的 WebCam 提供了哪些視訊格式。

視窗的左邊是選擇 解析度, 也就是攝影機取像的畫面的大小; 中間的 圖素深度(位元)及壓縮 可以選擇用不同的格式來傳送每一個圖素 (pixel) 的色彩值, 及需不需要壓縮; 最右邊的大小(位元組) 會依照前面兩項的選擇, 自動計算出所需要的緩衝記憶體的大小。因此, 解析度越高, 最右邊的位元組大小當然也會跟著提高。

另外, 不同的圖像深度所需要的記憶體大小也會跟著不同。同學可以參考下列網頁, 以便了解不同的格式之間的差異為何。
 
1. http://www.fourcc.org/yuv.php

2. Wikipedia: YUV

今天課堂上第二個討論主軸是介紹去年修課同學的期末作品 Cam Game Show 2008 

( Note )
本週作業, 請同學將自己的期末作業的初步構想貼到 Homework Show of VCGC 部落格中。