圖像的特征點(diǎn)匹配概述
特征點(diǎn)匹配原理
如果提取的兩個特征點(diǎn)描述矢量間距離很小,這兩個特征點(diǎn)在對應(yīng)場景的同一位置,特征點(diǎn)匹配技術(shù)就是利用這個原理,從兩組特征點(diǎn)集合中找到兩輛距離最近的特征點(diǎn)匹配對,這個匹配對對應(yīng)的是場景同一個位置。
特征點(diǎn)匹配問題可以歸結(jié)為一個通過<font color=blue>距離函數(shù)</font>在高維矢量之間進(jìn)行相似性檢索的問題。針對度量空間設(shè)計的索引結(jié)構(gòu)算法在進(jìn)行相似度查詢時只利用了距離函數(shù)的三角不等式性質(zhì),所以使用更加普遍。
特征匹配算子
- 窮舉法: 將數(shù)據(jù)集中的點(diǎn)與查詢點(diǎn)逐一進(jìn)行距離比較。所以優(yōu)點(diǎn)是不需要進(jìn)行任何的數(shù)據(jù)預(yù)處理,操作也很簡單。但是它沒有利用數(shù)據(jù)集本身蘊(yùn)含的任何結(jié)構(gòu)信息,搜索效率相對較低。
- <font color=blue>建立數(shù)據(jù)索引</font>:先進(jìn)行預(yù)處理即建立數(shù)據(jù)索引,然后在進(jìn)行快速匹配。因?yàn)閷?shí)際數(shù)據(jù)一般都會呈現(xiàn)出簇狀的聚類形態(tài),他通過設(shè)計有效的索引結(jié)構(gòu)可以大大加快檢索的速度。
索引結(jié)構(gòu)的算法舉例
- 索引樹結(jié)構(gòu):對搜索空間進(jìn)行層次劃分,如果劃分出的空間沒有重疊叫Clipping法,比如<font color=blue>K-d樹</font>,如果有重疊叫Overlapping法,比如R-樹
- Hash法
- 空間填充曲線法
相似性查詢的方式
索引結(jié)構(gòu)中相似性查詢有兩種基本方式:
- 范圍查詢:從數(shù)據(jù)集中找出所有與查詢點(diǎn)距離小于給定距離閾值的數(shù)據(jù)。
- <font color=blue>k-近鄰查詢</font>:從數(shù)據(jù)集中找到距離查詢點(diǎn)最近的k個數(shù)據(jù),當(dāng)k=1時,它就是最近鄰查詢。
kd-樹算法
kd-樹是對數(shù)據(jù)點(diǎn)在k維空間中劃分的一種數(shù)據(jù)結(jié)構(gòu)。是一個二叉樹,每個節(jié)點(diǎn)表示的是一個空間范圍。
構(gòu)建二叉樹
kd-樹種每個結(jié)點(diǎn)的數(shù)據(jù)類型,kd-樹是一種二叉排序樹
節(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)
字段 | 數(shù)據(jù)類型 | 描述 |
---|---|---|
Node-data | 數(shù)據(jù)矢量 | 數(shù)據(jù)集中某個數(shù)據(jù)點(diǎn),是n維矢量 |
Range | 空間矢量 | 該節(jié)點(diǎn)所代表的空間范圍 |
split | 整數(shù) | 確定分割左右子節(jié)點(diǎn)的那個維度 |
left | 左子樹 | 這棵樹上的data都小于Node-data |
right | 右子樹 | 這棵樹上的data都大于Node-data |
構(gòu)建kd樹的流程圖
start=>start: 特征點(diǎn)數(shù)據(jù)集
op1=>subroutine: 展開kd-樹
start->op1
op2=>operation: 選擇最大方差的維數(shù)賦給split
op1->op2
op3=>operation: 選取split維的中值作為閾值根節(jié)點(diǎn)
op2->op3
con=>condition: 數(shù)據(jù)小于中值
op3->con
op4=>operation: 左子樹特征數(shù)據(jù)
op5=>operation: 右子樹特征數(shù)據(jù)
sub1=>subroutine: 展開左子樹
sub2=>subroutine: 展開右子樹
con(yes)->op4->sub1
con(no)->op5->sub2