顯示具有 495511466 標籤的文章。 顯示所有文章
顯示具有 495511466 標籤的文章。 顯示所有文章

2010年6月13日 星期日

Course Review 課程回顧

這堂課是還蠻有趣的一堂課,一開始看到課程大綱的時候,覺得有點像是影像處理,要去跑程式和算數學的,可是上課後發現,其實這堂課是要實作為主的,而且課程都蠻簡單的,前面幾堂課,都是做跟顏色有關係的處理,在這邊就了解到顏色RGB在視訊處理裡面分成三個CHANNEL,一開始的時候覺得很難,因為他是用ARRAY去跑的,可是熟悉了之後,就蠻容易上手的,而在期中專題之後又是另一個處理視訊的領域:剪影和投影。利用這兩個技術,就可以改善視訊用顏色偵測的不穩定,讓我比較有有成就的程式,反而是上機考的考試,一開始看到題目的時候覺得蠻困難的,因為要把人的高度設定為動態的,然後要在他頭上畫線,不過在實作的時候發現,他有點像顏色偵測的時候一樣多跑一個WHILE迴圈,紀錄最後一次的Y座標就可以畫線了。回顧整個課程,我覺得視訊處理是個很好做研究發展的領域,入門的技術沒有很難,不過就看做的努力如何了。而我覺得這堂課很棒的是老師上課的時候會先給一個概念,然後用引導的方式讓我們思考這個領域可以做什麼事情,先引導概念後再啟發我們對課程的興趣很棒!

HW05: Some Cases Studies


這次的作業跟期中專題有些關聯,一開始老師在demo的時候是用雨傘在畫布上作畫,雖然程式是有點不穩定(會延遲),不過對於剛接觸視訊處理的來說,覺得非常有好玩,仔細看程式碼,其實也沒有很難,他的技術主要是在紅色框框內紀錄所有pixel的訊息(R、G、B)然後取平均值去計算要偵測的顏色,但是有些條件:視訊環境不能有同樣的顏色,還有就是偵測顏色的時間不能太短,不然偵測出來的顏色不太穩定

期末專題:貓抓老鼠PART2


利用Background Subtraction以及X-Projection and Y-Projection 修正前一次專題利用COLOR DETECTION的缺點,如此一來可以把環境的因素降低,另外也不需要多做顏色的偵測,我覺得這次的專題雖然看起來沒有什麼改變,可是實際上對於程式的穩定度提昇很多,也不會那麼延遲,利用投影的效果真的好很多

HW08: Background Subtraction


這是期中專題後另一個領域,就是利用背景的差異來判定是不是有影像的更新,所以一開始攝影機在偵測的時候不能夠有人,接著延伸的作業是人要站在灰色的框內,超出就會被扣分,這個部分用到的是pixel的運算:
for (int y=0; yheight; y++) {
uchar* ptr1=(uchar*) (maskImg->imageData +y*maskImg->widthStep);
uchar* ptr2=(uchar*) (difference1->imageData +y*difference1->widthStep);
for (int x=0; xwidth; x++) {
if (ptr1[3*x] != 255 && ptr1[3*x+1] != 255 && ptr1[3*x+2] != 255 )
score3++;
if (ptr2[x] == 255) {
if (ptr1[3*x] == 255 && ptr1[3*x+1] == 255 && ptr1[3*x+2] == 255 )
score1++;
else
score2++;
}
}
}

(ptr1[3*x] != 255 && ptr1[3*x+1] != 255 && ptr1[3*x+2] != 255表示圖片以外的白色
然後如果有點在白色的區域裡面,就是扣分的計算,否則就是得分。
這個作業蠻有趣的,因為他不需要很困難的程式撰寫,只要幾個迴圈去處理就好了
ps. model是我室友,他打電動打到一半被我叫出來截圖

HW10: X-Projection and Y-Projection Extension


這是上機考的延伸作業(人要跳過紅線,並且紅線會一直遞增,人要越跳越高),把x投影的範圍分成兩個部分,左邊和右邊,這樣子就可以分別偵測兩個人在做戰鬥,而我也把上機考的東西加強一下,讓一開始偵測的高度設定為動態的,也就是兩個不同高度的人,他的水平線(紅色)是不一樣的,而跳高的動態線(白色)則是會隨著高度不同而移動

HW09: X-Projection and Y-Projection

這是利用投影和視訊相減的技巧,找出移動物件的頂點(例如頭頂)

接著再利用軌跡作圖,這個作圖跟之前用color detection一樣,用畫布把軌跡留下來




這個作業蠻有趣的,因為利用背景的相減,就可以找到移動的點,這樣比起以前利用color的偵測方便多了,這樣環境的影響因素會大大的減低

2010年5月2日 星期日

期中專題-貓抓老鼠






製作學生:495511466 郭宸雨 495511210 李俞萱

專題動機與介紹:
一開始我們想到是釣魚遊戲,利用亂數產生的魚去撈,但是我們在設計的時候發現魚只能在固定位置亂數產生,這樣跟一般的撈魚遊戲有點不合邏輯,所以才改成亂 數時間產生老鼠,然後去抓老鼠,只要有抓到老鼠就可以加分的遊戲。

使用的技術:
opencv的視訊處理功能,主要是用顏色偵測(color detection)以及虛擬滑鼠(virtual mouse)去判斷指標位置,進而去抓到老鼠

實作介紹:
利用亂數產生的圖片,當圖片被亂數產生時,就有個布林值去判斷圖片被產生了,布林值的主要目的是要當滑鼠跟圖片發生collision時,就表示抓到了老 鼠,就可以計算分數,而且可以產生抓到老鼠的音效

遭遇的困難:
圖片消失太快,導致抓不到老鼠。
一開始在跑程式的時候,是 設定老鼠出現消失,就是一個布林值而已,所以當老鼠出現後,下frame就會馬上消失,會讓看到老鼠,正要去抓的時候,老鼠就不見了,所以我們是用一個陣 列去存老鼠的狀態,當老鼠出現後,讓他增加停留的時間,延長老鼠停留的時間,這樣一來不用去改waitkey的值,也可以讓老鼠出現後比較慢的消失。

而另一個問題是貼圖的問題,一開始把logo貼上去的時候,發現有灰色的框框,就是他不能有空白底,在這邊一開始以為是圖片格式的關係,換了好多個格式後發現無法解決,但後面仔細看了一下貼上logo的程式碼後發現,原來是因為兩層的for迴圈,把圖片每個pixel都貼上去了,於是解決的方式就是多一個判斷式:if(ptr1[3*(x)]!=100 && ptr1[3*(x)+1]!=100 &&ptr1[3*(x)+1]!=100)把灰色以外的pixel複製進視訊裡面,這樣就解決啦。
遊戲介紹:

一開始的畫面,要先偵測虛擬滑鼠的顏色







實際影片


心得與展望:
這是個蠻有趣的專題,比起其他專業科目的專題,這個專題算是簡單許多,不需要用到複雜的資料結構、資料庫、或是其他難度的程式碼,但是這個專題是要結合前幾次上課的技術,在加上專題的創意,才可以完成的,所以我覺得這次的專題很有趣。在專題demo時也參觀過其他組別的遊戲,雖然都是小遊戲,不過有很多創意,這也是這次專題所要學習的。而期末專題,也希望從這個專題去做延伸...能夠寫出更完美的專題。

2010年3月28日 星期日

專題構想

釣魚遊戲

http://www.youtube.com/watch?v=-x8jW7M9mmk
利用這樣的類似形式來做釣魚遊戲

495511210 李俞萱
495511466 郭辰雨

2010年3月21日 星期日

HW04: Color Detection



[111.JPG]

今天要學習的是偵測視訊的顏色,並且抽換掉該目的顏色,在這張圖片當中,就是要將多拉a夢的白色臉做顏色的抽換,而做法跟上次的pixel處理一樣,先是用for迴圈把整張圖片跑過一次,接著再用D = sqrt((原始藍色-偵測藍色)^2 + (原始綠色-偵測綠色))^2 + (原始紅色-偵測紅色))^2) 來偵測顏色,並且用
if (sqrt(D) <>
ptr1[3*x]=0;
ptr1[3*x+1]=0;
ptr1[3*x+2]=255;
}
TH就是顏色的門檻值,在這個程式碼是將顏色抽換成紅色。

接著是開啟一個空白的視窗,原始的白色,用紅色著色到白色視窗裡面,使用的方式跟顏色的偵測是一樣的,不過不同的地方是,在做FOR迴圈是去跑原始視訊的PIXEL,而在顏色抽換的地方則是抽換掉新的白色視窗的顏色,而老師要求著色的軌跡不能洗掉,一開始把全白的FOR迴圈寫在WHILE裡面,迴圈一執行,白色的底圖會一直覆蓋掉,所以必須把白色的FOR迴圈寫在外面,這樣才可以把軌跡留存

2010年3月14日 星期日

HW03: Pixel-Level Processing in OpenCV


這次是使用pixel的顏色抽換,必須要了解這次的程式是複製原始的視訊到另一個視訊裡面,而抽換的方式是:因為每個pixel有三個bytes(BGR)三個顏色,所以要抽換的話,就是使用指標
ptr2[3*x]、ptr2[3*x+1]、ptr2[3*x+2]就分別代表了BGR三個指標的位置。
處理出來的結果如下:


而進階要將嵌入圖片移動,首先要將DEFINE的偏移位置改成動態的INT形式,接著在迴圈外面設定遞增的程式,第一次把他放在迴圈裡面,結果圖形會變成平行四邊形,因為在Y還沒有遞增的時候,X就開始偏移了,所以會變成不規則的形狀。
更改的程式碼如下:


2010年3月7日 星期日

HW02: Image-Level Processing in OpenCV

1. Download HW02.cpp from webhd.mcu.edu.tw.
2. Excute and trace the program.
3. Study the codes.
4. Extend HW01.cpp to generate three videos. The first one is gray-level video. The second one is the black and white video. The third one is a video with edges only. Note that you need to use cvFlip() function to change the display of videos.



註解程式碼
5. Modify the vaue of the third parameter in
cvThreshold( gray, bw, 127, 255, CV_THRESH_BINARY );
such that your face becomes black.
6. Find the differences between
cvThreshold( gray, bw, 127, 255, CV_THRESH_BINARY );
從灰階轉換為黑白,127以及255為門檻值,如果要加深讓臉部變成黑色,就把門檻值調高
cvThreshold( pImg, pImg2, 127, 255, CV_THRESH_BINARY );
將彩色轉為黑白 有就是255,沒有就是0
7. How many colors in the pImg2 image?
2^3=8 因為R,G,B(0以及255兩種)
8. Use cvResize() function to extend HW02.cpp such that the displayed image is enlarged by a factor of 3.14.
要先在畫出一個視窗,des的視窗大小就是src視窗大小*3.14
使用Resize(src,des,CV_INTER_LINEAR)
將src的圖檔大小丟到des裡面,並且使用CV_INTER_LINEAR演算法



註解程式碼
9. (Optional) Study functions of cvDilate() and cvErode().
心得:

這次看的程式碼是做影像的處理,分別將彩色的照片轉換為灰階、黑白、以及繪出邊線,等方式,
老師在上課的時候會把使用的函式講清楚,所以可以在程式碼旁邊註解就好,今天學到的比較難
一點的是把視訊轉換為灰階那些處理,一開始就發現轉換出來畫面會變成顛倒的狀況,老師解釋是因為再做二維陣列處理的時候會將影像轉換,才會有這樣的狀況,所以只要再做一次cvFlip就可以解決了。另外再放大的時候,會出現警告訊息,是因為放大的倍率必須是整數(int)的形式才行。

2010年2月28日 星期日

HW01: Capture video from WebCam
















心得:這是一堂新接觸的課程,第一次要開啟檔案截圖
這次上課先熟悉檔案的操作、熟悉課程部落格的上傳方式。
稍微看了一下程式碼,感覺沒有很難,可是那些物件必須要有工具書才比較看得懂。
cvNamedWindow("Webcam1",0);表示畫面可以延伸
cvNamedWindow("Webcam1",1);表示為固定大小


延伸:
同一個檔案開啟多個視窗


















鏡射處理