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