參考 題型範例 - 全國高級中等學校技藝競賽平台 工業類
題目:具容錯的門檻設定之圖形標型(Pattern)搜尋
問題描述
有一檔案型態為 BMP 的二元圖形,圖中的每一個點以二元值表示之,0 表示黑及 1 表示白,如圖 1。
我們可搜尋圖中的一些標型,若搜尋到標型則顯示出此標型的(x1, y1)及(x2, y2)的座標值,如圖 1 所示。
搜尋的標型如圖 2、圖 3 及圖 4。
圖1原始 BMP 圖檔 圖2標型1 圖3標型 圖4標型
在此已先將 BMP 圖檔做前置處理,以 16 進制來表示二元值,BMP 圖檔存在 org.txt 檔,標型 1、標型2 及標型 3 分別存在 p1.txt、p2.txt 及 p3.txt 三個檔。
座標的表示法以標型 2 為例,圖形的座標表示如圖 5 所示,原點在左下角,x 軸由左向右,y 軸由下向上。p2.txt 的二元值表示如圖 6 所示,原點在左上角,x 軸由左向右,y 軸由上向下。
圖 5 圖形的座標表示法 圖 6 二元值的座標表示法
設計一程式,輸入 BMP 二元值 org.txt 檔,並輸入欲搜尋的標型二元值檔,如 p1.txt、p2.txt 或 p3.txt。輸入檔(16 進制)的說明如圖 7 所示,第一列為 x 水平軸及 y 垂直軸的點數,以 p1.txt 為例,水平點數為 3016 = 4810,垂直點數為 1416 = 2010;第 2 列以後為二元值,以 16 進制表示。當檔案輸入時,需先進行將 16 進制的值轉為二元值,轉換的方法如圖 8 所示。以 D316 = 21110為例,轉換後為二元值為 110100112。之後,進行搜尋程式的設計。
在程式的設計時,須考慮欲搜尋的標型的週邊為一樣外,其內部區域可能有些微變異,為因應這情況,程式須包含容錯值的門檻設計,例如:容錯值設定 6,欲搜尋的標型其內部區域可以有 6 個位元變異也算找到。
圖 7 輸入檔的說明 圖 8 10 進制轉為 2 進制
例 1:輸入:BMP 圖形的二元值檔案(org.txt)及標型 1(p1.txt),容錯值的門檻為 0。
執行結果:(10 進制)
例 2:輸入:BMP 圖形的二元值檔案(org.txt)及標型 2(p2.txt),容錯值的門檻為 0。
執行結果:(10 進制)
例 3:輸入:BMP 圖形的二元值檔案(org.txt)及標型 1_6err 檔案(p1_6err.txt),後者有 6 個位元變異,容錯值的門檻設為 5。
執行結果:(10 進制)
例 4:輸入:BMP 圖形的二元值檔案(org.txt)及標型 1_6err 檔案(p1_6err.txt),後者有 6 個位元變異,容錯值的門檻設為 6。
執行結果:(10 進制)
執行結果





注意 p3.txt,演算法在 org.txt 同一列可能出現很多像
p3.txt 第一列的資料,所以必須持續搜索到最後。

程式碼下載
|