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
conda create -n lightglue python=3.10
conda activate lightglue
git clone https:https://github.com/sugarknight999/LightGlue-OpenCV.git
cd LightGlue-OpenCV
python -m pip install -e .
在终端进入虚拟环境
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 里面的注释