图像对齐和拼接

图像拼接的作用

将两个或更多有重叠的图像合并成一个更大的图像。

基本流程

1.在同一位置拍摄一系列图像

2.计算第一幅图像和第二幅图像之间的运动

3.移动第二幅图像,使得其与第一幅图像相同部分重叠

4.融合两幅图像,形成镶嵌图。

5.如果有多幅图像,则不断重复2-4步。

 

特征点匹配

匹配两幅图的相似的特征点。

最近邻匹配

对每个特征点,在另一幅图像找与其最相似的k个特征点。

穷举法

时间复杂度为O(DN),只适合特征点数目N≤2500情况。

K-D树

时间复杂度O(logN)。

构建树

不断分裂方差最大的轴。

例如给定样本集:{(2,3), (5,4), (9,6), (4,7), (8,1), (7,2)}

x轴和y轴的方差分别为39,28.63。

分裂方式:x轴。

分裂点:按照中值点分裂,所有样本点x按照大小排序。(2,3), (4,7), (5,4), (7,2), (8,1), (9,6)。x轴的中值为:(5+7)/2=6

分裂后左儿子:{(2,3), (4,7), (5,4)}

分裂后右儿子:{(7,2), (8,1), (9,6)}

最终经过划分之后:

查询

查询最近邻相似的,如寻找(2,4.5)的最近邻,最终找到(4,7),距离dist=3.202

回溯

判断搜索路径上是否有其他距离更近的点。回溯的时候,不断计算与回溯的点的距离,此距离为半径,查找点为圆心,判断是否与超平面相交。

比如回溯到(5,4),(2,4.5)与其距离dits=3.041,小于3.202,将(5,4)赋给nearest。

以(2,4.5)为圆心,以dist=3.041为半径,画一个圆。

因为圆与超平面y=4相交,所以要跳到(5,4)的左子空间进行搜索,将(2,3)加入到search_path中。 search_path 中的节点为<(7, 2), (2, 3)>。 

回溯到(2,3),其与(2,4.5)距离为1.5。设置最近距离为1.5

回溯到节点(7,2),以(2,4.5)为圆心,dist=1.5半径,并不和X=7相交,所以不用跳到(7,2)的右子空间进行搜索。

BBF(Best Bin First)

将查询路径上的点进行排序,如按照各自分割超平面与查询点的距离排序。优先考虑距离小的点。

Locality-Sensitive Hashing

预处理

将数据点用多个Hash函数进行Hash,使得距离近(落在同一个桶)的点冲突可能性大。

查询

将查询点用Hash函数进行Hash,对查询点所在的桶中的点进行检索。

Local Sensitive所满足的条件:

sim(p,q)是p和q之间得相似度。

对p的哈希h(p)等于对q的哈希h(q)。

p,q距离越近,P(h(p)=h(q))越大

p,q距离越远,P(h(p)=h(q))越小

可能的哈希函数

rTx≥0为分开空间的超平面

一个随机超平面分开两个单位向量的概率取决于两个向量之间的夹角。

总结

特征数目N较小,用暴力搜索

空间维度D较小,可用KD树

空间维度D较高,采用哈希

 

posted @   Laplace蒜子  阅读(73)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示