• 沒有找到結果。

指紋動態線追隨細線化研究

N/A
N/A
Protected

Academic year: 2021

Share "指紋動態線追隨細線化研究"

Copied!
120
0
0

加載中.... (立即查看全文)

全文

(1)

國立高雄大學電機工程學系暨研究所

碩士論文

指紋動態線追隨細線化研究

A Study of Fingerprint Thinning Algorithm Using

Dynamic Line Following

研究生:陳信榮

指導教授:蕭培墉

博士

(2)
(3)

在進入職場後選擇重返校園就讀研究所是我人生中很重要的轉捩點之一,研 究過程中學到很多職場以外有價值的事物。本論文能夠產出雖然只是全宇宙非常 非常渺小的一小步,卻是我個人非常非常大的一大步。 感謝蕭培墉教授對於整個研究的細心指導與在影像辨識課程中所傳授的影像 知識,在嵌入式程式設計課程中教導 C 語言的重要性,這些對於出社會後的我來 說,體會非常深,對於日後的幫助很大。 感謝公司的呂部經理、陳主任和王主任、李組長以及同事們在這幾年,公司忙 碌之際,仍舊力挺我讀研究所,心中充滿感謝,有你們真好,這是金錢所無法衡量 的! 感謝富源學長在C 語言程式與 thinning paper 理解上的幫助;感謝同梯同學(明 弘、繼文、正誠、宗翰)在之前的課業與作業上的討論;感謝冠穎學弟、輝明學弟 在Line Following 理論研究上的從旁協助。也非常感謝朝元學長、鈞彥學長、輝明 學弟與永哲學弟,在口試當天的場地佈置與安排,才能讓口試那麼的順利進行。 感謝母親的養育與辛苦的照顧我日常起居,讓我能無憂無慮上班與專心研究; 感謝親戚們、外公與外婆從小對我的栽培以及感謝五阿姨這20 多年來非常辛苦的 照顧我和打理晚餐。也感謝一些無形的力量默默的幫助我,謝謝祢們!

也要感謝這個世代的網路資訊發達、Microsoft Office 2016(Excel)以及周杰倫的” 愛的飛行日記” MV 中矩形窗格的啟發。

最後,如同蘇軾(蘇東坡)大學士在《稼說送張琥》文章中所提及 博觀而約取,厚積而薄發。

期許畢業後,在學習技術方面能,廣泛涉獵,取其精髓;在研究學問方面能, 勤勉務實,質量第一。以此自我勉勵並共勉之!再次謝謝大家!!

(4)

指紋動態線追隨細線化研究

指導教授:蕭培墉 博士 (教授) 國立高雄大學電機工程學研究所 學生:陳信榮 國立高雄大學電機工程學研究所 摘要 細線化已被研究了60 幾年,原因是細線化尚未有一個完美的演算法。一直到 1984 年提出Successive layer Removable paradigm (SR)快速演算法[1],以及 1988 年所提出的 線追隨演算法[3],才有具顛覆性的理論被提出。[4]在 1992 年針對[3]改善其轉折與分岔 這兩大重點進而提出特殊的Window Moving 演算法。 本論文將運用[4]的演算法做部份改變並結合[3]所提的演算法,利用 Microsoft Excel 2016 內的 VBA 編寫程式碼自行開發設計出一套系統(BMP 動態線追隨圖像化擴展 Window 追蹤系統 V10.0)。可以自動紀錄每次細線化時被擴展出來的圖像化 Window, 方便研究指紋紋路的整個細線化過程,對於日後研究不同演算法有相當大的助益。 本研究運用在片段指紋紋路上的細線化結果顯示可以有效改善雜訊與過度刪除的 問題。

關鍵字:細線化、線追隨、擴展Window、Microsoft Excel 2016 VBA、BMP 動態線追 隨圖像化擴展Window 追蹤系統 V10.0

(5)

A Study of Fingerprint Thinning Algorithm Using

Dynamic Line Following

Advisor(s): Dr.(Professor) Pei-Yung Hsiao Institute of Electrical Engineering National University of Kaohsiung

Student: Hsin-Jung Chen Institute of Electrical Engineering National University of Kaohsiung

ABSTRACT

Thinning has been studied for 60 years, the reason is that thinning does not yet have a perfect algorithm. Successive layer Removable paradigm (SR) fast algorithm [1] was proposed until 1984. And Line Following algorithm [3] proposed in 1988, only disruptive theory was proposed. In 1992, aiming at [3] improving its turning point and bifurcation, it proposed a special Window Moving algorithm [4].

In this paper, some algorithms will be used in [4] and combined with the algorithm proposed in [3], a set of system is developed by using VBA programming code in Microsoft Excel 2016 (BMP dynamic line following the image Extended Window Tracing System V10.0). It can automatically record every time thinning is extended out of the image of the Window, facilitate the study of the entire thinning of fingerprint, for the study of different algorithms in the future there is considerable help.

The thinning results of some partial fingerprints in this study can effectively improve the noise and over-deletion problem.

Keywords: Thinning, Line Following, Extended Window, Microsoft Excel 2016 VBA, BMP Line Following Graphic Expanded Window Tracing System V10.0

(6)

目錄

口試委員審定書…...………..……….………..i

謝 ... ii

指紋動態線追隨細線化研究 ... iii

A Study of Fingerprint Thinning Algorithm Using Dynamic Line Following ... iv

第一章 緒論 ... 1

研究動機 ... 1

相關研究回顧 ... 1

章節架構 ... 2

第二章 線追隨(Line Following)演算法 ... 4

Line Following Algorithm Concept Introduction ... 4

線條的兩側邊界點定義(Left Points 與 Right Points) ... 6

四種 Window 行進方向(往右、往左、往上、往下)定義 ... 8

Coefficient d ... 9

Expanded Window 與 Window 中心點計算 ... 12

Next Left Point 與 Next Right Point 取點準則 ... 19

判斷分岔準則 ... 22 LF-RD, LF-LD, LF-UD, LF-DD 圖形化各個參數介紹 ... 35 第三章 輪廓追蹤、紋路轉折與紋路分岔研究 ... 38 輪廓追蹤 ... 38 3.1.1 輪廓追蹤介紹 ... 38 3.1.2 輪廓追蹤 Expanded Window 的設計重點 ... 40 紋路轉折特徵 ... 49 3.2.1 紋路轉折處的分析 ... 50 分岔研究探討 ... 52

(7)

第四章 BMP 動態線追隨圖像化擴展 Window 追蹤系統 V10.0 架構介紹 ... 62 系統簡介 ... 62 系統畫面一覽 ... 63 功能介紹 ... 63 第五章 實驗設計與結果分析 ... 79 實驗設計 ... 79 5.1.1 BMP 指紋圖的手動補點去雜訊(不違背物理意義) ... 80 5.1.2 二值化 ... 80 5.1.3 程式自動化補點去雜訊 ... 81 5.1.4 LF 手動起點設定與人工決定行進方向... 82 5.1.5 執行 Line Following ... 83 四種 Line Following 方向搭配輪廓追蹤的細線化 ... 83

5.2.1 LF-RD+Contour Tracing 轉折+LF-UD 細線化結果 ... 84

5.2.2 LF-RD+Contour Tracing 轉折+LF-DD 細線化結果 ... 85

5.2.3 LF-LD+Contour Tracing 轉折+LF-UD 細線化結果 ... 86

5.2.4 LF-LD+Contour Tracing 轉折+LF-DD 細線化結果 ... 87 5.2.5 LF-UD+Contour Tracing 轉折+LF-RD 細線化結果 ... 88 5.2.6 LF-UD+Contour Tracing 轉折+LF-LD 細線化結果 ... 89 5.2.7 LF-DD+Contour Tracing 轉折+LF-RD 細線化結果 ... 90 5.2.8 LF-DD+Contour Tracing 轉折+LF-LD 細線化結果 ... 92 片段指紋紋路圖片細線化結果 ... 93 5.3.1 數張指紋圖 LF 結果... 94 不同演算法的細線化結果比較 ... 94 5.4.1 與 1984 年細線化比較 ... 94 5.4.2 與 1986 年細線化比較 ... 95 第六章 結論與未來展望 ... 97

(8)

結論 ... 97 未來展望 ... 99 參考文獻 ... 101

(9)

圖目錄 圖 2-1 細長的線條示意圖 ... 4 圖 2-2 藍色矩形包覆某線段,並形成該線段的中心點(O) ... 4 圖 2-3 取第 2 個矩形並找出中心點(O) ... 5 圖 2-4 取第 3 個矩形並找出中心點(O) ... 5 圖 2-5 取第 4 個矩形並找出中心點(O) ... 5 圖 2-6 取第 5 個矩形並找出中心點(O) ... 5 圖 2-7 取第 6 個矩形並找出中心點(O) ... 5 圖 2-8 連接 6 個中心點(O)即為該線條的骨架,如綠色直線所示 ... 6 圖 2-9 行人由左往右,走在一條平坦彎曲的單行道上 ... 6 圖 2-10 行人由右往左,走在一條平坦彎曲的單行道上 ... 7 圖 2-11 在 BMP 圖檔的線條圖案中,矩形 Window 如同行人,線條如同單行道 . 7 圖 2-12 Line Following 圖形化表示方式 ... 8 圖 2-13 係數 d 等於 2 且當 Window 為 RD 時的示意圖 ... 10 圖 2-14 係數 d 等於 3 且當 Window 為 RD 時的示意圖 ... 10 圖 2-15 係數 d 等於 2 且當 Window 為 UD 時的示意圖 ... 11 圖 2-16 係數 d 等於 1 且當 Window 為 LD 時的示意圖 ... 11 圖 2-17 係數 d 等於 2 且當 Window 為 DD 時的示意圖 ... 12 圖 2-18 擴展矩形(Expanded Window) ... 13 圖 2-19 Window 的行進方向的箭頭標示法(UD) ... 13 圖 2-20 BMP 座標系統圖示 ... 14 圖 2-21 BMP 座標掃描方式圖示 ... 14 圖 2-22 一張 13 x 7 的 BMP 圖片中有一條 9 x 3 的黑色橫直線 ... 14 圖 2-23 將圖 2-22 的黑色橫直線以底色為灰色表示之 ... 15 圖 2-24 灰色標識為 1;空白標識為 0 ... 15 圖 2-25 BMP 圖檔的像素與 1D Array 索引值對應分佈圖 ... 15

(10)

圖 2-26 以黑色橫直線為例的 L、R、Ld 以及 Rd 範例說明圖(RD) ... 16

圖 2-27 一個 13 x 9 的 BMP 圖檔中有一個 9 x 3 的黑色橫直線 ... 17

圖 2-28 圖 2-27 的索引值表示圖與定義 4 個參數 ... 17

圖 2-29 Next Left Point 的取點法則圖例 ... 20

圖 2-30 Next Right Point 的取點法則圖例(有空白時) ... 21

圖 2-31 Next Right Point 的取點法則圖例(沒有空白時) ... 22

圖 2-32 直行 ... 23 圖 2-33 結束 ... 23 圖 2-34 分岔 ... 24 圖 2-35 分岔情況 1 ... 24 圖 2-36 分岔情況 1 的 Window 前邊界存入 1 維陣列與簡化過程 ... 25 圖 2-37 分岔情況 2 ... 26 圖 2-38 分岔情況 2 的 Window 前邊界存入 1 維陣列與簡化過程 ... 26 圖 2-39 分岔情況 3 ... 27 圖 2-40 分岔情況 3 的 Window 前邊界存入 1 維陣列與簡化過程 ... 28 圖 2-41 分岔情況 4 ... 29 圖 2-42 分岔情況 4 的 Window 前邊界存入 1 維陣列與簡化過程 ... 29 圖 2-43 分岔情況 5 ... 30 圖 2-44 分岔情況 5 的 Window 前邊界存入 1 維陣列與簡化過程 ... 30 圖 2-45 分岔情況 6 ... 31 圖 2-46 分岔情況 6 的 Window 前邊界存入 1 維陣列與簡化過程 ... 32 圖 2-47 分岔情況 7 ... 32 圖 2-48 分岔情況 7 的 Window 前邊界存入 1 維陣列與簡化過程 ... 33 圖 2-49 分岔情況 8 ... 34 圖 2-50 分岔情況 8 的 Window 前邊界存入 1 維陣列與簡化過程 ... 34 圖 2-51 分岔情況 9 ... 35

(11)

圖 2-52 分岔情況 9 的 Window 前邊界存入 1 維陣列與簡化過程 ... 35

圖 2-53 LF-RD 圖形化參數(d=2) ... 36

圖 2-54 LF-LD、LF-UD 與 LF-DD 圖形化參數(d=2) ... 37

圖 3-1 指紋圖案 ... 39

圖 3-2 指紋圖案中的 hole 示意圖 ... 39

圖 3-3 當 LF-UD,d=1 時,Right Point(橘色圓點)落後於 Left Point(水藍色圓點) ... 40

圖 3-4 當 LF-UD,d=1 時,Right Point(橘色圓點)超前 Left Point(水藍色圓點)1 個 pixel 以上。此 Expanded Window 已變形,無法找出合理的 Next Left Point 與Next Right Point ... 41

圖 3-5 人的行進方向為順時針時,圓圈上每個位置的 Left Point 與 Right Point 的 輪廓追蹤擴展Window 方式的設計圖 ... 42

圖 3-6 人的行進方向為逆時針時,圓圈上每個位置的 Left Point 與 Right Point 的 輪廓追蹤擴展Window 方式的設計圖 ... 42

圖 3-7 L 瓢蟲和 R 瓢蟲:(a)順時針自轉且進入 start pixel 時,左邊必為 white;(b) 逆時針自轉且進入start pixel 時,右邊必為 white pixel ... 43

圖 3-8 L 瓢蟲分佈位置 Case1 Ladybird-L on RD course ... 44

圖 3-9 L 瓢蟲分佈位置 Case2 Ladybird-L on RU course ... 44

圖 3-10 L 瓢蟲分佈位置 Case3 Ladybird-L on LU course ... 45

圖 3-11 L 瓢蟲分佈位置 Case4 Ladybird-L on LD course ... 45

圖 3-12 L 瓢蟲分佈位置 Case5 Ladybird-L on RD course ... 45

圖 3-13 R 瓢蟲分佈位置 Case1 Ladybird-R on RU course ... 46

圖 3-14 R 瓢蟲分佈位置 Case2 Ladybird-R on RD course ... 46

圖 3-15 R 瓢蟲分佈位置 Case3 Ladybird-R on LD course ... 46

圖 3-16 R 瓢蟲分佈位置 Case4 Ladybird-R on LU course ... 47

(12)

圖 3-18 輪廓追蹤 Window - Line Split at RD... 48

圖 3-19 輪廓追蹤 Window - Line Split at LD ... 48

圖 3-20 輪廓追蹤 Window - Line Split at LU ... 49

圖 3-21 輪廓追蹤 Window - Line Split at RU... 49

圖 3-22 係數 d 呈現 45 度時,在 X 軸與 Y 軸上的分量示意圖。(a)當係數 d=1 時 (b)當係數 d=2 時 (c)當係數 d=3 時 ... 50 圖 3-23 指紋斜線條的間隔過小(實例 1) ... 51 圖 3-24 指紋斜線條的間隔過小(實例 2) ... 51 圖 3-25 (a)劇烈轉折的紋路;(b)演算法模擬的中心點結果(d 等於 1) ... 52 圖 3-26 假設定義左邊為主幹線,右邊和下邊為分支線 ... 53 圖 3-27 LF-RD 從左邊的主幹線由左往右執行細線化,遇到分岔情況(初始 d=2) 53 圖 3-28 LF-LD 從右邊的分支線由右往左執行細線化,遇到分岔情況(初始 d=2,但 最後因為L 落後 R,所以做自動補償 d,d=2+1=3) ... 53 圖 3-29 指紋紋路的一分二圖型 ... 54

圖 3-30 Chouinard and Plamondon[4]所提出的 Window 擴展方法 ... 55

圖 3-31 本研究提出一個改良的 Window 擴展方法 ... 56 圖 3-32 圖 3-30 的 Window 邊界數結果為 1 ... 56 圖 3-33 圖 3-31 的 Window 邊界數結果為 2 ... 57 圖 3-34 多分岔的紋路 ... 57 圖 3-35 圖 3-34 的 Window 邊界數結果為 3 ... 58 圖 3-36 往左方向擴展 2 倍距離後還是 black pixel(1),則往上擴展... 59 圖 3-37 圖 3-36 的計算 Window 邊界數為 3 ... 59

圖 3-38 靠近 Left Point 的 Window 對角 Pixel 所相鄰的 2 個 Window 邊界上的 Pixel 值為0 ... 60

圖 3-39 圖 3-38 的計算 Window 邊界數為 2 ... 61

(13)

圖 4-2 基本訊息顯示 ... 63

圖 4-3 LF Setting Window ... 65

圖 4-4 (a)Set Threshold Value 欄位;(b)Set 按鈕 ... 65

圖 4-5 Load BMP File To Transfer …按鈕 ... 65

圖 4-6 跳出視窗來選擇所要匯入的圖檔 ... 65

圖 4-7 匯入 BMP 成功的訊息 ... 66

圖 4-8 匯入後的兩個圖案 ... 66

圖 4-9 black pixel 轉成 1;white pixel 轉成 0 的設定 ... 66

圖 4-10 black pixel 轉成 0;white pixel 轉成 1 的設定 ... 66

圖 4-11 (a)一個 BMP 檔案大小為 28x20 的彎曲圖案;(b)將(a)的高和寬各放大 8 倍 ... 67

圖 4-12 將圖案的 black pixel 轉成 1,white pixel 轉成 0 ... 67

圖 4-13 將圖案的 black pixel 轉成 0,white pixel 轉成 1 ... 67

圖 4-14 對左邊的圖案內的 Pixel 儲存格內做刪除 1 ... 68 圖 4-15 修改左邊的圖案完成的訊息視窗 ... 68 圖 4-16 左邊的圖案和右邊的圖案都已自動修改完成 ... 68 圖 4-17 對左邊的圖案內的 Pixel 儲存格內做增加 1,並已自動修改完成 ... 69 圖 4-18 刪除/增加後,並將寬和高各放大 8 倍的結果圖案 ... 69 圖 4-19 (a)按鈕:L 瓢蟲;(b)按鈕:R 瓢蟲 ... 69 圖 4-20 Contour Tracing L 瓢蟲實驗 ... 70 圖 4-21 Contour Tracing R 瓢蟲實驗 ... 70 圖 4-22 (a)圖案為大小 10x3 的水平線條;(b)將(a)的高和寬各放大 8 倍 ... 71

圖 4-23 大小 10x3 的水平線條 Map 與 1D Array 索引值的 Map ... 71

圖 4-24 (a)圖案為大小 3x13 的垂直線條;(b)將(a)的高和寬各放大 8 倍 ... 71

圖 4-25 大小 3x13 的垂直線條 Map 與 1D Array 索引值的 Map ... 71 圖 4-26 (a)Ctrl+L 設定(4,12)為 Default Left Point;(b)Ctrl+R 設定(4,10)為 Default

(14)

Right Point;(c)選擇 LF => Right Direction;(d)按下 LF Start !!按鈕; (e)Window Center 312;(f)Window Center 314 ... 72 圖 4-27 (g)Window Center 316;(h)Window Center 318;(i)Window Center

320;(j)LF-RD 完成... 72 圖 4-28 (a)Ctrl+L 設定(13,10)為 Default Left Point;(b)Ctrl+R 設定(13,12)為 Default Right Point;(c)選擇 LF => Left Direction;(d)按下 LF Start !!按鈕; (e)Window Center 321;(f)Window Center 319 ... 73 圖 4-29 (g)Window Center 317;(h)Window Center 315;(i)Window Center

313;(j)LF-LD 完成 ... 73 圖 4-30 (a)Ctrl+L 設定(8,16)為 Default Left Point;(b)Ctrl+R 設定(6,16)為 Default Right Point;(c)選擇 LF => Down Direction;(d)按下 LF Start !!按鈕; (e)Window Center 455;(f)Window Center 399 ... 74 圖 4-31 (g)Window Center 343;(h)Window Center 287;(i)Window Center 231;

(j)Window Center 175;(k)Window Center 119;(l)LF-DD 完成 ... 74 圖 4-32 (a)Ctrl+L 設定(6,4)為 Default Left Point;(b)Ctrl+R 設定(8,4)為 Default Right Point;(c)選擇 LF => Up Direction;(d)按下 LF Start !!按鈕;(e)Window Center 119;(f)Window Center 175 ... 75 圖 4-33 (g)Window Center 231;(h)Window Center 287;(i)Window Center 343;

(j)Window Center 399;(k)Window Center 455;(l)LF-UD 完成... 75 圖 4-34 Output Result 按鈕 ... 76 圖 4-35 輸出圖檔成功訊息 ... 76 圖 4-36 (a)水平線條原始圖;(b)為(a)的細線化圖;(c)將(a)的高和寬各放大 8 倍; (d)將(b)的高和寬各放大 8 倍 ... 76 圖 4-37 (a)垂直線條原始圖;(b)為(a)的細線化圖;(c)將(a)的高和寬各放大 8 倍; (d)將(b)的高和寬各放大 8 倍 ... 76 圖 4-38 CT-Window 逆時針渦流構造設計圖 ... 78

(15)

圖 5-1 本研究的實驗設計流程 ... 79 圖 5-2 (a)原始圖;(b)經過手動補點去雜訊後 ... 80 圖 5-3 (a)經過手動補點去雜訊;(b)二值化後 ... 81 圖 5-4 (a)二值化;(b)經過設計程式補點去雜訊後 ... 81 圖 5-5 (a)起始點使用 LF-RD;(b)起始點使用 LF-UD ... 82 圖 5-6 (a)起始點使用 LF-LD;(b)起始點使用 LF-DD ... 82 圖 5-7 LF 的 4 種行進方向 ... 83 圖 5-8 開始進行 LF 按鈕 ... 83 圖 5-9 (a)原始紋路;(b)起始點使用 LF-RD 的細線化完整結果;(c)LF-RD 的細線 化結果;(d)Contour Tracing 的細線化結果;(e)LF-UD 的細線化結果 ... 84

圖 5-10 (a)原始紋路;(b)起始點使用 LF-RD 的細線化完整結果;(c)LF-RD 的細線 化結果;(d)Contour Tracing 的細線化結果;(e)LF-DD 的細線化結果 ... 85

圖 5-11 (a)原始紋路;(b)起始點使用 LF-LD 的細線化完整結果;(c)LF-LD 的細線 化結果(部份);(d)Contour Tracing 的細線化結果;(e)LF-UD 的細線化結果 ... 86

圖 5-12 (a)原始紋路;(b)起始點使用 LF-LD 的細線化完整結果;(c)LF-LD 的細線 化結果;(d)Contour Tracing 的細線化結果;(e)LF-DD 的細線化結果 ... 87

圖 5-13 (a)原始紋路;(b)起始點使用 LF-UD 的細線化完整結果;(c)LF-UD 的細線 化結果(部份);(d)Contour Tracing 的細線化結果;(e)LF-RD 的細線化結果 (部份) ... 88

圖 5-14 (a)原始紋路;(b)起始點使用 LF-UD 的細線化完整結果;(c)LF-UD 的細線 化結果;(d)Contour Tracing 的細線化結果;(e)LF-LD 的細線化結果(部份) ... 90

圖 5-15 (a)原始紋路;(b)起始點使用 LF-DD 的細線化完整結果;(c)LF-DD 的細線 化結果;(d)Contour Tracing 的細線化結果;(e)LF-RD 的細線化結果(部份) ... 90

(16)

圖 5-16 (a)原始紋路;(b)為(a)的輸出圖檔;(c)LF-RD 分岔與分支的細線化,與 Pixel Connecting 結果(d 等於 1);(d) LF-RD 分岔與分支的細線化,與 Pixel Connecting 結果(d 等於 2);(e) LF-RD 分岔與分支的細線化,與 Pixel Connecting 結果(d 等於 1),Window 中心點往左 2 個,如紅色所示;(f)為 (c)的輸出圖檔;(g)為(d)的輸出圖檔;(h)為(e)的輸出圖檔 ... 92 圖 5-17 (a)原始紋路;(b)起始點使用 LF-DD 的細線化完整結果;(c)LF-DD 的細線

化結果;(d)Contour Tracing 的細線化結果;(e)LF-LD 的細線化結果(部份) ... 93 圖 5-18 (a)一張全指紋;(b)三張片段指紋 ... 94 圖 5-19 (a)二值化圖(已經過手動與程式補點去雜訊);(b)Line Following 後的結果 ... 94 圖 5-20 (a)二值化圖;(b)1984 演算法所得到的細線化結果;(c) 本研究的系統所得 到的細線化結果 ... 95 圖 5-21 (a)二值化圖(斜條狀);(b)1986 演算法所得到的細線化結果;(c) 本研究的 系統所得到的細線化結果 ... 95 圖 5-22 (a)二值化圖(弧形狀);(b)1986 演算法所得到的細線化結果;(c) 本研究的 系統所得到的細線化結果 ... 96 圖 6-1 Window 擴展故過大而包覆其它紋路示意圖 ... 98

(17)

表目錄

表 2-1 Window 行進的方向與種類比較表 ... 8

表 2-2 四種 Window 行進方向簡稱與說明 ... 9

表 2-3 Line Following 的 Window 行進方向簡稱與說明 ... 9

表 4-1 本研究的系統的快速鍵一覽表 ... 64

表 4-2 本研究的系統的儲存格顏色與項目對照表 ... 77

表 6-1 Line Following 軟體開發比較 ... 97

(18)

第一章

緒論

指紋早在幾個世紀前就被人類發現進而研究至今。人類的指紋不會隨著個人 的不斷成長而有所改變。指紋有唯一性,世界上要找出相同指紋的人是幾乎不可能 的,在指紋辨識的多個流程中,細線化屬於前置處理。雖然僅是前置處理,但細線 化結果的好壞,也足已在整個流程中影響指紋的辨識。

研究動機

由於指紋具有唯一性,所以相當適合拿來做生物特徵辨識,如同現在智慧裝置 盛行,指紋辨識在智慧裝置上已經是幾乎必備的功能之一了。在指紋辨識的設計過 程中屬於前置處理的細線化流程,依據不同的演算法所產生的細線化,結果好壞可 以左右指紋的判讀結果。且細線化至今已被研究60 年之久,有些演算法是針對文 字來處理,有些則是針對指紋的紋路,有些則是處理手寫的筆跡,但每種演算法都 有各自的優點與所針對的領域。然而,每一種演算法在某些層面所產生的結果多少 有一些不足的地方,進而可以加以修改或是改進,足已可見細線化是個相當富有研 究價值與挑戰的議題。

相關研究回顧

Zhang and Suen[1]所提出的一個九宮格內,當中心點的 Pixel 為 1 時,依據環 繞在其周圍的8 個 Pixel,每個 Pixel 又有 0 與 1 之分,所以共有 28也就是共有256 種組合。再根據256 種組合歸納出 2 組迭代法,每 1 組迭代法內又各有 4 條判斷 條件。在這2 個迭代法中,如果 Pixel 符合 4 條判斷條件,則該 Pixel 會被刪除。 Lu and Wang[2]是將 Zhang and Suen[1]的 2 個地方做改善,第一個地方是針對 在 4 條判斷條件中的其中一條做改善,使得 Zhang and Suen[1]的某些圖案的細線

(19)

化結果不會被過度刪除;第二個地方是針對 Zhang and Suen[1]的流程圖中的迴圈 開始點做修改。

Baruch[3]是細線化中的一個重要突破,利用人眼看線條的模式,而催生此理論。 利用Left Point 與 Right Point 再加上參數 d,擴展出一個 Window,而此 Window 內 的線條分析就是代表人眼的分析。共可將線段區分成終點、部位,以及分岔,三種 情況。

Chouinard and Plamondon[4]是將 Baruch[3]做了進階運用與輪廓追蹤做結合, 並提出一個很不一樣的Window 擴展方法,使得 Window 能大幅度的包覆線條,進 而提早得知前方的線條狀況。再運用計數 Window 邊界的個數來判斷是終點、部 位,還是分岔。更進一步將分岔的形狀歸類成 type T 與 type X。並提出特殊的 Window Moving,特別是當運用在線段劇烈轉折時,效果顯著。

章節架構

本研究論文總共分成六章,第一章為緒論,概略描述細線化在指紋辨識中所扮 演的角色,其他五章的主題與所探討的內容如下:

第二章為「線追隨(Line Following)演算法」,本章介紹 Baruch[3]所探討的演算 法,並將其所談及的各個參數詳細探討。 第三章為「輪廓追蹤、紋路轉折與紋路分岔研究」,本章根據 Chouinard and Plamondon[4]針對紋路轉彎處所提出的特殊演算法做敘述,以及其所使用到的輪廓 追蹤演算法一併做探討。 第四章為「BMP 動態線追隨圖像化擴展 Window 追蹤系統 V10.0 架構介紹」, 針對前面兩章的原理並加以修改演算法所自行架構出的系統,說明其設計理念、功 能特色與操作方法等。 第五章為「實驗設計與結果分析」,本章依據數張指紋圖,制定實驗設計後, 利用本研究開發出來的系統,產生出細線化圖結果做分析比較。並指出在特殊情況

(20)

下的分岔處理所要注意的事項。

第六章為「結論與未來展望」,根據前面五章的研究做出結論,並討論細線化 演算法可以再加強的方向與創新的可能。

(21)

第二章

線追隨(Line Following)演算法

Line Following Algorithm Concept Introduction

在Baruch[3]的原理提到,藉由一個細長的線條,如圖 2-1 所示。線條的兩個 側邊(左側與右側)各取一個點(X),這兩個點經由特定數值(Coefficient d)的擴展形 成一個矩形包覆該線條的某個線段後,該矩形的中心點(O)就是這線段的中心點, 如圖 2-2 所示。 圖 2-1 細長的線條示意圖 圖 2-2 藍色矩形包覆某線段,並形成該線段的中心點(O) 只要沿著線條的左右兩側不斷地取出兩個點來形成矩形並得到所對應的中心 點,如圖 2-3 ~ 圖 2-7 所示。

(22)

圖 2-3 取第 2 個矩形並找出中心點(O) 圖 2-4 取第 3 個矩形並找出中心點(O) 圖 2-5 取第 4 個矩形並找出中心點(O) 圖 2-6 取第 5 個矩形並找出中心點(O) 圖 2-7 取第 6 個矩形並找出中心點(O) 再將這數個中心點連接起來就是這條黃色線條的骨架(Skeleton)也就是細線化 的結果,如圖 2-8 所示。

(23)

圖 2-8 連接 6 個中心點(O)即為該線條的骨架,如綠色直線所示

如此一來,一條細長線條可以藉由好幾個矩形的中心點,並連接這些中心點來 形成該線條的骨架,再刪掉非中心點的其餘部份而達到細線化的目的。

線條的兩側邊界點定義

(Left Points 與 Right Points)

在Line Following 中如定義出線條的兩側邊界:左側邊界與右側邊界是至關重 要的。其觀念可以用一行人走在單行道上來做說明。當一行人沿著一條單行道從起 點走到終點的過程中,行人的左手邊代表該單行道的左側,右手邊則代表該單行道 的右側,如圖 2-9 所示。 圖 2-9 行人由左往右,走在一條平坦彎曲的單行道上 相反地,如果把圖 2-9 行人的起點與終點互相對換,原本的單行道的左側和 右側也會跟著互後對換,如圖 2-10 所示。

(24)

圖 2-10 行人由右往左,走在一條平坦彎曲的單行道上

現在,有了以上的觀念,吾人將之應用到Line Following 內的線條細線化概念 上。在一個BMP 圖檔的線條圖案,行人換成矩形 Window,單行道換成是線條, 而矩形從線條的起點到終點的過程中,左側的Pixel 點均為 Left Points,右側的 Pixel 點均為Right Points,如圖 2-11 所示。而從起點到終點的多個矩形中心點串連起來 即為該線條的骨架。

(25)

圖 2-12 Line Following 圖形化表示方式 一般來說,矩形Window 可以簡化成 W,而 W 的行進方向可以用兩個箭頭做 為行進方向的標示用,如圖 2-12 所示。 線追隨的所有判斷直行或是分岔或是轉彎,靠 Window 所包覆住的線段狀態 而定。所以Window 也可比喻為人的眼睛一樣。

四種

Window 行進方向(往右、往左、往上、往下)定義

在Baruch[3]中的範例有提到三種不同的 Line Following Window 的行進方向, 本研究在多增加一種方向使其更加完善,如表 2-1 所示。

表 2-1 Window 行進的方向與種類比較表

研究論文 Window 行進方向種類 Window 行進方向類型 Line thinning by line

following 3 往上、往右、往下

(26)

為了方便後續討論,將對四種Window 行進方向做一個簡稱定義與說明,如表 2-2 所示。

表 2-2 四種 Window 行進方向簡稱與說明 Window 行進方向 簡稱 意義說明

Right Direction RD Window 的行進方向是往右的 Left Direction LD Window 的行進方向是往左的 Down Direction DD Window 的行進方向是往下的 Up Direction UD Window 的行進方向是往上的

當在執行Line Following 時,其 Window 的行進方向的簡稱定義與說明,如表 2-3 所示。

表 2-3 Line Following 的 Window 行進方向簡稱與說明 Line Following 的

Window 行進方向 簡稱 意義說明 Line Following

Right Direction LF-RD

Line Following 的 Window 的行進方向 為往右邊來做細線化

Line Following

Left Direction LF-LD

Line Following 的 Window 的行進方向 為往右邊來做細線化

Line Following

Down Direction LF-DD

Line Following 的 Window 的行進方向 為往右邊來做細線化

Line Following

Up Direction LF-UD

Line Following 的 Window 的行進方向 為往右邊來做細線化

Coefficient d

(27)

快。本研究會再下一節2.5 深入探討用這個 d 值所擴展出來的 Window 到底有什麼 神秘的意義在。

係數d 是 Left Point 和 Right Point 再各自延伸 d 個單位。而此延伸的動作是有 方向性的,意即Left Point 是往前延伸 d 個單位;Right Point 則是往後延伸 d 個單 位。在圖 2-13 中的灰色區塊是指某一條線段,而 L 在上,R 在下,可以說明 Window 的行進方向為RD,當係數 d 等於 2 時,Ld 的位置會在 L 的往左與往前 2 單位的 點上,Rd 則是在 R 的往右與往後 2 單位的點上。 圖 2-13 係數 d 等於 2 且當 Window 為 RD 時的示意圖 以下是Window 的行進方向同樣是 RD 但係數 d 變為 3 時的 Ld 與 Rd 所在位 置示意圖,如圖 2-14 所示。由此可知,Ld 與 Rd 的設定除了與係數 d 息息相關之 外,也與行進Window 的「前方」與「後方」和「左方」與「右方」有密切的關聯。 圖 2-14 係數 d 等於 3 且當 Window 為 RD 時的示意圖 當Window 行進方向為 UD 且係數 d 等於 2,其 Ld 與 Rd 的分佈位置如圖 2-15 所示。

(28)

圖 2-15 係數 d 等於 2 且當 Window 為 UD 時的示意圖 當Window 行進方向為 LD 且係數 d 等於 1 其 Ld 與 Rd 的分佈位置如圖 2-16 所示。 圖 2-16 係數 d 等於 1 且當 Window 為 LD 時的示意圖 當Window 行進方向為 DD 且係數 d 等於 2 其 Ld 與 Rd 的分佈位置如圖 2-17 所示。圖 2-17 是一張模擬真實線條(灰色區塊部份)的不規則兩個側邊時,當 Window 行進方向為 DD,在線條一側邊的眾多 Pixel 中任取一點為 L,在另外一側 邊的眾多Pixel 中任取一點為 R,因為係數 d 等於 2,所以可以定位出 Ld 與 Rd 的 位置。

(29)

圖 2-17 係數 d 等於 2 且當 Window 為 DD 時的示意圖

Expanded Window 與 Window 中心點計算

在前一節中已定位出Ld 與 Rd 的位置,接下來透過任意兩點可以構成一個矩 形的觀念,將Ld 與 Rd 形成一個矩形,而這個矩形就是 Pixel 點 L 與 Pixel 點 R 透 過係數d 所架構出來的擴展矩形(Expanded Window),在 Line Following 中簡稱為 Window 或 W,為了表明 Window 的行進方向為何,會加上兩個箭頭符號(由左往 右),表示此 Window 的行進方向為 RD,如圖 2-18 所示。反之,兩個箭頭符號為 由下往上則代表Window 的行進方向為 UD,如圖 2-19 所示。剩下 2 個的 Window 的行進方向其標示法以此類推。

(30)

圖 2-18 擴展矩形(Expanded Window)

圖 2-19 Window 的行進方向的箭頭標示法(UD)

當Window 形成後就是找出 Window 的中心點做為該線段的中心點。在 BMP 的圖檔架構中其座標系統為笛卡爾座標系,原點在左下角,如圖 2-20 所示。

(31)

圖 2-20 BMP 座標系統圖示 而其Pixel 的掃描方式是從左下角的原點(0,0)開始往右再往上一行的最左邊開 始往右掃描。如此反覆一直掃描到最後一個Pixel 停止,如圖 2-21 所示。 圖 2-21 BMP 座標掃描方式圖示 BMP 圖檔的像素(Pixel)排列方式有其特定的規則,如之前的圖 2-20 所示。因 此,會將像素的值存放在1 維陣列內並透過該 1 維陣列的 Index 索引值來對應該像 素的值。下面將利用幾張圖片說明BMP 圖片像素與 1 維陣列索引值的相對關係, 這對於如何找出Window 中心點與其它的相關參數,如 Rd、Ld、如何找出 Window 的前邊界是有分岔以及第三章所要討論的輪廓追蹤所架構出的 Window…等等的 一些公式推導有很重要的相關性。 以一條9 x 3 的黑色橫直線且周圍均佈滿空白的 13 x 7 的 8bit 二值化灰階的 BMP 圖檔為例,如圖 2-22 所示。將這條黑色橫直線變更為灰色並加入格線後,可 以使得觀看更加容易,如圖 2-23 所示。 圖 2-22 一張 13 x 7 的 BMP 圖片中有一條 9 x 3 的黑色橫直線

(32)

圖 2-23 將圖 2-22 的黑色橫直線以底色為灰色表示之 再將圖 2-23 的灰色方塊標示為 1;空白標示為 0,如圖 2-24 所示。

圖 2-24 灰色標識為 1;空白標識為 0

下圖是該13 x 7 的 BMP 圖片的 1D Array 的表示,可以發現 BMP 圖片的第 1 個 Pixel 是從圖片的左下角算起,並放入 Index 索引值為 0 的 1D Array 內,如圖 2-25 所示。第 14 個像素的值會放在 Index 索引值為 13 的 1D Array 內,最後一個 像素,也就是第91 個像素的值會放在 Index 索引值為 90 的 1D Array 內。

圖 2-25 BMP 圖檔的像素與 1D Array 索引值對應分佈圖

吾人姑且將上述的1D Array 命名為 BL(Black Line 的簡稱),其陣列內有 91 個 元素。再綜合以上並比對圖 2-24 與圖 2-25 這兩張圖示後可以了解到此黑色橫直 線共有 9 x 3=27 個像素表示之,這 27 個像素的值會存放在 BL[28]~BL[36]、 BL[41]~BL[49]以及 BL[54]~BL[62]內且值均為 1,而其它的 64 個像素則存放在 BL

(33)

剩餘的元素內,其值均存放0。舉例:BL[45]=1,BL[76]=0,剩下的以此類推。 圖 2-26 以黑色橫直線為例的 L、R、Ld 以及 Rd 範例說明圖(RD) 根據Baruch[3]內所提到給定 L、R 與系數 d 後就可以構成一個 Window(W), 如圖 2-26 的藍色矩形所示。L 的索引值為 58,R 的索引值為 32,係數 d 為 2,則 根據Ld 與 Rd 位置定義(可參考圖 2-13 之說明),Ld 的索引值會落在 86,Rd 的索 引值會落在4,Window(W)中心點的索引值為 45。以下整理出各 Window 行進方向 (RD、DD、LD、UD)的 L、R、Ld、Rd 與 Window 中心點的計算公式。其中 BMPWidth 代表BMP 圖檔的寬,BMPHeight 代表 BMP 圖檔的高;BMPWindow_Width 代表 Window 的寬,BMPWindow_Height 代表 Window 的高;BMP_j_x_start 代表 Window 的寬的最左邊的點所對應至X 軸的值,BMP_j_x_end 代表 Window 的寬的最右邊 的點所對應至X 軸的值;BMP_i_y_start 代表 Window 的高的最下邊的點所對應至 Y 軸的值,BMP_i_y_end 代表 Window 的高的最上邊的點所對應至 Y 軸的值; BMP_LPRP_Center 代表 Window 中心點。可對照下方的圖 2-27 與圖 2-28 的圖片 說明。 關於公式內的參數d 已經在 2.4 章節中討論過,可由圖 2-13 可以發現 Ld 與 Rd 均是藉由 L 與 R 往 X 軸與 Y 軸擴展同樣一個數值也就是參數 d 來架構出整個 Window。在第 3 章 中會針對 Chouinard and Plamondon[4]所提出的參數 d 是由不 同的X 軸與 Y 軸擴展值來架構出整個 Window,此架構出來的 Window 與其所定 義出的分岔類型(type T 與 type X)對於 Thinning 議題中的重要課題-分岔處理,是 非常具有價值的。

(34)

公式中運用Excel VBA 的 2 個函數語法,Int()為取得數值的整數部分,小數點 以下無條件捨去,另一個Mod()則為傳回兩數相除後的餘數。 圖 2-27 一個 13 x 9 的 BMP 圖檔中有一個 9 x 3 的黑色橫直線 圖 2-28 圖 2-27 的索引值表示圖與定義 4 個參數 RD: Ld = L + (BMPWidth * d + d) Rd = R - (BMPWidth * d + d)

BMP_j_x_start = Rd Mod BMPWidth BMP_j_x_end = Ld Mod BMPWidth BMP_i_y_start = Int(Rd / BMPWidth)

(35)

BMP_i_y_end = Int(Ld / BMPWidth)

BMPWindow_Width = BMP_j_x_end - BMP_j_x_start + 1 BMPWindow_Height = BMP_i_y_end - BMP_i_y_start + 1

BMP_LPRP_Center = R + Int((BMPWindow_Width - d * 2) / 2) + Int((BMPWindow_Height - d * 2) / 2) * BMPWidth

DD:

Ld = L - BMPWidth * d + d Rd = R + BMPWidth * d – d

BMP_j_x_start = Rd Mod BMPWidth BMP_j_x_end = Ld Mod BMPWidth BMP_i_y_start = Int(Ld / BMPWidth) BMP_i_y_end = Int(Rd / BMPWidth)

BMPWindow_Width = BMP_i_y_end - BMP_i_y_start + 1 BMPWindow_Height = BMP_j_x_end - BMP_j_x_start + 1

BMP_LPRP_Center = L - Int((BMPWindow_Height - d * 2) / 2) + Int((BMPWindow_Width - d * 2) / 2) * BMPWidth

LD:

Ld = L - (BMPWidth * d + d) Rd = R + (BMPWidth * d + d)

BMP_j_x_start = Ld Mod BMPWidth BMP_j_x_end = Rd Mod BMPWidth BMP_i_y_start = Int(Ld / BMPWidth) BMP_i_y_end = Int(Rd / BMPWidth)

(36)

BMPWindow_Height = BMP_i_y_end - BMP_i_y_start + 1 BMP_LPRP_Center = L + Int((BMPWindow_Width - d * 2) / 2) + Int((BMPWindow_Height - d * 2) / 2) * BMPWidth UD: Ld = L + BMPWidth * d - d Rd = R - BMPWidth * d + d

BMP_j_x_start = Ld Mod BMPWidth BMP_j_x_end = Rd Mod BMPWidth BMP_i_y_start = Int(Rd / BMPWidth) BMP_i_y_end = Int(Ld / BMPWidth)

BMPWindow_Width = BMP_i_y_end - BMP_i_y_start + 1 BMPWindow_Height = BMP_j_x_end - BMP_j_x_start + 1

BMP_LPRP_Center = R - Int((BMPWindow_Height - d * 2) / 2) + Int((BMPWindow_Width - d * 2) / 2) * BMPWidth 以上列出的公式皆截取自 BMP 動態線追隨圖像化擴展 Window 追蹤系統 V10.0 內的程式設計碼,因應論文內容只有些許的部分變數命名有做變動。其中 Window 中心點 BMP_LPRP_Center 公式並不是唯一的,可依照參考的點的不同而 做不一樣的變化。

Next Left Point 與 Next Right Point 取點準則

根據Baruch[3]內所提到的範例圖案中可以得到以下結論: Next Left Point:

針對Next Left Point 的取點法則有以下規則:

(37)

所以依照此取點法,取座標(13,12)為下一個 Next Left Point。

圖 2-29 Next Left Point 的取點法則圖例 Next Right Point:

針對Next Right Point 的取點法則有以下 2 點規則: (1)有空白時:

即Right Point(X),如圖 2-30 的座標(7,5)與 W 的右邊界至前邊界間相對應至 Left Points 間所形成的區域中有空白,如圖 2-30 的座標(7,4)、(7,3)、(8,4)、(8,3)、 (9,3)、(10,5)、(10,4)、(10,3)、(11,6)、(11,5)、(11,4)、(11,3)所形成的區域。則取相 對於Right Point(X)越前越右的點為下一個 Right Point,如圖 2-30 的座標(11,7)所 示。

(38)

圖 2-30 Next Right Point 的取點法則圖例(有空白時) (2)沒有空白時: 即Right Point(X),如圖 2-31 的座標(7,7)與 W 的右邊界至前邊界間相對應至 Left Points 間所形成的區域中沒空白,如圖 2-31 的座標(7,5)與(7,4)之間和(8,5)與 (8,4)之間和(9,5)與(9,4)之間是沒有空白的。則取相對於 Right Point(X)越後越右的 點為下一個Right Point,如圖 2-31 的座標(7,5)所示。

(39)

圖 2-31 Next Right Point 的取點法則圖例(沒有空白時)

由上述的Next Left Point 和 Next Right Point 取點法則來看可以得知,當取 Next Left Point 時,是預設為有空白時的情況。無論是抓 Next Left Point 或是 Next Right Point 都一定會遇到沒有空白時的情況,這時可以得知線條的狀況可能為一個波浪 起伏較大或是一個線條彎曲,甚至是遇到T 型分岔,這時就需要特殊的處理。

判斷分岔準則

線條的Line Following 分為 3 種情況:直行,結束和分岔。直行就是線條持續 的進行LF,這種情況表示 Window 包覆線條的某個線段內;結束就是 Window 已 包覆到線條的終點,可以結束LF;分岔就是 Window 包覆到線條的分岔點,此分 岔點可能是線條由一分成二或是一分成三,甚至是更多,需進行分岔LF 處理。 在所有的LF 過程裡,如何處理分岔是整個研究中的重點,一張圖 LF 的結果

(40)

好與壞全都取決於分岔點的LF 是否趨近完美。然而,在研究 LF 的過程中發現還 有一個是必須要注意到的重點,那就是轉彎,此議題留待第3 章論述。 處理分岔在 Baruch[3]內提到 Window 的周圍會檢查 LLP 和 RRP 之間是否有 空白存在,有空白就代表Window 內的線段偵測到有分岔。當 Window 偵測到有空 白時,最左分支的右邊界點標示為LRP,最右分支的左邊界點標示為 RLP。 圖 2-32 直行 圖 2-33 結束

(41)

圖 2-34 分岔

以上三張圖為典型的Line Following Window 所會遭遇到的情況。而圖 2-34 可 以看到LRP 和 RLP 之間有空白,所以判定為分岔。

以下是針對判斷分岔時的設計考量,先以LF-RD 的情況且線段的底色為黃色做為 說明,Window 前邊界 Pixel 由上至下為 00110001100,其中底色為灰色的 3 個 Pixel 都為0 的就是空白也就是分岔處,如圖 2-35 所示。將這些值存放在一個 1 維陣列 內,底色為藍色做為 MSB(most significant bit),底色為粉紅色做為 LSB(least significant bit)。

(42)

分岔情況本研究分為9 種狀況來考慮,圖 2-35 為第 1 種情況。當 LF-RD 時, 底色為黃色是要被執行細線化的線條,藍色實線與粉紅色實線與 2 條紅色實線構 成一個Window 包覆住該線條,並在 LF -RD Window 內偵測到分岔,分岔的 Pixel 由MSB 至 LSB 依序為 00110001100;當 LF-LD 時,底色為黑色虛斜線是要被執 行細線化的線條,藍色虛線與粉紅色虛線與 2 條紅色虛線構成一個 Window 包覆 住該線條,並在LF -LD Window 內偵測到分岔,分岔的 Pixel 由 MSB 至 LSB 依序 也同為00110001100。 圖 2-36 分岔情況 1 的 Window 前邊界存入 1 維陣列與簡化過程 分岔情況1 的分岔 Pixel 的排列會先經過一道簡化程序,將連續個數大於 1 的 會簡化成單一個數。00 簡化為 0,11 簡化為 1,000 簡化為 0,11 簡化為 1,00 簡 化為0。所以原本的 00110001100 會先被簡化為 01010 後,再存入 1 維陣列內。再 加上 Window 的左右邊的 Pixel 偵測判斷,條件①加上條件②則形成 LF-RD 為分 岔情況1 的必要條件;而條件①加上條件③則形成 LF-LD 為分岔情況 1 的必要條 件,如圖 2-36 所示。 針對判斷分岔時的第2 種設計情況的考量,分岔情況 2,先以 LF-RD 的情況 且線段的底色為黃色做為說明,Window 前邊界 Pixel 由上至下為 00110001111,其 中底色為灰色的3 個 Pixel 都為 0 的就是空白也就是分岔處,如圖 2-37 所示。將 這些值存放在一個1 維陣列內,底色為藍色做為 MSB(most significant bit),底色為 粉紅色做為LSB(least significant bit)。圖 2-37 為第 2 種情況,當 LF-RD 時,底色 為黃色是要被執行細線化的線條,藍色實線與粉紅色實線與 2 條紅色實線構成一

(43)

個 Window 包覆住該線條,並在 LF -RD Window 內偵測到分岔,分岔的 Pixel 由 MSB 至 LSB 依序為 00110001111;當 LF-LD 時,底色為黑色虛斜線是要被執行細 線化的線條,藍色虛線與粉紅色虛線與 2 條紅色虛線構成一個 Window 包覆住該 線條,並在LF -LD Window 內偵測到分岔,分岔的 Pixel 由 MSB 至 LSB 依序也同 為00110001111。 圖 2-37 分岔情況 2 圖 2-38 分岔情況 2 的 Window 前邊界存入 1 維陣列與簡化過程 分岔情況2 的分岔 Pixel 的排列會先經過一道簡化程序,將連續個數大於 1 的 會簡化成單一個數。00 簡化為 0,11 簡化為 1,000 簡化為 0,1111 簡化為 1。所 以原本的00110001111 會先被簡化為 0101 後,再存入 1 維陣列內。再加上 Window 的左右邊的 Pixel 偵測判斷,條件①加上條件②則形成 LF-RD 為分岔情況 2 的必 要條件;而條件①加上條件③則形成LF-LD 為分岔情況 2 的必要條件,如圖 2-38

(44)

所示。

針對判斷分岔時的第3 種設計情況的考量,分岔情況 3,先以 LF-RD 的情況 且線段的底色為黃色做為說明,Window 前邊界 Pixel 由上至下為 11110001100,其 中底色為灰色的3 個 Pixel 都為 0 的就是空白也就是分岔處,如圖 2-39 所示。將 這些值存放在一個1 維陣列內,底色為藍色做為 MSB(most significant bit),底色為 粉紅色做為LSB(least significant bit)。圖 2-39 為第 3 種情況,當 LF-RD 時,底色 為黃色是要被執行細線化的線條,藍色實線與粉紅色實線與 2 條紅色實線構成一 個 Window 包覆住該線條,並在 LF -RD Window 內偵測到分岔,分岔的 Pixel 由 MSB 至 LSB 依序為 11110001100;當 LF-LD 時,底色為黑色虛斜線是要被執行細 線化的線條,藍色虛線與粉紅色虛線與 2 條紅色虛線構成一個 Window 包覆住該 線條,並在LF -LD Window 內偵測到分岔,分岔的 Pixel 由 MSB 至 LSB 依序也同 為11110001100。

(45)

圖 2-40 分岔情況 3 的 Window 前邊界存入 1 維陣列與簡化過程 分岔情況3 的分岔 Pixel 的排列會先經過一道簡化程序,將連續個數大於 1 的 會簡化成單一個數。1111 簡化為 1,000 簡化為 0,11 簡化為 1,00 簡化為 0。所 以原本的11110001100 會先被簡化為 1010 後,再存入 1 維陣列內。再加上 Window 的左右邊的 Pixel 偵測判斷,條件①加上條件②則形成 LF-RD 為分岔情況 3 的必 要條件;而條件①加上條件③則形成LF-LD 為分岔情況 3 的必要條件,如圖 2-40 所示。 針對判斷分岔時的第4 種設計情況的考量,分岔情況 4,先以 LF-RD 的情況 且線段的底色為黃色做為說明,Window 前邊界 Pixel 由上至下為 11110001111,其 中底色為灰色的3 個 Pixel 都為 0 的就是空白也就是分岔處,如圖 2-41 所示。將 這些值存放在一個1 維陣列內,底色為藍色做為 MSB(most significant bit),底色為 粉紅色做為LSB(least significant bit)。圖 2-41 為第 4 種情況,當 LF-RD 時,底色 為黃色是要被執行細線化的線條,藍色實線與粉紅色實線與 2 條紅色實線構成一 個 Window 包覆住該線條,並在 LF -RD Window 內偵測到分岔,分岔的 Pixel 由 MSB 至 LSB 依序為 11110001111;當 LF-LD 時,底色為黑色虛斜線是要被執行細 線化的線條,藍色虛線與粉紅色虛線與 2 條紅色虛線構成一個 Window 包覆住該 線條,並在LF -LD Window 內偵測到分岔,分岔的 Pixel 由 MSB 至 LSB 依序也同 為11110001111。

(46)

圖 2-41 分岔情況 4 圖 2-42 分岔情況 4 的 Window 前邊界存入 1 維陣列與簡化過程 分岔情況4 的分岔 Pixel 的排列會先經過一道簡化程序,將連續個數大於 1 的 會簡化成單一個數。1111 簡化為 1,000 簡化為 0,1111 簡化為 1。所以原本的 11110001111 會先被簡化為 101 後,再存入 1 維陣列內。再加上 Window 的左右邊 的 Pixel 偵測判斷,條件①加上條件②則形成 LF-RD 為分岔情況 4 的必要條件; 而條件①加上條件③則形成LF-LD 為分岔情況 4 的必要條件,如圖 2-42 所示。 針對判斷分岔時的第 5 種設計情況的考量,分岔情況 5 是比較特例的情況, 這是代表Window 前邊界沒有分岔但 Window 兩側均偵測到有 Pixel。先以 LF-RD 的 情 況 且 線 段 的 底 色 為 黃 色 做 為 說 明 ,Window 前 邊 界 Pixel 由 上 至下 為 00000000000,其中 Window 的兩個側邊均有與線條呈現交叉,如圖 2-43 所示。將 這些值存放在一個1 維陣列內,底色為藍色做為 MSB(most significant bit),底色為

(47)

粉紅色做為LSB(least significant bit)。圖 2-43 為第 5 種情況,當 LF-RD 時,底色 為黃色是要被執行細線化的線條,藍色實線與粉紅色實線與 2 條紅色實線構成一 個Window 包覆住該線條,並在 LF -RD Window 內偵測到 Window 前邊界均無包 含 Pixel 且 Window 兩側邊與線條呈現交叉,Window 前邊界的 Pixel 由 MSB 至 LSB 依序為 00000000000;當 LF-LD 時,底色為黑色虛斜線是要被執行細線化的 線條,藍色虛線與粉紅色虛線與2 條紅色虛線構成一個 Window 包覆住該線條,並 在LF -LD Window 內偵測到如同 LF-RD 時的狀況,只不過左右邊界的狀況相反, Window 前邊界的 Pixel 由 MSB 至 LSB 依序也同為 00000000000。 圖 2-43 分岔情況 5 圖 2-44 分岔情況 5 的 Window 前邊界存入 1 維陣列與簡化過程 分岔情況5 的分岔 Pixel 的排列會先經過一道簡化程序,將連續個數大於 1 的 會簡化成單一個數。00000000000 簡化為 0。所以原本的 00000000000 會先被簡化

(48)

為0 後,再存入 1 維陣列內。再加上 Window 的左右邊的 Pixel 偵測判斷,條件① 加上條件②則形成LF-RD 為分岔情況 5 的必要條件;而條件①加上條件③則形成 LF-LD 為分岔情況 5 的必要條件,如圖 2-44 所示。

針對判斷分岔時的第 6 種設計情況的考量,分岔情況 6 是比較特例的情況, 這是代表Window 前邊界沒有分岔但 Window 一側偵測到有 Pixel,另外一側則沒 有偵測到Pixel。先以 LF-RD 的情況且線段的底色為黃色做為說明,Window 前邊 界Pixel 由上至下為 00000001100,其中 Window 的一個側邊有與線條呈現交叉, 另一側則沒有,如圖 2-45 所示。將這些值存放在一個 1 維陣列內,底色為藍色做 為MSB(most significant bit),底色為粉紅色做為 LSB(least significant bit)。圖 2-45 為第6 種情況,當 LF-RD 時,底色為黃色是要被執行細線化的線條,藍色實線與 粉紅色實線與2 條紅色實線構成一個 Window 包覆住該線條,並在 LF -RD Window 內偵測到Window 前邊界有包含 Pixel 且 Window 一側邊與線條呈現交叉,另一側 則沒有,Window 前邊界的 Pixel 由 MSB 至 LSB 依序為 00000001100;當 LF-LD 時,底色為黑色虛斜線是要被執行細線化的線條,藍色虛線與粉紅色虛線與 2 條 紅色虛線構成一個Window 包覆住該線條,並在 LF -LD Window 內偵測到如同 LF-RD 時的狀況,只不過左右邊界的狀況相反,Window 前邊界的 Pixel 由 MSB 至 LSB 依序也同為 00000001100。 圖 2-45 分岔情況 6

(49)

圖 2-46 分岔情況 6 的 Window 前邊界存入 1 維陣列與簡化過程 分岔情況6 的分岔 Pixel 的排列會先經過一道簡化程序,將連續個數大於 1 的 會簡化成單一個數。0000000 簡化為 0,000 簡化為 0,11 簡化為 1,00 簡化為 0。 所以原本的00000001100 會先被簡化為 010 後,再存入 1 維陣列內。再加上 Window 的左右邊的 Pixel 偵測判斷,條件①加上條件②則形成 LF-RD 為分岔情況 6 的必 要條件;而條件①加上條件③則形成LF-LD 為分岔情況 6 的必要條件,如圖 2-46 所示。 針對判斷分岔時的第7 種設計情況的考量,分岔情況 7,如圖 2-47 所示。此 為分岔情況6 的上下顛倒的情況。形成分岔情況 7 的條件,如圖 2-48 所示。 圖 2-47 分岔情況 7

(50)

圖 2-48 分岔情況 7 的 Window 前邊界存入 1 維陣列與簡化過程

針對判斷分岔時的第 8 種設計情況的考量,分岔情況 8 是比較特例的情況, 這是代表Window 前邊界沒有分岔但 Window 兩側均有偵測到 Pixel。先以 LF-RD 的 情 況 且 線 段 的 底 色 為 黃 色 做 為 說 明 ,Window 前 邊 界 Pixel 由 上 至下 為 00000001111,其中 Window 的兩個側邊均有與線條呈現交叉,如圖 2-49 所示。將 這些值存放在一個1 維陣列內,底色為藍色做為 MSB(most significant bit),底色為 粉紅色做為LSB(least significant bit)。圖 2-49 為第 8 種情況,當 LF-RD 時,底色 為黃色是要被執行細線化的線條,藍色實線與粉紅色實線與 2 條紅色實線構成一 個Window 包覆住該線條,並在 LF -RD Window 內偵測到 Window 前邊界有包含 Pixel 且 Window 兩側邊與線條呈現交叉,Window 前邊界的 Pixel 由 MSB 至 LSB 依序為00000001111;當 LF-LD 時,底色為黑色虛斜線是要被執行細線化的線條, 藍色虛線與粉紅色虛線與2 條紅色虛線構成一個 Window 包覆住該線條,並在 LF -LD Window 內偵測到如同 LF-RD 時的狀況,只不過左右邊界的狀況相反,Window 前邊界的Pixel 由 MSB 至 LSB 依序也同為 00000001111。

(51)

圖 2-49 分岔情況 8 圖 2-50 分岔情況 8 的 Window 前邊界存入 1 維陣列與簡化過程 分岔情況8 的分岔 Pixel 的排列會先經過一道簡化程序,將連續個數大於 1 的 會簡化成單一個數。0000000 簡化為 0,1111 簡化為 1。所以原本的 00000001111 會先被簡化為01 後,再存入 1 維陣列內。再加上 Window 的左右邊的 Pixel 偵測 判斷,條件①加上條件②則形成LF-RD 為分岔情況 8 的必要條件;而條件①加上 條件③則形成LF-LD 為分岔情況 8 的必要條件,如圖 2-50 所示。 針對判斷分岔時的第9 種設計情況的考量,分岔情況 9,如圖 2-51 所示。此 為分岔情況8 的上下顛倒的情況。形成分岔情況 9 的條件,如圖 2-52 所示。

(52)

圖 2-51 分岔情況 9

圖 2-52 分岔情況 9 的 Window 前邊界存入 1 維陣列與簡化過程

LF-RD, LF-LD, LF-UD, LF-DD 圖形化各個參數介紹

Line Following 的一些很多的名詞參數,像是 Default Left Point、Default Right Point、Window Center、d、Left Side、Right Side、Front、Rear、由 Left Point 經由 d 所擴展出來的 Pixel 點、由 Right Point 經由 d 所擴展出來的 Pixel 點,Next Left Point 與 Next Right Point 這些名詞將用 Line Follow-Right Direction(LF-RD)為例做 說明,而LF-LD、LF-UD 與 LF-DD 亦相同。如圖 2-53 所示的 LF-RD 中,線條的 Pixel 點以數字 1 來表示,Default Left Point 與 Default Right Point 均以 X 來表示; Window Center 以英文小寫 o 來代表;Window 的 Left Side 以籃色(R:0 G:0 B: 255)表示;Window 的 Right Side 以粉紅色(R:255 G:0 B:255)表示;Window 的

(53)

Front 和 Rear 均以紅色(R:255 G:0 B:0)表示;由 Left Point 經由 d 所擴展出來 的Pixel 點以淺藍色(R:204 G:255 B:255)表示;由 Right Point 經由 d 所擴展出 來的Pixel 點以淺橙色(R:255 G:204 B:153)表示;Next Left Point 以深藍色(R: 51 G:204 B:204)表示;Next Right Point 以深橙色(R:255 G:153 B:0)表示。可 以注意的是,此Window 為一個大小是 5x7 且 d 等於 2。

圖 2-53 LF-RD 圖形化參數(d=2)

下面為另外3 個方向的圖形化參數介紹,LF-LD、LF-UD 與 LF-DD 的圖形化 參數,如圖 2-54 所示。從這 4 個圖形化中可以發現由 Default Left Point 所擴展的 d 方向的某個分量上會與 LF 的行進方向相同。

(54)
(55)

第三章

輪廓追蹤、紋路轉折與紋路分岔研

輪廓追蹤

輪廓追蹤的英文為 Contour Tracing,也稱為 Border Following 或是 Boundary Following。

其中1 代表數位影像中的”black”像素(也稱之為 black pixel),是圖案中的一部 份,而0 則代表數位影像中的”white”像素(也稱之為 white pixel),是背景的一部份。

圖案的邊界定義為是一組圖案的邊界像素(border pixels)。共分為 2 種邊界像 素(border pixel):4-border pixel 與 8-border pixel。假如一個 black pixel 和最少有一 個white pixel 共享一個邊緣的話,就稱該 black pixel 為 4-border pixel;假如一個 black pixel 和最少有一個 white pixel 共享一個邊緣或是頂點的話,就稱該 black pixel 為8-border pixel。

Contour Tracing 屬於影像處裡中的前置處理的一種,對於在使用特徵萃取演算 法(Feature Extracting Algorithms)時,針對 Contour Pixels 來執行時,因為只是從圖 案中全部pixel 裡所取出的一部份 pixel,所以在執行速度上會比針對圖案中全部的 pixel 時還要來的快。

3.1.1 輪廓追蹤介紹

共有4 種 Contour Tracing Algorithms 最為普遍,分別為 Square Tracing Algorithm、 Moore-Neighbor Tracing、Radial Sweep 以及 Theo Pavlidis' Algorithm。前面 2 種演 算法容易執行,所以常被拿來應用在圖案的輪廓追蹤上。但是,這2 種演算法都有 數個缺點,因為其演算法中的特殊pixel 連接形態,導致不適合應用在較大型的圖 案。本研究的Line Following 中則應到最後一種演算法。

(56)

所討論的這4 個演算法皆忽略圖案中的”hole”,假設給定一張指紋圖,其圖案, 如圖 3-1 所示。在此所談論的 hole 如圖 3-2 所示的藍色區域。

圖 3-1 指紋圖案

圖 3-2 指紋圖案中的 hole 示意圖

因為在本研究的細線化的Line Following 中一部份需利用到 Contour Tracing 技 術,而該技術的演算法就是使用Theo Pavlidis' Algorithm。而在計算 Contour Tracing Window 內的分支線數量也同樣運用此演算法。

(57)

3.1.2 輪廓追蹤 Expanded Window 的設計重點

輪廓追蹤所找到的boundary pixel 均會儲存在一個 1D Array 的陣列中,由順時 針的方式所找到的boundary pixel 會儲存在一個 Left Point 的 1D Array 中,而由逆 時針的方式所找到的boundary pixel 則會儲存在一個 Right Point 的 1D Array 中, 依照索引值來將這兩個陣列各取出一個Left Point 值與 Right Point 值。然而取出來 的一對Left Point 與 Right Point 在排列上是不固定的。如果只是用單一個演算法來 擴展Window 將會導致錯誤。以 LF-UD,d=1 為例,在正常情況下,Right Point(橘 色圓點)都會落後或水平於 Left Point(水藍色圓點),所以架構出的 Window(紅色 3x3 的矩形)是正常的,如圖 3-3 所示。

圖 3-3 當 LF-UD,d=1 時,Right Point(橘色圓點)落後於 Left Point(水藍色圓點) 同樣以LF-UD,d=1 為例,輪廓追蹤所找出的 Right Point(橘色圓點)則會有可 能超過Left Point(水藍色圓點)1 個 pixel 以上,則所架構出的 Window(紅色 3x1 的 矩形)是合理的,如圖 3-4 所示。可以想像一個不合理的 Window,要在其內部找出 Next Left Point 和 Next Right Point 是會導致問題的。

(58)

圖 3-4 當 LF-UD,d=1 時,Right Point(橘色圓點)超前 Left Point(水藍色圓點)1 個 pixel 以上。此 Expanded Window 已變形,無法找出合理的 Next Left Point 與 Next

Right Point

所以本論文提出了一個針對輪廓追蹤所找出的Left Point 與 Right Point 在擴展 Window 時,依照其相對位置做出一套設計方法。此設計方法區分為人走在黑色圓 圈的行進方向為順時針還是逆時針2 種,當行進方向為順時針時,Left Point 與 Right Point 的擴展方式如圖 3-5 所示;行進方向為逆時針時,Left Point 與 Right Point 的 擴展方式如圖 3-6 所示。

在這2 張設計圖(如圖 3-5 與圖 3-6 所示)中共列舉了 8 個不同位置的 Left Point 與Right Point 的 Window 擴展方式,每一個位置都有一個 Left Point 與一個 Right Point,這樣組成一對。也可比較每一對的 Left Point 與 Right Point 的相對位置都是 不一樣的,但不難發現,有些成對組合的Left Point 與 Right Point 的擴展方向是相 同的,以圖 3-5 為例,第 1 對與第 8 對的擴展方向是相同的,第 2 對與第 3 對的 擴展方向是相同的,第4 對與第 5 對的擴展方向是相同的,第 6 對與第 7 對的擴 展方向是相同的;而以圖 3-6 為例,也是一樣,只差別在 Left Point 與 Right Point 的位置不同。

值得一提的是,2 張圖內的 8 對位置是可以彼此互相切換的,例如圖 3-5 的第 1 對的 Left Point 位置是高於 Right Point 的,但當 Left Point 的位置低於 Right Point 時,則 Window 的擴展方式則變成圖 3-6 的第 3 對的方式,這是很特別的一個設 計方式。

(59)

圖 3-5 人的行進方向為順時針時,圓圈上每個位置的 Left Point 與 Right Point 的 輪廓追蹤擴展Window 方式的設計圖

圖 3-6 人的行進方向為逆時針時,圓圈上每個位置的 Left Point 與 Right Point 的 輪廓追蹤擴展Window 方式的設計圖

既然由輪廓追蹤所架構出的Window 已經成形了,那麼,接下來要討論的就是 要如何在這個Window 內抓取 Left Point 與 Right Point。依照吾人嘗試多次失敗的

(60)

研究,得到以下經驗:輪廓追蹤所架構出來Window 在分岔與劇烈轉折的實用性非 常強大,已經超越正統Line Following Baruch[3]所架構出的 Window。而在輪廓追 蹤所架構的 Window 內分岔時的各個分支處理上,每個分支所找到的第一對 Left Point 與 Right Point 盡量使用輪廓追蹤法來擴展 Window 的方式做 Line Following, 如果用 Baruch[3]來做 Line Following 的話在某些圖案的細線化執行上會有非常高 的難度(例如:45 度的指紋紋路分岔細線化時,原因在於所產生的 Window 四個邊 都是由垂直線與水平線所組成,Window 的四個邊並不是由非 0 度、90 度、180 度、 270 度所構成。只不過這議題目前並不在本研究討論範圍內。)。

因為要追蹤線條的兩側線條輪廓,所以運用了 2 隻瓢蟲來追蹤,一隻是順時 針自轉且當進入start pixel 時,左邊的 pixel 一定要為 white;另一隻是逆時針自轉 且當進入start pixel 時,右邊的 pixel 一定要為 white。

圖 3-7 L 瓢蟲和 R 瓢蟲:(a)順時針自轉且進入 start pixel 時,左邊必為 white;(b) 逆時針自轉且進入start pixel 時,右邊必為 white pixel

因為本研究的細線化是應用在指紋紋路,所以只考慮一分二的情況,不考慮一 分多的情況。當輪廓追蹤Window 偵測到 Window 右邊界有分岔時,也就是 Window 的右邊偵測到 101,這時左分支的 Right Point 可以容易計算出來,左分支的 Left Point 則必須考慮以下 5 種情況,本研究的方法是把 Window 的 4 個角落分別獨立 制定出來,RD 指的是 Window 的最右下角的位置(座標(7,2)),RU 指的是 Window 的最右上角的位置(座標(7,10)),LU 指的是 Window 的最左上角的位置(座標(2,10)), LD 指的是 Window 的最左下角的位置(座標(2,2)),Window 的 4 邊分別從各個角落 開始計算起,Window 的右邊界從 RD 開始計算,範圍從座標(7,2)到座標(7,9)為止; Window 的上邊界從 RU 開始計算,範圍從座標(7,10)到座標(3,10)為止;Window 的

(61)

左邊界從 LU 開始計算,範圍從座標(2,10)到座標(2,3)為止;Window 的下邊界從 LD 開始計算,範圍從座標(2,2)到座標(6,2)為止,如圖 3-8 所示。另外 4 種情況則 參考圖 3-9~圖 3-12 所示。

圖 3-8 L 瓢蟲分佈位置 Case1 Ladybird-L on RD course

(62)

圖 3-10 L 瓢蟲分佈位置 Case3 Ladybird-L on LU course

圖 3-11 L 瓢蟲分佈位置 Case4 Ladybird-L on LD course

圖 3-12 L 瓢蟲分佈位置 Case5 Ladybird-L on RD course

當輪廓追蹤Window 偵測到 Window 右邊界有分岔時,也就是 Window 的右邊 偵測到101,這時右分支的 Left Point 可以容易計算出來,右分支的 Right Point 則 必須考慮以下5 種情況,如同上述,一樣是把 Window 的 4 個角落分別獨立制定出 來,RD 指的是 Window 的最右下角的位置(座標(7,2)),RU 指的是 Window 的最右 上角的位置(座標(7,10)),LU 指的是 Window 的最左上角的位置(座標(2,10)),LD 指的是Window 的最左下角的位置(座標(2,2)),Window 的 4 邊分別從各個角落開 始計算起,Window 的右邊界從 RU 開始計算,範圍從座標(7,10)到座標(7,3)為止; Window 的上邊界從 LU 開始計算,範圍從座標(2,10)到座標(6,10)為止;Window 的 左邊界從LD 開始計算,範圍從座標(2,2)到座標(2,9)為止;Window 的下邊界從 RD

(63)

開始計算,範圍從座標(7,2)到座標(3,2)為止,如圖 3-13 所示。另外 4 種情況則參 考圖 3-14~圖 3-17 所示。

圖 3-13 R 瓢蟲分佈位置 Case1 Ladybird-R on RU course

圖 3-14 R 瓢蟲分佈位置 Case2 Ladybird-R on RD course

(64)

圖 3-16 R 瓢蟲分佈位置 Case4 Ladybird-R on LU course

圖 3-17 R 瓢蟲分佈位置 Case5 Ladybird-R on RU course

然而,從上述由輪廓追蹤所架構出的 Window 的 5 種分岔追蹤情況可以發現 Case5 不是很合理,而且 Case4 同樣也是,經由多次的實作經驗發現,當分岔出現 在Window 的右邊界時,以左分支為例,Left Point 需一直追蹤到 Window 的左邊 界完為止,才可保證在特定某種指紋紋路下可以正確追蹤到Left Point。如同,當 分岔出現在Window 上邊界時,需一直追蹤到 Window 的下邊界完為止;分岔出現 在Window 左邊界時,需一直追蹤到 Window 的右邊界完為止;分岔出現在 Window 下邊界時,需一直追蹤到Window 的上邊界完為止。

當然,分岔的情況並不會剛剛好都在Window 的 4 個邊上呈現出來,有時會發 在 Window 的 4 個角落上,這種情況也是常有的,分別為紋路分岔在 Window 的 RD 處,如圖 3-18 所示;紋路分岔在 Window 的 LD 處,如圖 3-19 所示;路分岔

(65)

在Window 的 LU 處,如圖 3-20 所示;紋路分岔在 Window 的 RU 處,如圖 3-21。 這時要把原本只考慮 Window 一個邊界變成同時考慮兩個邊界,一邊為 10,另一 邊為01 時,就構成了 Window 角落分岔條件。

圖 3-18 輪廓追蹤 Window - Line Split at RD

(66)

圖 3-20 輪廓追蹤 Window - Line Split at LU

圖 3-21 輪廓追蹤 Window - Line Split at RU

紋路轉折特徵

在指紋細線化的過程中,紋路的分岔與轉折一直以來是關注的重點,也左右了 細線化完成後結果的成敗關鍵,更影響後續程序處理的指紋辨識率。LF-RD 的演 算法在紋路為水平直線時,在當遇到微微向上或向下的線段時,還是能正常運作, 但是當線條越來越趨於往上時,原本的LF-RD 演算法已經無法繼續執行下去,需 設定一個轉換條件使得能由LF-RD 切換成 LF-UD 來繼續細線化垂直的線條。在細 線化的實作過程中,以線條劇烈轉折與線條多分岔(一分多和分岔匯合)最具挑戰性,

(67)

接下來將介紹由Chouinard and Plamondon[4]所提出的對於線條的分岔與劇烈轉折 的特別演算法。

3.2.1 紋路轉折處的分析

Baruch[3]與前面章節所討論,係數 d 都是呈 45 度的方式來擴展 Window, 也就是係數d 在對應到 X 軸的分量(dx)會等於對應到 Y 軸的分量(dy),如圖 3-22 所示。 圖 3-22 係數 d 呈現 45 度時,在 X 軸與 Y 軸上的分量示意圖。(a)當係數 d=1 時 (b)當係數 d=2 時 (c)當係數 d=3 時 需特別注意的是僅管圖形上為一個直角三角形,但係數d、dx 與 dy 的值,所 代表的是所經過的格子數的個數,並非一般數學上的所代表大小的值。由圖 3-22 可以理解出同一組的Left Point 與 Right Point 所架構出的 Window 大小只有與係數 d 有關,而 Chouinard and Plamondon[4]所提出的 Window 架構大小不僅與係數 d 有 關,而且和Left Point 與 Right Point 在 X 軸與 Y 軸的位置差距有關。

(68)

但這是應用在一般的手寫字(線條粗細均一)的狀況下才可行,因為每個筆劃和 筆劃之間的間隔大約會大於3 個 Pixel 的寬度,如果應用在某些指紋型態上,因為 其紋路的線條和線條之間有時僅僅相隔1 個 Pixel 的寬度(如圖 3-23 和圖 3-24 所 示)。 圖 3-23 指紋斜線條的間隔過小(實例 1) 圖 3-24 指紋斜線條的間隔過小(實例 2) 這裡值得一提的是,之前的RD、DD、LD 以及 UD 的 Window 中心點的公式, 都是使用 L、R、BMPWindow_Height、BMPWindow_Width 以及 d 等去計算出 Window 中心點。這樣套用在輪廓追蹤所架構出的 Window 是不可行的,理由是之 前的d 不再是單純的 d 了,而 L 與 R 的分佈位置的抓取難度較高與找法也更加繁

(69)

雜,所以才需要重新想一套 Window 中心點的計算方式來解決這問題,以下是從 BMP 動態線追隨圖像化擴展 Window 追蹤系統 V10.0 中的程式碼截取出來的新 Window 中心點的計算公式:

BMP_LPRP_Center = (BMP_i_y_start * BMPWidth + BMP_j_x_start) + Int((BMP_i_y_end - BMP_i_y_start) / 2) * BMPWidth + Int((BMP_j_x_end - BMP_j_x_start) / 2),

其思路是以BMP_j_x_start 和 BMP_i_y_start 為基準,再去擴展到整個 Window 的 中心點。也就是利用BMP_j_x_start 和 BMP_i_y_start 計算出 Window 的左下角, 之後再往上往右至Window 的中心。往上:加上(BMP_i_y_end - BMP_i_y_start) / 2 後再乘上 BMPWidth;往右:加上(BMP_j_x_end - BMP_j_x_start) / 2。

從圖 3-25 (a)可看出一個紋路的劇烈轉折且粗細不一,而圖 3-25 (b)是利用 Chouinard and Plamondon[4]且用 d 等於 1,方向為由下而上所模擬出的中心點(紫 色點)結果。如果是從下方開始使用 LF-UD 慢慢往上,由於線條急遽向右偏,將導 致 LF-RD 的演算法無法應付,所以才利用 Contour Tracing 來架構出 LF-CT(Line Following Contour Tracing)的產生。

圖 3-25 (a)劇烈轉折的紋路;(b)演算法模擬的中心點結果(d 等於 1)

分岔研究探討

數據

圖   2-8  連接 6 個中心點(O)即為該線條的骨架,如綠色直線所示
圖   2-10  行人由右往左,走在一條平坦彎曲的單行道上
表   2-1 Window 行進的方向與種類比較表
表   2-2  四種 Window 行進方向簡稱與說明
+7

參考文獻

相關文件

一組曲線 F 的垂直軌跡 (orthogonal trajectory) ,是指一條 曲線在與 F 中的曲線相交時,在交點相交的角度為直角。如

左圖的ㄅㄆ線為對稱軸,請 問哪一種畫法能畫出A點的對 稱點 B

在鐘面上報 時, 時針所屬 的時間範圍 在鐘面上計時, 相鄰刻度間為 一個單位時段..

路徑:線上申請專區 > 法治教育補助計畫申請 功能:計畫簡表下方

有一長條型鏈子,其外型由邊長為 1 公分的正六邊形排列而成。如下 圖表示此鏈之任一段花紋,其中每個黑色六邊形與 6 個白色六邊形相

有一長條型鏈子,其外型由邊長為 1 公分的正六邊形排 列而成。如下圖表示此鏈之任一段花紋,其中每個黑色 六邊形與 6 個白色六邊形相鄰。若鏈子上有

路旁上落客貨活動頻繁,經常有車輛駛經並需要在路旁短暫停留。就以九龍 上海街為例,該路段共有 7 個巴士站,有 11 條巴士線,每日有 690

•  三分搜在有水平線的情況下,如果可以確定水平線的地方一定是 答案的話,才可以用三分搜找極值。..