圖像特征檢測算法SuperPoint和SuperGlue

SuperPoint

  • 背景與概述 :SuperPoint 是一個自監督的全卷積神經網絡,用于提取圖像中的興趣點及其描述子。它在 2018 年由 Magic Leap 提出,通過在合成數據集上預訓練一個基礎檢測器 MagicPoint,然后利用同胚適應技術對真實圖像數據集進行標記,從而得到一個增強的檢測器 SuperPoint,使其在真實世界圖像上具有可靠性。

  • 網絡結構 :其架構基于編碼器 - 解碼器結構。編碼器是一個類似 VGG 的卷積神經網絡,用于提取圖像特征;解碼器則分為兩個分支,一個分支用于預測特征點的位置,另一個分支用于生成特征點的描述子。

  • 工作原理 :輸入一張圖像后,編碼器對圖像進行特征提取,得到特征圖。然后,一個解碼器分支通過對特征圖的處理,使用 softmax 和非極大值抑制等操作,得到圖像中特征點的位置。另一個解碼器分支則對特征圖進行插值等操作,生成每個特征點的描述子。

  • 優勢 :能夠在一張圖像中找到具有高區分度的特征點,并為每個特征點生成具有強描述能力的向量描述子。SuperPoint 提取的特征點數量遠大于傳統方法如 SIFT 等,且具有較好的穩定性和可重復性,在不同的光照條件、視角變化和圖像尺度下都能保持較好的性能。

  • 應用場景 :常用于圖像匹配、三維重建、視覺定位、SLAM 等任務中,如在 SLAM 中,可作為前端的特征點提取模塊,為后端的位姿估計和地圖構建提供可靠的特征點信息。

SuperGlue

  • 背景與概述 :SuperGlue 是由 Magic Leap 和蘇黎世聯邦理工學院(ETH)合作開發的一種用于圖像特征匹配的神經網絡。它于 2020 年提出,在 CVPR2020 圖像匹配挑戰賽中排名第一,與 SuperPoint 配合使用效果極佳。

  • 網絡結構 :主要由注意力圖神經網絡和最優匹配層組成。注意力圖神經網絡包括關鍵點編碼和注意力聚合網絡,關鍵點編碼將關鍵點位置和描述子編碼為一個向量,再通過多層感知機將低維向量映射為高維向量;注意力聚合網絡則使用自注意力層和交叉注意力層交替更新特征點的表示。

  • 工作原理 :輸入兩組圖像的特征點坐標和描述子,如圖像 A 的特征點坐標 p_A、描述子 d_A 以及圖像 B 的特征點坐標 p_B、描述子 d_B。首先對輸入的特征點和描述子進行編碼,得到初始的特征表示。然后通過自注意力機制和交叉注意力機制交替作用,聚合圖像內和圖像間的特征信息,更新特征點的表示。接著將匹配問題建模為一個可微的最優傳輸問題,使用Sinkhorn-Knopp 算法求解,得到特征點之間的匹配關系和匹配分數。

  • 優勢 :能夠充分利用圖像內的特征關系以及兩幅圖像間的特征關系,對特征點進行更準確的匹配。它可以自動學習特征點之間的匹配模式,適應不同的場景和圖像變化,具有很強的泛化能力,并且能夠有效地處理特征點的可見性和遮擋問題。

  • 應用場景 :除了在圖像匹配任務中表現出色外,還廣泛應用于三維重建、視覺定位、目標識別等領域。例如在多視角三維重建中,通過匹配不同視角圖像中的特征點,為三維點云的生成和模型的構建提供準確的對應關系。

superpoint_superglue_deployment

superpoint_superglue_deployment 是一個用于簡化 SuperPoint 和 SuperGlue 模型部署的庫。

安裝

可以直接通過 pip 進行安裝:

pip install superpoint_superglue_deployment

使用

  • 導入庫 :先導入 opencv-python、numpy 等依賴庫以及 superpoint_superglue_deployment 庫中的 Matcher 模塊。
  • 準備圖像 :讀取待匹配的兩張圖像,分別以彩色和灰度模式讀取。
  • 初始化匹配器 :創建 Matcher 對象,并傳入配置字典,其中可對 SuperPoint 和 SuperGlue 的相關參數以及是否使用 GPU 進行設置。
  • 進行匹配 :調用匹配器的 match() 方法,傳入灰度圖像數據,獲取查詢圖和參考圖的特征點、關鍵點描述符以及匹配結果。
  • 計算單應性矩陣 :利用 OpenCV 的 findHomography 函數,根據匹配結果計算單應性矩陣,以確定圖像之間的變換關系。
  • 繪制匹配結果 :使用 OpenCV 的 drawMatches 函數將匹配結果可視化,并保存繪制后的圖像。

示例代碼

import cv2
import numpy as np
from loguru import logger
from superpoint_superglue_deployment import Matcherdef main():# 讀取圖像query_image = cv2.imread("./data/images/one_pillar_pagoda_1.jpg")ref_image = cv2.imread("./data/images/one_pillar_pagoda_2.jpg")query_gray = cv2.imread("./data/images/one_pillar_pagoda_1.jpg", 0)ref_gray = cv2.imread("./data/images/one_pillar_pagoda_2.jpg", 0)# 初始化匹配器superglue_matcher = Matcher({"superpoint": {"input_shape": (-1, -1),"keypoint_threshold": 0.003,},"superglue": {"match_threshold": 0.5,},"use_gpu": True,})# 進行匹配query_kpts, ref_kpts, _, _, matches = superglue_matcher.match(query_gray, ref_gray)# 計算單應性矩陣M, mask = cv2.findHomography(np.float64([query_kpts[m.queryIdx].pt for m in matches]).reshape(-1, 1, 2),np.float64([ref_kpts[m.trainIdx].pt for m in matches]).reshape(-1, 1, 2),method=cv2.USAC_MAGSAC,ransacReprojThreshold=5.0,maxIters=10000,confidence=0.95,)logger.info(f"number of inliers: {mask.sum()}")matches = np.array(matches)[np.all(mask > 0, axis=1)]matches = sorted(matches, key=lambda match: match.distance)# 繪制匹配結果matched_image = cv2.drawMatches(query_image,query_kpts,ref_image,ref_kpts,matches[:50],None,flags=2,)cv2.imwrite("matched_image.jpg", matched_image)if __name__ == "__main__":main()

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/84148.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/84148.shtml
英文地址,請注明出處:http://en.pswp.cn/web/84148.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

nginx 和 springcloud gateway cors 跨域如何設置

在跨域資源共享(CORS)配置中,Nginx 和 API Gateway(如Spring Cloud Gateway、Kong等)是兩種常見的解決方案,它們的配置邏輯和適用場景有所不同。以下是詳細對比和配置示例: 一、核心區別 維度NginxAPI Gateway定位反向代理/Web服務器微服務流量入口配置位置基礎設施層應…

電路筆記(信號):一階低通RC濾波器 一階線性微分方程推導 拉普拉斯域表達(傳遞函數、頻率響應)分析

目錄 RC 低通濾波器電路一階線性微分方程推導拉普拉斯域表達(傳遞函數)傳遞函數 H ( s ) H(s) H(s)頻率響應(令 s j ω s j\omega sjω)幅頻特性:相位特性:Bode 圖(線性系統頻率響應&#x…

【Git】刪除遠程分支時,本地分支還能看到

當遠程倉庫的分支被刪除后,本地通過 git branch -a 或 git remote show origin 仍能看到這些分支的引用,是因為本地存儲的遠程跟蹤分支(位于 refs/remotes/origin/)未被同步更新。以下是解決方法: 解決方案&#xff1…

Cubase 通過 MIDIPLUS MIDI 鍵盤進行走帶控制的設置方法

第一步,在官網下載xml配置文件。 https://midiplus.com/upload/202101/29/Xpro & Xpro_mini控制腳本(Cubase).zip 第二步,Cubase中按如圖步驟添加映射。 將MIDI鍵盤連接到電腦后打開Cubase軟件,點選菜單“工作室”->“工作室設置”&…

第十八章 Linux之Python定制篇——Python開發平臺Ununtu

1. Ubuntu介紹 Ubuntu(友幫拓、優般圖、烏班圖)是一個以桌面應用為主的開源GUN/Linux操作系統,Ubuntu基于GUN/Linux,支持x86、amd64(即x64)和ppc架構,有全球專業開發團隊(Canonical…

推薦輕量級文生視頻模型(Text-to-Video)

1. ModelScope T2V by 阿里達摩院(推薦) 模型名:damo/text-to-video-synthesis 輸入:一句文字描述(如:"a panda is dancing") 輸出:2秒視頻(16幀&#xff0c…

流編輯器sed

sed簡介 sed是一種流編輯器,處理時,把當前處理的行存儲在臨時緩沖區中,稱為模式空間,接著用sed命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。接著處理下行,這樣不斷重復&#xf…

商用密碼基礎知識介紹(上)

一、密碼的基礎知識 1、密碼分類 根據《中華人民共和國密碼法》,國家對密碼實行分類管理,分為密碼分為核心密碼、普通密碼和商用密碼。 (1)核心密碼、普通密碼 核心密碼、普通密碼用于保護國家秘密信息,核心密碼保護…

PROFINET主站S7-1500通過協議網關集成歐姆龍NJ系列TCP/IP主站

一、項目背景 某大型新能源電池生產企業,致力于提升電池生產的自動化水平和智能化程度。其生產線上,部分關鍵設備采用了不同的通信協議。在電池生產的前段工序,如原材料攪拌、涂布等環節,使用了西門子S7-1500系列PLC作為ROFINET協…

Vue3 + TypeScript + Element Plus + el-input 輸入框列表按回車聚焦到下一行

應用效果:從第一行輸入1,按回車,聚焦到第二行輸入2,按回車,聚焦到第三行…… 一、通過元素 id,聚焦到下一行的輸入框 關鍵技術點: 1、動態設置元素 id 屬性為::id"input-appl…

FramePack 全面測評:革新視頻生成體驗

在 AI 視頻生成領域,FramePack 自問世便備受矚目,它憑借獨特的技術架構,號稱能打破傳統視頻生成對高端硬件的依賴,讓普通電腦也能產出高質量視頻。此次測評,我們將全方位剖析 FramePack,探究它在實際應用中…

html中的table標簽以及相關標簽

表格標簽可以通過指定的標簽完成數據展示 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>表格標簽</title> </head> <body><table border"2"><!-- tr是表行 r…

springboot+vue3+vue-simple-uploader輕松實現大文件分片上傳Minio

最近在寫視頻課程的上傳&#xff0c;需要上傳的視頻幾百MB到幾個G不等&#xff0c;普通的上傳都限制了文件的大小&#xff0c;況且上傳的文件太大的話會超時、異常等。所以這時候需要考慮分片上傳了&#xff0c;把需要上傳的視頻分成多個小塊上傳到&#xff0c;最后再合并成一個…

AI 重構代碼實戰:如何用飛算 JavaAI 快速升級遺留系統?

在企業數字化進程中&#xff0c;遺留系統如同陳舊的基礎設施&#xff0c;雖承載著重要業務邏輯&#xff0c;但因技術落后、架構復雜&#xff0c;升級維護困難重重。飛算 JavaAI 的出現&#xff0c;為遺留系統的二次開發帶來了新的轉機&#xff0c;其基于智能分析與關聯項目的技…

鴻蒙運動開發實戰:打造專屬運動視頻播放器

##鴻蒙核心技術##運動開發##Media Kit&#xff08;媒體服務&#xff09;# 在當今數字化時代&#xff0c;運動健身已經成為許多人生活的一部分。今天我將在應用中添加視頻播放器&#xff0c;幫助用戶在運動前、運動后更好地進行熱身和拉伸。這篇文章將從代碼核心點入手&#xf…

一個包含15個界面高質量的電商APP客戶端UI解決方案

一個包含15個界面高質量的電商APP客戶端UI解決方案 您可以將其用于電商APP應用項目。包含一系列完整的界面設計元素&#xff0c;包括歡迎頁、登錄、注冊、首頁、產品分類、產品詳情、尺碼選擇、購物車、訂單、支付&#xff0c;覆蓋電商APP的大部分界面。每個部分都精心設計&…

執行 PGPT_PROFILES=ollama make run下面報錯,

執行 PGPT_PROFILESollama make run 下面報錯&#xff0c; File "/home/powersys/.cache/pypoetry/virtualenvs/private-gpt-ZIwX6JeM-py3.11/lib/python3.11/site-packages/qdrant_client/http/api_client.py", line 108, in send_inner raise ResponseHandling…

【Docker基礎】Docker核心概念:命名空間(Namespace)之User詳解

目錄 引言 1 基礎概念回顧 1.1 命名空間概述 1.2 命名空間的類型 2 User命名空間詳解 2.1 基本概念 2.2 工作原理 User命名空間的工作流程 User命名空間架構 3 應用場景 4 配置與使用 5 總結 引言 隨著容器化技術的廣泛應用&#xff0c;Docker已成為現代軟件開發、…

DIDCTF-應急響應

前言 最近在學長分享應急響應與電子取證的知識&#xff0c;又恰逢期末周沒有課&#xff0c;記錄自己在取證道路的成長。 linux-basic-command 下載附件&#xff0c;得到Apache 服務器訪問日志文件&#xff0c;根據題目要求找出排名前五的ip&#xff0c;題目提示寫腳本&#…

MybatisPlus深入學習

今天深入的學習了一下mp&#xff0c;從頭開始學習&#xff01;哈哈哈哈哈 本節只講干的&#xff01; 我們上來先看一段代碼&#xff0c;不知道你能不能看明白&#xff01; package com.itheima.mp.mapper;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapp…