第三章 基於棋子相對位置之定位
3.1 偵測新置放棋子
3.2.2 重建棋子座標
建立起棋子間相對位置後,我們可以把棋子及其關係連線視為一個無向圖形
(Undirected Graph),棋子的質心為頂點(Vertex),關係連線為邊(Edge),但 是由於棋盤上所有棋子不一定只會形成一個連通單元(Connected Component),
擺放較遠的棋子可能會形成“孤島",如圖 3-11 左上方的四顆棋子,於是我們 分為兩階段重建棋子座標。第一階段,由第一手棋子開始進行圖形追蹤(Graph Traversal),建立起所有和第一手棋子連通之棋子的座標;第二階段,針對第一 階段無法建立座標的棋子,利用投影轉換矩陣(Homography)建立其座標。以
上建立起的是棋子相對於棋盤格線的相對座標,最後我們還要將坐標平移,得到
Depth First Search, DFS Breadth First Search, BFS
S S (0,0) S
選擇參考點的原則是四個點不要太靠近,於是我們從已經建立起相對座標的 棋子中,選擇最靠近四個邊緣的四顆棋子當作參考點。實際的作法相當簡單,就 是分別找 x 座標及 y 座標最大及最小的四顆棋子;若是邊緣的棋子不只一顆,則 選擇後下的一顆;若是被選擇的四顆棋子中有重複的,則再選擇次靠近邊緣的一 顆棋子。本例的結果如圖 3-12 所示,圖中填上橘色的即為被選擇當做參考點的 棋子。
圖 3-12 建 投影轉換矩陣的參考點。
我們已知當做參考點的四顆棋子之影像平面的座標,以及相對於棋盤格線的 相對座標,所以可以由 2.3.1 節中介紹的方法,建立這兩個平面的投影轉換矩陣。
再來針對第一階段無法建立座標的棋子 立
,利用該投影轉換矩陣建立其座標。至 此,
3.2.2.3 轉換相對座標為絕對座標
,是相對於棋盤格線的相對座標,以第一手棋子 S 為
我們已經建立起棋盤上所有棋子之相對於棋盤格線的相對座標了,接下來就 要將坐標平移,得到相對於棋盤格線的絕對座標。
剛才我們所建立起來的座標
原點,事實上棋盤格線的座標應該以左上角的端點為原點,所以我們要進行 座標平移,把相對座標轉為相對於棋盤格線的絕對座標。進行座標平移前,有一
件事我們未知,就是 S 的位置,但六子棋有一個很重要的特性,就是第一手棋子 絕大多數是下在中元,也就是棋盤正中間的位置,因此我們預設 S 的座標為 (10,10)。在本例中,第一手棋子也是下在中元,座標平移後的結果如圖 3-13 所 示。當然,我們也可以人工給予第一手棋子 S 的位置,這樣就能保證平移後的位 置與棋盤上真實的位置一致了。介紹到此,我們已經利用棋子間相對位置,定出 所有棋子相對於棋盤格線的座標了。
(a) 第二屆交通大學盃六子棋公開賽決賽之最後畫面
(b) 棋譜最後結果的呈現畫面
圖 3-13 本系統所記錄之棋譜的最後結果。