|
參考 題型範例 - 全國高級中等學校技藝競賽平台 工業類
題目:求二個簽名字元的相似度
問題描述
有一簽名字元為 BMP 的二元圖形(如圖 1),從 BMP 圖檔截出內容的部分(如圖 2),其中下圖 1 與下圖 2 上下方向相反,下圖中的每一個點以二元值表示之,0 表示黑及 1 表示白。我們可使用二個手寫的簽名字元的 BMP 圖形來做比對,比對時使用投影法及運算程序以求出它們的相似度。例如,求出的值為 0.52824,則二個簽名字元的相似度為 52.82%。

圖 1 簽名字元

圖 2 BMP 的二元圖形
|
|

圖 3 「工」字元
水平投影


圖 4 「工」字元水平投影

圖 5 「工」字元垂直投影
|
投影的原理:
今有一「工」字元(圖 3),做水平投影,於 y 軸累積黑點點數(圖 4);做垂直投影,於 x 軸累積黑點點數(圖 5)。
運算的程序:
求二個圖形的相似度時,在此使用投影法及相關運算程序如下:
- 對二個圖形的 x 軸及 y 軸分別做投影,x 軸及 y 軸各有 32 個元素。
- 對二個圖形的 x 軸及 y 軸的每一個元素都做投影時,即是將其具有「0」(黑)的值做累加,即為其投影值,如圖 4 及圖 5 所示。
- 將二個比對的圖形,其在相同座標的投影值相除可得該座標的相似度,x 軸及 y 軸均是。
- 對 x 軸而言,x 軸各座標的相似度值加總,再除以座標元素的數目 32,即為二個圖形 x 軸的相似度;對 y 軸亦然。
- 將 x 軸的相似度與 y 軸的相似度相乘,即為二個圖形的相似度。
提示:
- 為避免相除時分母為 0,x 軸及 y 軸的每一個元素的投影初始值都預設為 1。
- 在相同座標的二個投影值相除的相似度最大為 1 (100%)。
執行程式:
例 1 :使用二個字元比較
| |  |  |
| 輸入:檔案「南 1.txt」及「南 2.txt」 執行結果:列印如圖 6。 |
例 2 :使用二個字元比較
| | | | | |
|  |  |
| 輸入:檔案「南 1.txt」及「南 3.txt」 |
| 執行結果: | 步驟 4,求平均相似度:垂直投影:0.842,水平投影:0.863 步驟 5,2 字元相似度:0.72676 |
例 3 :使用二個字元比較
| | | | | |
|  |  |
| 輸入:檔案「南 2.txt」及「南 3.txt」 |
| 執行結果: | 步驟 4,求平均相似度:垂直投影:0.729,水平投影:0.710 步驟 5,2 字元相似度:0.51764 |
例 4 :使用二個字元比較
| |  |  |
| 輸入:檔案「三 1.txt」及「三 2.txt」 執行結果:列印如圖 7。 |
例 5 :使用二個字元比較
| | | | | |
|  |  |
| 輸入:檔案「川 1.txt」及「川 2.txt」 |
| 執行結果: | 步驟 4,求平均相似度:垂直投影:0.838,水平投影:0.909 步驟 5,2 字元相似度:0.76198 |
圖 6 |  | (南 1.txt) |  | (南 2.txt) 比對相似度的過程 |
圖 7 |  | (三 1.txt) |  | (三 2.txt) 比對相似度的過程 |
|