Transcript 演算法
以方向性的距離轉換擷取立體曲線骨架 碩士論文 指導教授: 張顧耀 老師 學生: 楊鎮宇 2013/11/8 大綱 • 簡介 • 相關研究 • 演算法 • 結果與討論 2013/11/8 簡介 • Curve-skeleton (曲線骨架) • 簡化複雜物體的表示方法 • 應用領域:動畫、虛擬導航、醫療影像…等等 二維空間中的曲線骨架 三維空間中的曲線骨架 2013/11/8 大綱 • 簡介 • 相關研究 • 演算法 • 結果與討論 2013/11/8 相關研究 • 曲線骨架常用的演算法類型 • Morphological thinning(細線化) • 由物體表面開始向內部一圈一圈 • 將點移除 • Distance transform(距離轉換) • General-field function(力場函式) 2013/11/8 相關研究 • 曲線骨架常用的演算法類型 • Morphological thinning(細線化) • Distance transform(距離轉換) • 物體中每一個點與邊界的最短距離 • General-field function(力場函式) 二值影像 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 0 1 2 2 1 0 1 1 1 1 1 1 0 1 2 2 1 0 1 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 放大之二值影像(6 * 6) DT 經由DT之後的結果 2013/11/8 相關研究 • 曲線骨架常用的演算法類型 • Morphological thinning(細線化) • Distance transform(距離轉換) • 物體中每一個點與邊界的最短距離 • General-field function(力場函式) 距離邊界越遠的點,數值越大(趨近白色) 距離邊界越近的點,數值越小(趨近黑色) 2013/11/8 相關研究 • 曲線骨架常用的演算法類型 • Morphological thinning(細線化) • Distance transform(距離轉換) • General-field function(力場函式) • 物體表面有斥力的作用 • 將物體中每一個點向內推擠 • 越往內部,受力越小 2013/11/8 大綱 • 簡介 • 相關研究 • 演算法 • 結果與討論 2013/11/8 演算法 • 以流水為主要概念 • 特徵點(水的撞擊處) DT • 流動方向 • 撞擊角度 • 方向性的DT • 反過來找水的源頭 DT 原圖 DT之後的結果 2013/11/8 演算法 • 步驟 1. 邊界點定義 • 步驟 2. 方向性的距離轉換(方向性的DT) • 步驟 3. 特徵點定義 • 步驟 4. 特徵點篩選 • 步驟 5. 特徵點延伸 • 步驟 6. 特徵點修剪 演算法流程圖 2013/11/8 演算法-步驟 1 (邊界點定義) • 邊界點定義 • 內邊界或外邊界 • 2D • 4鄰邊或8鄰邊 • 3D • 26鄰邊 (a)內邊界 (b)外邊界 (灰色: 物體 B: 代表邊界) 2013/11/8 演算法-步驟 1 (邊界點定義) • 邊界點定義 • 內邊界或外邊界 • 2D B1 B2 • 4鄰邊或8鄰邊 • 3D P B3 B4 • 26鄰邊 B B B B B B B B B B B1 B2 B3 B4 P B5 B6 B7 B8 B B B B B B B B 4-connected (4鄰邊) B B B B 8-connected (8鄰邊) 2013/11/8 演算法-步驟 1 (邊界點定義) • 邊界點定義 • 內邊界或外邊界 • 2D • 4鄰邊或8鄰邊 • 3D • 26鄰邊 26-connected(26鄰邊) 2013/11/8 演算法-步驟 2 (方向性的DT) • 步驟 2-1. 找出距離 2 2 2 • 兩點距離公式 (x2 − x1) +(y2 − y1) +(z2 − z1) • 搜尋方式: 矩形 • 步驟 2-2. 找出撞擊角度 • 步驟 2-3. 找出流動方向 B3 B1 B2 B4 P 1 2 B5 2013/11/8 演算法-步驟 2 (方向性的DT) • 步驟 2-1. 找出距離 2 2 2 • 兩點距離公式 (x2 − x1) +(y2 − y1) +(z2 − z1) • 搜尋方式: 矩形 B3 • 步驟 2-2. 找出撞擊角度 • 步驟 2-3. 找出流動方向 B1 B2 B4 P 第1次搜尋: D(P, B2) = 1.41 D(P, B4) = 1.41 1 B5 2013/11/8 演算法-步驟 2 (方向性的DT) • 步驟 2-1. 找出距離 2 2 2 • 兩點距離公式 (x2 − x1) +(y2 − y1) +(z2 − z1) • 搜尋方式: 矩形 B3 • 步驟 2-2. 找出撞擊角度 • 步驟 2-3. 找出流動方向 B1 B2 B4 B5 P 第1次搜尋: D(P, B2) = 1.41 D(P, B4) = 1.41 第2次搜尋: D(P, B1) = 2.23 D(P, B3) = 2 D(P, B5) = 2.23 2 P點距離邊界之距離 = 1 綠色點:搜尋到的邊界點 黃色點:距離最近的邊界點 2013/11/8 演算法-步驟 2 (方向性的DT) • 步驟 2-1. 找出距離 2 2 2 • 兩點距離公式 (x2 − x1) +(y2 − y1) +(z2 − z1) • 搜尋方式: 矩形 • 步驟 2-2. 找出撞擊角度 • 步驟 2-3. 找出流動方向 B1(7, -6) B2(-8, 0) P(0, 0) 8 7 2013/11/8 演算法-步驟 2 (方向性的DT) • 步驟 2-1. 找出距離 2 2 2 • 兩點距離公式 (x2 − x1) +(y2 − y1) +(z2 − z1) • 搜尋方式: 矩形 • 步驟 2-2. 找出撞擊角度 B1(7, -6) • 步驟 2-3. 找出流動方向 B2(-8, 0) P(0, 0) 第7次搜尋: D(P, B1) = 9.21 7 2013/11/8 演算法-步驟 2 (方向性的DT) • 步驟 2-1. 找出距離 2 2 2 • 兩點距離公式 (x2 − x1) +(y2 − y1) +(z2 − z1) • 搜尋方式: 矩形 • 步驟 2-2. 找出撞擊角度 B1(7, -6) • 步驟 2-3. 找出流動方向 B2(-8, 0) P(0, 0) 第7次搜尋: D(P, B1) = 9.21 第8次搜尋: D(P, B2) = 8 8 最短距離 - 搜尋次數 = 向外搜尋的圈數 P點距離邊界之距離 = 8 2013/11/8 演算法-步驟 2 (搜尋方式之變革) • 解決誤差值的問題 • 搜尋模式 • 矩形 • 圓形 Euclidean 距離 5.6 5 4.47 4.1 4 4.1 4.47 5 5.6 5 4.2 3.6 3.2 3 3.2 3.6 4.2 5 4.47 3.6 2.8 2.2 2 2.2 2.8 3.6 4.47 4.1 3.2 2.2 1.4 1 1.4 2.2 3.2 4.1 4 3 2 1 P 1 2 3 4 4.1 3.2 2.2 1.4 1 1.4 2.2 3.2 4.1 4.47 3.6 2.8 2.2 2 2.2 2.8 3.6 4.47 5 4.2 3.6 3.2 3 3.2 3.6 4.2 5 5.6 5 4.47 4.1 4 4.1 4.47 5 5.6 2013/11/8 演算法-步驟 2 (搜尋方式之變革) • 解決誤差值的問題 • 搜尋模式 • 矩形 • 圓形 5.6 5 4.47 4.1 4 4.1 4.47 5 5.6 5 4.2 3.6 3.2 3 3.2 3.6 4.2 5 4.47 3.6 2.8 2.2 2 2.2 2.8 3.6 4.47 4.1 3.2 2.2 1.4 1 1.4 2.2 3.2 4.1 4 3 2 1 P 1 2 3 4 4.1 3.2 2.2 1.4 1 1.4 2.2 3.2 4.1 4.47 3.6 2.8 2.2 2 2.2 2.8 3.6 4.47 5 4.2 3.6 3.2 3 3.2 3.6 4.2 5 5.6 5 4.47 4.1 4 4.1 4.47 5 5.6 2013/11/8 演算法-步驟 2 (方向性的DT) • 步驟 2-1. 找出距離 • 步驟 2-2. 找出撞擊角度 • 求兩向量之夾角公式: • 𝜃 = 𝑎𝑟𝑐𝑐𝑜𝑠 𝑎∙𝑏 𝑎 𝑏 • 步驟 2-3. 找出流動方向 53.16˚ B1 B2 P 2013/11/8 演算法-步驟 2 (方向性的DT) • 步驟 2-1. 找出距離 • 步驟 2-2. 找出撞擊角度 • 求兩向量之夾角公式: • 𝜃 = 𝑎𝑟𝑐𝑐𝑜𝑠 𝑎∙𝑏 𝑎 𝑏 • 最大角度 • 步驟 2-3. 找出流動方向 B3 B1 B4 133.13˚ B2 2013/11/8 演算法-步驟 2 (方向性的DT) • 步驟 2-1. 找出距離 • 步驟 2-2. 找出撞擊角度 • 步驟 2-3. 找出流動方向 • 向量C = 向量A + 向量B 向量B1P(-1, -2) 向量B2P(1, -2) (-1, -2) B1 (1, -2) B2 P(0, 0) 向量C = 向量B1P +向量B2P 向量C = (0, 4) 2013/11/8 演算法-步驟 3 (特徵點定義) • 撞擊角度大於臨界值的特徵點 • 臨界值 = 150度(預設值) 120度 150度 2013/11/8 演算法-步驟 4 (特徵點篩選) DT值 特徵點的數量 1 9 • 符合常態分佈的篩選範圍:1s 3 8 • 不符合條件就不篩選(>=68%) 4 2 5 3 6 1 11 1 17 1 18 51 19 29 20 2 • 物體表面有微小的雜訊 • 常態分佈來篩選 1~3 15.8% 4~17 7.4% 18~20 76.6% DT值平均:10 DT值標準差:7 特徵點總數:107 2013/11/8 演算法-步驟 4 (特徵點篩選) • 物體表面有微小的雜訊 篩選差別 2013/11/8 演算法-步驟 5 (特徵點延伸) • 由每一個點的向量找出其他可能的特徵點(撞擊點) • 流動方向 • 角度放寬比例底限 0.5 0 154˚ 0 0 149˚ 0 149 / 154 = 0.97 2013/11/8 演算法-步驟 5 (特徵點延伸) • 由每一個點的向量找出其他可能的特徵點(撞擊點) 延伸 延伸前 延伸後 2013/11/8 演算法-步驟 6 (修剪) • 3D 6-subiterations thinning algorithm • 遮罩(mask)比對 • 3D fully parallel thinning algorithm using P-simple points • 遮罩比對 • labeling • P-simple point • 3D Thinning(ITK) • Lee et al. 的 Thinning algorithm • Euler table 2013/11/8 大綱 • 簡介 • 相關研究 • 演算法 • 結果與討論 2013/11/8 結果與討論 2013/11/8 結果與討論 2013/11/8 結果與討論 2013/11/8 結果與討論 2013/11/8 結果與討論 2013/11/8 結果與討論 • 3D演算法的現況 • 問題 • 未來工作 • 2D演算法的抽取 • 提升執行速度 2013/11/8 結果與討論-人造大腸 • 人造大腸 • 修剪前 • 修剪後 • 問題 • 角度不理想 • 特徵點分佈不均 • 產生hole、裂縫 2013/11/8 結果與討論-人造大腸 • 人造大腸 • 修剪前 • 修剪後 2013/11/8 結果與討論-人造血管 • 人造大腸 • 修剪前 • 問題 • 骨架分離 2013/11/8 結果與討論 • 3D演算法的現況 • 問題 • 未來工作 • 2D演算法的抽取 • 提升執行速度 2013/11/8 THE END