LightGlue-OpenCV 实现实时相机图片特征点匹配

2024-01-07 17:14:34

LightGlue-OpenCV

LightGlue 是一种新的基于深度神经网络,用来匹配图像中的局部特征的深度匹配器。是 SuperGlue 的加强版本。相比于 SuperGlue,LightGlue 在内存和计算方面更高效,同时结果更准确,也更容易训练。
原项目地址如下:
https://github.com/cvg/LightGlue

近期由于实习项目需要,需要在相机上进行实时的特征点追踪。然后配置了LightGlue 原项目。但是发现 LightGlue 计算推倒出图像上左右匹配的特征点后,在代码进行到的可视化环节时,会花费大量的时间,无法满足实习项目中实时性的要求。因此在 viz2d.py 里对原项目可视化部分的代码进行修改,并添加了摄像头捕获图像后,根据捕获的第一帧图像的特征点进行特征匹配的 demo 文件 demo_camera.py,便于下载者可以直接使用。
且本项目保留了原有项目代码里的可视化部分 viz2d_bak.py,添加了一些注释便于后续读者阅读理解。因为原项目里面并没有相关的 demo,因此本项目按照原本项目里面可视化的部分也编写了相关的 demo 文件 demo_bak.py、demo2image.py 可供学习参考。

本项目地址:
https://github.com/sugarknight999/LightGlue-OpenCV.git

Step 1: 创建虚拟环境

	conda create -n lightglue python=3.10
	conda activate lightglue

Step 2: 安装 LightGlue-OpenCV 并运行

	git clone https:https://github.com/sugarknight999/LightGlue-OpenCV.git
	cd LightGlue-OpenCV
	python -m pip install -e .

Step3: 运行 demo_camera.py

在终端进入虚拟环境

	python demo_camera.py

即可运行相机并实时获得图像和匹配的特征点

效果

结果如图所示

lightglue

原理

主要是因为 matplotlib 这个库擅长画图,但是因为画图效果比较好,因此在调用里面画图部分以及保存图片部分的时候非常花费时间。
因此改动了 viz2d.py 里面的

	def plot_images(imgs, cmaps="gray", dpi=100, adaptive=True):
	def plot_keypoints(plot_img, kpts, colors=(0, 255, 0), radius=5, thickness=-1, alpha = 1):
	def plot_matches(plot_img, kpts0, kpts1, color=None, lw=2, ps=4, a=1.0, labels=None):

三个函数。
按照本来函数里面的逻辑,用 OpenCV 库重新实现了相关的功能。具体代码解释可以参考 LightGlue-OpenCV 里面的注释

文章来源:https://blog.csdn.net/weixin_52303102/article/details/135355570
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。