52、图像拼接、匹配检索与序列处理技术详解

图像拼接、匹配检索与序列处理技术详解

1. 图像拼接与正射影像

在图像拼接过程中,曝光情况是一个关键因素。若图像拍摄时曝光相同,拼接块的边缘将不可见;若曝光不同,则需要分析两组重叠像素,以确定平均强度偏移和比例因子,用于在拼接前校正拼接块,这一过程被称为色调匹配。

此外,还需考虑图像中不在地平面上的点的影响,例如高楼大厦上的点。从正上方拍摄的图像只会显示建筑物的屋顶,而从远处拍摄的图像则是能看到建筑物侧面的斜视图。在拼接图像时,我们希望营造出从正上方观察图像中每个点的错觉,因此不应看到任何建筑物的侧面。这种类型的图像被称为正射影像,与透视视图不同,正射影像中的光线是平行的,意味着观察点在无穷远处。在合成图像的每个像素处,我们可以从任何重叠的拼接块中选择一个像素。为了最佳地近似正射影像,我们应选择最接近正上方的像素,即在变形之前最接近主点的像素。

在摄影测量中,这种不使用显式控制点(即图像中手动识别的对应特征)的拼接方式被称为无控制数字拼接,其结果是得到一个观察点在无穷远处的正射影像。完整代码可在示例目录中的 mosaic1 中找到。相关原理也可应用于图像稳定问题,通过单应性矩阵将新图像中的特征映射到前一图像中的位置。

2. 图像匹配与检索

给定一组图像 ${I_j, j = 1 \cdots N}$ 和一张新图像 $I’$,图像匹配问题就是要确定 $j$,使得 $I’$ 和 $I_j$ 最为相似。考虑到视角和曝光变化的影响,这是一个具有挑战性的问题。之前使用的像素级相似度度量方法(如 SSD 或 ZNCC)并不适用于此问题,因为视角的微小变化就可能导致相似度几乎为零。

图像匹配可用于机器人判断是否曾访问过特定地点或见过相同物体。若之前的图像包含一些语义数据(如物体名称或地点名称),那么通过推理,这些语义数据也适用于新图像。例如,如果一张新图像与带有“大厅”语义标签的现有图像匹配,那么意味着机器人正在看到相同的场景,因此它处于或接近大厅。

这里介绍的“词袋”技术在过去几年的机器人领域中变得非常流行,它基于之前介绍的 SURF 点特征和 k-means 聚类技术。具体操作步骤如下:
1. 加载图像并计算 SURF 特征

images = iread('campus/*.jpg', 'mono');
sf = isurf(images);

sf 是一个 MATLAB 单元数组,其元素是对应输入图像的 SURF 特征向量。例如, sf{1} 是与序列中第一张图像对应的 663 个 SURF 特征对象的向量。所有图像的 SURF 特征集合可通过以下代码获取:

sf = [sf{:}]

此时 sf 是一个包含 17945 个 SURF 特征对象的向量。
2. 查看特定 SURF 特征

sf(380)

可以看到该特征的属性,如质心、尺度和方向等。 image_id 属性表明该特征是从原始图像序列的第一张图像中提取的。我们可以显示该图像并叠加该特征:

idisp(images(:,:,1))
sf(380).plot('g+')
sf(380).plot_scale('g', 'clock')

该特征的支持区域可通过以下代码显示:

sf(380).support(images)
  1. 进行 k-means 聚类
    将每个 SURF 特征描述符视为 64 维空间中的一个点,相似的描述符会形成聚类,这是一个 k-means 问题。为了找到 2000 个特征聚类,可使用以下代码:
bag = BagOfWords(sf, 2000)

这将返回一个 BagOfWords 对象,其中包含原始特征、每个聚类的中心以及其他各种信息。每个聚类被称为一个视觉词,由一个 64 元素的 SURF 描述符描述。所有视觉词的集合(这里是 2000 个)构成一个视觉词汇表。
4. 为每个 SURF 特征分配视觉词索引

bag.words(380)

可以看到 k-means 聚类将该图像特征分配给了词汇表中的第 1057 个视觉词。该视觉词在图像集中出现的次数可通过以下代码查看:

bag.occurrence(1057)

它至少在以下图像中出现过一次:

bag.contains(1057)

我们可以显示该视觉词的一些不同实例:

bag.exemplars(1057, images)
  1. 统计视觉词的频率
[word,f] = bag.wordfreq()

word 是包含所有唯一视觉词的向量, f 是它们对应的频率。我们可以按频率降序显示这些视觉词:

bar( sort(f, 'descend') )

出现频率非常高的视觉词对区分图像的意义不大,类似于文本检索中的停用词。我们可以从词袋中移除这些视觉停用词:

bag.remove_stop(50)

这将移除与 50 个最频繁出现的视觉词相关的 1850 个特征。
6. 描述图像并计算相似度
我们的视觉词汇表包含 $K$ 个视觉词(这里 $K = 1950$),我们可以用一个 $K$ 元素的向量来描述每个图像,该向量的元素描述了对应视觉词在图像中的频率。加权词频向量是 BagOfWords 对象的一个属性,可通过以下代码访问:

M = bag.wordvector;

两个图像之间的相似度是它们对应词频向量之间夹角的余弦值,可通过 similarity 方法实现。为了计算两组词袋中图像之间的相互相似度,可使用以下代码:

S = bag.similarity(bag)

这将返回一个 20×20 的相似度矩阵,其中元素 $S(i,j)$ 表示第 $i$ 列和第 $j$ 列(即图像 $i$ 和图像 $j$)之间的相似度。该相似度矩阵可以通过以下代码可视化:

idisp(S, 'bar')

考虑图像 11,它与其他图像的相似度可通过相似度矩阵的第 11 行(或列)获得:

s = S(:,11);
[z,k] = sort(s, 'descend');
[z k]

可以看到图像 11 与自身的相似度为 1,按相似度降序排列的其他图像依次为 9、13、10 等。

现在假设有一些新图像,我们希望确定它们与之前图像中最相似的图像。步骤与上述类似:

images2 = iread('campus/holdout/*.jpg', 'mono');
sf2 = isurf(images2)
bag2 = BagOfWords(sf2, bag)
S2 = bag.similarity(bag2);
[z,i] = max(S2)

通过这些步骤,我们可以找到每个新图像在原始图像序列中最相似的图像。

3. 图像序列处理

在处理图像序列时,我们可以使用相关工具包。以下是具体的操作步骤:
1. 加载图像序列

im = iread('bridge-l/*.png', 'roi', [20 750; 20 480]);

'roi' 选项用于选择每个图像中的感兴趣区域,以消除不规则的黑色边框。这些图像的像素为 16 位,由于序列已经接近 200 Mbyte,为避免内存需求增加四倍,我们不将其转换为双精度。
2. 显示图像序列动画

ianimate(im, 'fps', 10);

以每秒 10 帧的速度显示图像序列动画。
3. 计算角点特征

c = icorner(im, 'nfeat', 200, 'patch', 7);

这里使用了 Harris 角点,因为它们的计算成本较低。对于此应用,帧与帧之间的方向和尺度变化较小,Harris 角点特征非常适合。该函数返回一个单元数组,每个元素是每个输入图像中 200 个最强 Harris 角点特征的向量。 'patch' 选项指定了一个 15×15 的局部邻域描述符,是一个 225 元素的单位向量。我们可以显示叠加了特征的图像序列动画:

ianimate(im, c, 'fps', 10);

特征与高梯度区域(如树木边缘、标志和汽车的角点)相关联。观察动画可以发现,角点特征在许多帧中可靠地附着在世界点上。图像中特征的运动被称为光流,它是相机在世界中的运动和世界三维结构的函数。
4. 跟踪特征
使用 Tracker 类来维护特征的运动轨迹:

t = Tracker(im, c);

对于每个新帧,每个轨迹会在其前一帧位置的指定半径内找到一个特征子集,将这些特征的描述符与轨迹在前一帧的特征描述符进行比较,如果找到匹配,则更新轨迹。未被轨迹认领的特征被视为新轨迹的起点,会在表中创建一个新条目并分配一个唯一的轨迹标识符。如果轨迹在当前帧中未找到匹配特征,则计数器会递增,当计数器超过某个阈值时,轨迹将被移除。

轨迹的描述符在每个时间步都会更新,这样即使支持区域的外观在帧与帧之间发生变化,我们也总是将新特征与被跟踪特征的最新外观进行比较。轨迹数据作为类的属性存储,特征轨迹可以通过以下代码显示为单独的线条:

t.plot()

可以看到特征从图像中心向外的运动,特征似乎扩展的点被称为扩展中心。在双相机对极几何中,第二个相机位于第一个相机的前方,因此对极点将靠近图像的中间,对极线都通过该点。对应点必须位于对极线上,因此会沿着这些辐射线移动,且移动量与世界点的深度成反比。

可以使用以下代码查看每个特征被跟踪的帧数分布:

ihist( t.tracklengths(), 'normcdf' )

大多数特征的跟踪帧数较短,平均为 14 帧,但最长可达 140 帧。

总结

本文详细介绍了图像拼接、匹配检索和序列处理的相关技术,包括色调匹配、正射影像生成、词袋技术进行图像匹配以及图像序列中的特征跟踪等内容,并给出了具体的代码实现和操作步骤。这些技术在机器人视觉、摄影测量等领域具有广泛的应用前景。

相关流程图

graph TD;
    A[加载图像] --> B[计算SURF特征];
    B --> C[k-means聚类];
    C --> D[分配视觉词索引];
    D --> E[统计视觉词频率];
    E --> F[移除停用词];
    F --> G[描述图像并计算相似度];

表格:图像匹配与检索步骤总结

步骤 操作 代码示例
加载图像 加载一组图像和新图像 images = iread('campus/*.jpg', 'mono'); images2 = iread('campus/holdout/*.jpg', 'mono');
计算特征 计算图像的SURF特征 sf = isurf(images); sf2 = isurf(images2);
聚类 进行k-means聚类 bag = BagOfWords(sf, 2000); bag2 = BagOfWords(sf2, bag);
分配索引 为特征分配视觉词索引 bag.words(380);
统计频率 统计视觉词频率 [word,f] = bag.wordfreq();
移除停用词 从词袋中移除停用词 bag.remove_stop(50);
计算相似度 计算图像之间的相似度 S = bag.similarity(bag); S2 = bag.similarity(bag2);
查找匹配 找到新图像最相似的图像 [z,i] = max(S2);

列表:图像序列处理步骤

  1. 加载图像序列并选择感兴趣区域。
  2. 显示图像序列动画。
  3. 计算每个帧的角点特征。
  4. 使用 Tracker 类跟踪特征。
  5. 显示特征轨迹并分析跟踪帧数分布。

图像拼接、匹配检索与序列处理技术详解

4. 技术要点总结与对比

为了更清晰地理解图像拼接、匹配检索和序列处理这三项技术,下面对它们的关键要点进行总结和对比。

技术类型 关键要点 应用场景 主要操作步骤
图像拼接 - 考虑曝光情况进行色调匹配
- 生成正射影像,避免看到建筑物侧面
- 不使用显式控制点的无控制数字拼接
摄影测量、创建全景图像等 1. 分析重叠像素确定平均强度偏移和比例因子进行色调匹配
2. 选择最接近正上方的像素近似正射影像
3. 利用单应性矩阵解决图像稳定问题
图像匹配与检索 - 基于“词袋”技术,结合 SURF 点特征和 k - means 聚类
- 考虑视角和曝光变化对匹配的影响
- 用视觉词频率向量描述图像并计算相似度
机器人导航、图像数据库检索等 1. 加载图像并计算 SURF 特征
2. 进行 k - means 聚类得到视觉词汇表
3. 为特征分配视觉词索引
4. 统计视觉词频率并移除停用词
5. 计算图像之间的相似度并查找匹配图像
图像序列处理 - 使用 Harris 角点计算特征,成本较低
- 利用 Tracker 类跟踪特征运动轨迹
- 分析特征的光流和跟踪帧数分布
自动驾驶、视频监控等 1. 加载图像序列并选择感兴趣区域
2. 显示图像序列动画
3. 计算每个帧的角点特征
4. 使用 Tracker 类跟踪特征
5. 显示特征轨迹并分析跟踪帧数分布

通过这个表格,我们可以直观地看到三种技术在不同方面的差异和特点,有助于在实际应用中根据具体需求选择合适的技术。

5. 技术应用拓展

这些图像相关技术在实际应用中有着广泛的拓展空间。

在机器人领域 :图像匹配与检索技术可以帮助机器人更好地识别环境和物体。例如,在室内导航中,机器人可以通过拍摄周围环境的图像,与预先存储的地图图像进行匹配,从而确定自己的位置。图像序列处理技术可以用于机器人对动态环境的感知,通过分析图像序列中特征的运动,机器人可以判断周围物体的运动状态,从而做出相应的决策。

在摄影测量领域 :图像拼接技术可以用于创建高精度的正射影像地图。通过将多个拍摄的图像进行拼接和处理,可以得到覆盖大面积区域的正射影像,为地理信息系统(GIS)提供准确的数据。同时,图像匹配技术可以帮助在不同时间拍摄的图像中找到对应点,用于监测地形变化等。

在视频处理领域 :图像序列处理技术可以用于视频的稳定化和目标跟踪。通过跟踪视频中特征点的运动,可以对视频进行校正,减少抖动,提高视频的质量。同时,准确的目标跟踪可以用于视频编辑、安防监控等方面。

6. 技术挑战与解决方案

虽然这些图像技术有着广泛的应用前景,但也面临着一些挑战。

视角和光照变化问题 :在图像匹配和拼接过程中,视角和光照的变化会导致图像之间的相似度降低,影响匹配和拼接的效果。解决方案可以是采用更鲁棒的特征提取算法,如 SURF 特征在一定程度上对光照和旋转具有不变性。同时,在图像预处理阶段,可以进行光照归一化等操作,减少光照变化的影响。

计算资源消耗问题 :特别是在处理大规模图像序列或进行复杂的聚类操作时,计算资源的消耗会成为一个瓶颈。可以采用并行计算的方法,利用多核处理器或 GPU 加速计算过程。另外,优化算法的复杂度,减少不必要的计算步骤,也是提高效率的有效途径。

特征跟踪的稳定性问题 :在图像序列处理中,特征跟踪可能会因为目标的遮挡、快速运动等原因而丢失。可以采用多特征融合的方法,结合不同类型的特征进行跟踪,提高跟踪的稳定性。同时,引入预测模型,对特征的运动进行预测,在特征暂时丢失时可以根据预测结果进行恢复。

7. 未来发展趋势

随着计算机技术和人工智能的不断发展,这些图像技术也将呈现出一些新的发展趋势。

深度学习的融合 :深度学习在图像领域已经取得了显著的成果,将深度学习模型与现有的图像技术相结合,可以进一步提高图像匹配、拼接和序列处理的性能。例如,使用卷积神经网络(CNN)进行特征提取,能够学习到更高级的图像特征,提高匹配的准确性。

实时处理能力的提升 :在实际应用中,如自动驾驶、实时监控等场景,对图像技术的实时处理能力提出了更高的要求。未来的研究将致力于优化算法和硬件架构,实现更高效的实时处理。

多模态数据融合 :除了图像数据,还可以结合其他模态的数据,如激光雷达数据、深度数据等,进行更全面的场景感知和分析。多模态数据的融合将为图像技术带来更广阔的应用前景。

相关流程图

graph TD;
    A[图像技术应用场景] --> B[机器人领域]
    A --> C[摄影测量领域]
    A --> D[视频处理领域]
    B --> B1[环境识别与导航]
    B --> B2[物体识别与跟踪]
    C --> C1[正射影像地图创建]
    C --> C2[地形变化监测]
    D --> D1[视频稳定化]
    D --> D2[目标跟踪与编辑]

表格:技术挑战与解决方案对比

挑战问题 解决方案
视角和光照变化 - 采用鲁棒的特征提取算法(如 SURF)
- 进行光照归一化预处理
计算资源消耗 - 并行计算(多核处理器或 GPU)
- 优化算法复杂度
特征跟踪稳定性 - 多特征融合跟踪
- 引入预测模型

列表:未来发展趋势要点

  1. 深度学习与现有图像技术融合。
  2. 提升实时处理能力。
  3. 实现多模态数据融合。

综上所述,图像拼接、匹配检索和序列处理技术在多个领域有着重要的应用价值,虽然面临一些挑战,但随着技术的不断发展,它们将不断完善和拓展,为我们带来更多的便利和创新应用。

根据原作 https://pan.quark.cn/s/0ed355622f0f 的源码改编 野火IM解决方案 野火IM是专业级即时通讯和实时音视频整体解决方案,由北京野火无限网络科技有限公司维护和支持。 主要特性有:私有部署安全可靠,性能强大,功能齐全,全平台支持,开源率高,部署运维简单,二次开发友好,方便第三方系统对接或者嵌入现有系统中。 详细情况请参考在线文档。 主要包括一下项目: 野火IM Vue Electron Demo,演示如何将野火IM的能力集成到Vue Electron项目。 前置说明 本项目所使用的是需要付费的,价格请参考费用详情 支持试用,具体请看试用说明 本项目默认只能连接到官方服务,购买或申请试用之后,替换,即可连到自行部署的服务 分支说明 :基于开发,是未来的开发重心 :基于开发,进入维护模式,不再开发新功能,鉴于已经终止支持且不再维护,建议客户升级到版本 环境依赖 mac系统 最新版本的Xcode nodejs v18.19.0 npm v10.2.3 python 2.7.x git npm install -g node-gyp@8.3.0 windows系统 nodejs v18.19.0 python 2.7.x git npm 6.14.15 npm install --global --vs2019 --production windows-build-tools 本步安装windows开发环境的安装内容较多,如果网络情况不好可能需要等较长时间,选择早上网络较好时安装是个好的选择 或参考手动安装 windows-build-tools进行安装 npm install -g node-gyp@8.3.0 linux系统 nodej...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值