本週的討論主題是期末專案發想。
第一節課請同學欣賞本課程歷年修課同學的作品。
a) 2009 作品集
b) 2008 作品集
c) 2007 作品集
第二節課請同學從過去的作品中挑出一個你最喜歡的作品, 寫在 作業部落格 中, 我們將在課堂上與你深入討論相關技術。
第三節課請同學開始發想期末專案, 並將構想寫到 作業部落格 中。
其他相關資料:
a) Sony PS EyeToy:
b) Apple's App.
星期二, 5月 18, 2010
星期一, 5月 17, 2010
Week 13: 如何透過視訊與虛擬物件互動
繼上週討論如何使用回呼函數來進行視訊監控後, 本週所要討論的主題就是如何透過視訊與虛擬物件互動。
這邊提到的虛擬物件, 指的就是透過第九週所學會的技巧 (如何在視訊擷取視窗中添加物件), 我們在視訊擷取視窗中所添加的虛擬物件。
首先, 我們要準備要和我們互動的虛擬物件, 本週我打算使用 facebook 上的小遊戲 Zoo World 中的畫的非常可愛的小動物們。
我利用 Photoshop 將斑點壁虎裁剪下來, 並將白色背景修改成純白色(255, 255, 255), 並存成 SpottedGecko.bmp 檔, 如下圖:
將背景色設成純白色的好處有二:
1) 如果我們要將圖片顯示在 Form 上, 只要將影像物件的屬性 Transparent 設成 true, 這樣子在程式執行時, 背景色就不會被顯示出來。
下圖就是程式執行時, 影像 SpottedGecko.bmp 白色的背景並不會顯示出來...
2) 當我們要將 SpottedGecko.bmp 的影像放進視訊擷取視窗時, 我們就可以使用 if 判斷指令, 當色彩不等於為純白色 (255, 255, 255) 時, 我們才去修改緩衝區記憶體中的資料。
假設, 我們要將 SpottedGecko.bmp 這張影像放到視訊擷取視窗的 ( iObjectTop, iObjectLeft ) 位置上, 影像的高、寬, 分別為 iObjectHeight, iObjectWidth。
因此, 視訊擷取視窗的座標範圍在 ( iObjectTop, iObjectLeft, iObjectTop+iObjectHeight, iObjectLeft+iObjectWidth) 這個矩形範圍中時, 擷取視窗的視訊資料通通都要改成 SpottedGecko.bmp 影像色彩資料。
範例程式 VGC-2010S-SP15.txt
既然, 我們已經把虛擬的斑點壁虎放到視訊擷取視窗中, 接下來要考慮的問題就是如何透過網路攝影機來互動呢 ?
最簡單的一種互動方式就是當有人碰觸到虛擬物件時, 虛擬物件就消失不見!
首先, 我們用一個布林變數 bool bObjectOnFrame 來表示虛擬物件該不該出現在視訊擷取視窗中。在回呼函數中, 我們是否要去修改緩衝區記憶體中的視訊畫面資料, 完全取決於 bObjectOnFrame 的值是 true? 還是 false ?
因此, 在範例程式 VGC-2010S-SP15.txt 中, 我們只要簡單地在修改緩衝區記憶體之前加入關於 bObjectOnFrame 的判斷式即可。另外, 我們新增一個按鈕, 來手動修改 bObjectOnFrame 的值, 讓虛擬物件消失, 或是重現。
範例程式 VGC-2010S-SP16.txt
接下來, 當我們發現有人碰觸到虛擬物件, 只要將 bObjectOnFrame 設定為 false, 便可以讓虛擬物件在下一個畫面中消失。
為了消除雜訊的干擾, 在上星期的課程中, 我們將視訊監控以 8*8 大小的區塊為單位, 當區塊中的白點總數超過一半 (>31) 時, 整個區塊都輸出成白色區塊, 如下圖。
從 另外一種角度思考, 其實就是把整個畫面縮小成 40*30 的大小來監控, 這樣那些小雜訊就縮小到完全沒有影響了, 如下圖。
同樣的道理, 視訊擷取視窗應該也要縮小成 40*30 大小來考慮如何互動才對...
為了方便同學思考, 我們將上面的縮圖放大,
原先, 虛擬斑點壁虎出現在視訊擷取視窗的座標範圍是 ( iObjectTop, iObjectLeft, iObjectTop+iObjectHeight, iObjectLeft+iObjectWidth), 此時, 我們要重新換算為在縮圖中的座標範圍。我們用 (iBlockTop1, iBlockLeft1) 來表示虛擬斑點壁虎在縮圖中的左上角座標, 另外用 (iBlockTop2, iBlockLeft2) 來表示虛擬斑點壁虎在縮圖中的右下角座標。
iBlockTop1 = iObjectTop / 8;
iBlockLeft1 = iObjectLeft / 8;
iBlockTop2 = (iObjectTop + iObjectHeight) / 8;
iBlockLeft2 = (iObjectLeft + iObjectWidth) / 8;
因此, 當有某一區塊 (m,n) 落在 (iBlockTop1, iBlockLeft1) 與 (iBlockTop2, iBlockLeft2) 所圍起來的矩形之中時, 便表示要將 bObjectOnFrame 這個變數設定為 false, 這樣, 虛擬物件就會從下一個畫面中消失, 達到我們所要進行的互動效果。
範例程式 VGC-2010S-SP17.txt
這邊提到的虛擬物件, 指的就是透過第九週所學會的技巧 (如何在視訊擷取視窗中添加物件), 我們在視訊擷取視窗中所添加的虛擬物件。
首先, 我們要準備要和我們互動的虛擬物件, 本週我打算使用 facebook 上的小遊戲 Zoo World 中的畫的非常可愛的小動物們。
我利用 Photoshop 將斑點壁虎裁剪下來, 並將白色背景修改成純白色(255, 255, 255), 並存成 SpottedGecko.bmp 檔, 如下圖:
將背景色設成純白色的好處有二:
1) 如果我們要將圖片顯示在 Form 上, 只要將影像物件的屬性 Transparent 設成 true, 這樣子在程式執行時, 背景色就不會被顯示出來。
下圖就是程式執行時, 影像 SpottedGecko.bmp 白色的背景並不會顯示出來...
2) 當我們要將 SpottedGecko.bmp 的影像放進視訊擷取視窗時, 我們就可以使用 if 判斷指令, 當色彩不等於為純白色 (255, 255, 255) 時, 我們才去修改緩衝區記憶體中的資料。
假設, 我們要將 SpottedGecko.bmp 這張影像放到視訊擷取視窗的 ( iObjectTop, iObjectLeft ) 位置上, 影像的高、寬, 分別為 iObjectHeight, iObjectWidth。
因此, 視訊擷取視窗的座標範圍在 ( iObjectTop, iObjectLeft, iObjectTop+iObjectHeight, iObjectLeft+iObjectWidth) 這個矩形範圍中時, 擷取視窗的視訊資料通通都要改成 SpottedGecko.bmp 影像色彩資料。
範例程式 VGC-2010S-SP15.txt
既然, 我們已經把虛擬的斑點壁虎放到視訊擷取視窗中, 接下來要考慮的問題就是如何透過網路攝影機來互動呢 ?
最簡單的一種互動方式就是當有人碰觸到虛擬物件時, 虛擬物件就消失不見!
首先, 我們用一個布林變數 bool bObjectOnFrame 來表示虛擬物件該不該出現在視訊擷取視窗中。在回呼函數中, 我們是否要去修改緩衝區記憶體中的視訊畫面資料, 完全取決於 bObjectOnFrame 的值是 true? 還是 false ?
因此, 在範例程式 VGC-2010S-SP15.txt 中, 我們只要簡單地在修改緩衝區記憶體之前加入關於 bObjectOnFrame 的判斷式即可。另外, 我們新增一個按鈕, 來手動修改 bObjectOnFrame 的值, 讓虛擬物件消失, 或是重現。
範例程式 VGC-2010S-SP16.txt
接下來, 當我們發現有人碰觸到虛擬物件, 只要將 bObjectOnFrame 設定為 false, 便可以讓虛擬物件在下一個畫面中消失。
為了消除雜訊的干擾, 在上星期的課程中, 我們將視訊監控以 8*8 大小的區塊為單位, 當區塊中的白點總數超過一半 (>31) 時, 整個區塊都輸出成白色區塊, 如下圖。
從 另外一種角度思考, 其實就是把整個畫面縮小成 40*30 的大小來監控, 這樣那些小雜訊就縮小到完全沒有影響了, 如下圖。
同樣的道理, 視訊擷取視窗應該也要縮小成 40*30 大小來考慮如何互動才對...
為了方便同學思考, 我們將上面的縮圖放大,
原先, 虛擬斑點壁虎出現在視訊擷取視窗的座標範圍是 ( iObjectTop, iObjectLeft, iObjectTop+iObjectHeight, iObjectLeft+iObjectWidth), 此時, 我們要重新換算為在縮圖中的座標範圍。我們用 (iBlockTop1, iBlockLeft1) 來表示虛擬斑點壁虎在縮圖中的左上角座標, 另外用 (iBlockTop2, iBlockLeft2) 來表示虛擬斑點壁虎在縮圖中的右下角座標。
iBlockTop1 = iObjectTop / 8;
iBlockLeft1 = iObjectLeft / 8;
iBlockTop2 = (iObjectTop + iObjectHeight) / 8;
iBlockLeft2 = (iObjectLeft + iObjectWidth) / 8;
因此, 當有某一區塊 (m,n) 落在 (iBlockTop1, iBlockLeft1) 與 (iBlockTop2, iBlockLeft2) 所圍起來的矩形之中時, 便表示要將 bObjectOnFrame 這個變數設定為 false, 這樣, 虛擬物件就會從下一個畫面中消失, 達到我們所要進行的互動效果。
範例程式 VGC-2010S-SP17.txt
星期二, 5月 11, 2010
Week 12: 如何使用回呼函數進行視訊監控?
本週的課程主題是: 如何使用回呼函數(callback function) 來進行視訊監控 ?
在上週我們的討論主題是如何使用 callback function 來建立一張背景影像?
在 第六週的課程 中, 我們曾討論: 如何看待兩張影像之間的差別? 如果我們把背景影像當作第一張影像, 而回呼函數中, 緩衝區記憶體的影像當做第二張影像, 這樣我們就可以去計算這兩張影像的差別。
最後, 我們透過第八週的實驗: 將視訊擷取視窗的內容即時顯示於影像物件之中, 所學到的技術, 將計算出來的差別影像, 顯示在影像物件之中。
範例程式 VGC-2010S-SP13.txt
為了消除雜訊的干擾, 我們將視訊監控以 8*8 大小的區塊為單位, 當區塊中的白點總數超過一半 (>31) 時, 整個區塊都輸出成白色區塊, 如下圖。
範例程式 VGC-2010S-SP14.txt
在上週我們的討論主題是如何使用 callback function 來建立一張背景影像?
在 第六週的課程 中, 我們曾討論: 如何看待兩張影像之間的差別? 如果我們把背景影像當作第一張影像, 而回呼函數中, 緩衝區記憶體的影像當做第二張影像, 這樣我們就可以去計算這兩張影像的差別。
最後, 我們透過第八週的實驗: 將視訊擷取視窗的內容即時顯示於影像物件之中, 所學到的技術, 將計算出來的差別影像, 顯示在影像物件之中。
範例程式 VGC-2010S-SP13.txt
為了消除雜訊的干擾, 我們將視訊監控以 8*8 大小的區塊為單位, 當區塊中的白點總數超過一半 (>31) 時, 整個區塊都輸出成白色區塊, 如下圖。
範例程式 VGC-2010S-SP14.txt
星期二, 5月 04, 2010
Week 11: 如何建立背景影像?
今天的課程主題是如何利用 callback function 建立背景影像?
首先, 我們先補充關於如何取背景圖的理論。
在攝影機不動的情況下拍攝靜物, 照理說, 連續兩個畫面(frame)應該是完全一樣的; 然而, 寫程式分析, 卻發現兩張畫面看起來一樣, 實際上卻有稍稍不同, 色彩值因為光線變化 (也許是因為光源閃爍, 或是空氣中的灰塵影響。), 讓不同畫面中, 相同位置的色彩值產生細微的不同。
假設在沒有雜訊的情況下, 我們所拍攝到的色彩值是 F(i,j)
第 k 個畫面的位置 (i,j) 上, 雜訊的函數為 Xk(i,j),
假設我們所擷取到的色彩值為 Fk(i,j),
因此,
Fk(i,j) = F(i,j) + Xk(i,j)
如果我們取連續 30 個畫面色彩值之總和,
F1(i,j) + F2(i,j) + ... + F30(i,j)
= [F(i,j) + X1(i,j)] + [F(i,j) + X2(i,j)] + ... + [F(i,j) + X30(i,j)]
= 30 F(i,j) + [ X1(i,j) + X2(i,j) + ... + X30(i,j) ]
如果雜訊的平均值是 0, 即
X1(i,j) + X2(i,j) + ... + X30(i,j) = 0
再將上述式子除以 30 求平均, 那麼我們就可以得到 F(i,j)。
範例程式 VGC-2010S-SP12.txt
下列兩張圖中, 上圖是取像自單張影像, 下圖則是 30 張影像的平均影像。
很明顯地, 上圖的雜訊較多, 下圖則是平滑多了!
首先, 我們先補充關於如何取背景圖的理論。
在攝影機不動的情況下拍攝靜物, 照理說, 連續兩個畫面(frame)應該是完全一樣的; 然而, 寫程式分析, 卻發現兩張畫面看起來一樣, 實際上卻有稍稍不同, 色彩值因為光線變化 (也許是因為光源閃爍, 或是空氣中的灰塵影響。), 讓不同畫面中, 相同位置的色彩值產生細微的不同。
假設在沒有雜訊的情況下, 我們所拍攝到的色彩值是 F(i,j)
第 k 個畫面的位置 (i,j) 上, 雜訊的函數為 Xk(i,j),
假設我們所擷取到的色彩值為 Fk(i,j),
因此,
Fk(i,j) = F(i,j) + Xk(i,j)
如果我們取連續 30 個畫面色彩值之總和,
F1(i,j) + F2(i,j) + ... + F30(i,j)
= [F(i,j) + X1(i,j)] + [F(i,j) + X2(i,j)] + ... + [F(i,j) + X30(i,j)]
= 30 F(i,j) + [ X1(i,j) + X2(i,j) + ... + X30(i,j) ]
如果雜訊的平均值是 0, 即
X1(i,j) + X2(i,j) + ... + X30(i,j) = 0
再將上述式子除以 30 求平均, 那麼我們就可以得到 F(i,j)。
範例程式 VGC-2010S-SP12.txt
下列兩張圖中, 上圖是取像自單張影像, 下圖則是 30 張影像的平均影像。
很明顯地, 上圖的雜訊較多, 下圖則是平滑多了!
訂閱:
文章 (Atom)