2014年6月27日 星期五

00360204 蘇韋寧 期末報告

我期末報告的目標是用影像操作滑鼠,然後用這個功能來玩遊戲。

差異偵測:
我用的差異偵測是色彩的差異偵測,不過最初考慮到膚色不同而用了現場取目標色彩的功能,在嘗試的過程中發現無法直接點選影像中的色彩後只好多做一個步驟來取得色彩值,利用擷取背景的功能,選擇背景中的某個顏色來做標準,為了預防選錯而在下面多加了顯示選擇顏色的功能,下圖為拍攝背景候選顏色的部分。

選好後執行色彩差異的判斷,將與目標色彩值差異大的變為黑色,差異小的變為白色。但由於色彩值是當場取的,所以誤差範圍可以不用太廣。

偵測手部:
取得黑白的影像後因為想用手來進行操作而嘗試了找出手的功能,稍為在網路上找一下資料看到有人用的方法相當簡單,他是找在畫面中最多白點的一行當作手,而手臂的形狀中手掌確實是最寬的,所以我就採用這種方法。 取到最多白點的一行後為了找出可能有手的位置,我找出該行中擁有最多白點的區段然後標記了該段的起始位置,不過考慮到必須偵測手掌來做點擊滑鼠的功能,我想將該區段中有連續白點的位置取出,因此將這區段中有過多連續黑點的起始位置作為這個區段的結尾,來達到取得手掌寬度的功能,這個功能測試結果如下圖,圖中的粗線會隨著攝取到的寬度做調整,但是線條寬度會有個上限。

處理雜訊:
接下來將手掌的中心算出後來進行測試 但發現會時常因為雜訊導致中心位置突然出現在遠端的狀況。為了盡量避免這個狀況發生做了簡略的去雜訊動作,我將上次中心的位置記錄下來,藉此跟現在的中心位置做比對,如果位移量超過一定程度就不移動。
即使做了去雜訊,也依然會在一個小範圍內跳動,這部分可能要做出形狀判斷才會更好的改善。滑鼠點擊功能的判斷則是由當初構想的用手的開闔偵測改成用手的進遠偵測。
因為即使將某個範圍外的雜訊過濾掉也會因為範圍內雜訊的干擾而導致誤判,而用位移量當作排除雜訊的判斷則會有需要將手掌開得很大很近的困擾。

最後,現在的成品依然與我當初的期待有落差 但是在這星期寫程式的過程中我從老師、同學、和網路身上學到了不少,從老師身上學到找區域中最多白點的想法,從同學身上學到很多BUG的狀況,從網路上知道了可以用白點寬度來找手的想法,以及在寫程式過程中發現不時會用到數學來解決問題,這個禮拜寫程式雖然很累,但是個寶貴的體驗。

沒有留言: