OpenCV圖像注冊模塊

  • 操作系統:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 編程語言:C++11

算法描述

注冊模塊實現了參數化圖像配準。所實現的方法是直接對齊(direct alignment),即,它直接使用像素值來計算一對圖像之間的配準,與基于特征的配準方法相對。該實現基本上遵循了[254]中對應的部分。

基于特征的方法在嘗試配準在不同光照條件或曝光時間下拍攝的圖像,或當圖像僅部分重疊時,相比基于像素的方法具有一些優勢。另一方面,與基于特征的方法相比,基于像素的方法的主要優勢在于,對于某些圖像(在相似光照條件下拍攝且具有顯著重疊的圖像),其精度更高,這是因為我們使用了圖像中所有可用的信息,從而能夠實現亞像素精度。這對于某些應用(如多幀去噪或多幀超分辨率)尤其重要。

事實上,基于像素和基于特征的配準方法可以相互補充:一個應用程序可以首先使用特征獲得粗略的配準,然后在圖像的重疊區域上使用基于像素的方法來細化配準。所開發的代碼允許這種使用場景。

該模塊實現了從抽象類 cv::reg::Map 或 cv::reg::Mapper 派生的類。前者對兩個參考幀之間的坐標變換進行建模,而后者封裝了一種調用方法的方式,該方法計算兩個圖像之間的映射(Map)。盡管目標是實現基于像素的方法,但該模塊可以擴展以支持其他能夠計算圖像間變換的方法(基于特征的方法、光流等)。

每個從 Map 派生的類實現了一種運動模型,如下所示:

MapShift:對簡單的平移進行建模。
MapAffine:對仿射變換進行建模。
MapProjec:對投影變換進行建模。

MapProject 也可以用于對仿射運動或平移進行建模,但它的一些操作成本更高,這就是定義另外兩個類的原因。

從 Mapper 派生的類有:

MapperGradShift:基于梯度的對齊,用于計算平移。它產生一個 MapShift(兩個參數,對應于平移向量)。
MapperGradEuclid:基于梯度的對齊,用于歐幾里得運動,即旋轉和平移。它計算三個參數(角度和平移向量),盡管結果為了方便存儲在 MapAffine 對象中。
MapperGradSimilar:基于梯度的對齊,用于計算相似性變換,即在歐幾里得運動的基礎上增加了縮放。它計算四個參數(兩個用于反對稱矩陣,兩個用于平移向量),盡管結果為了更好的方便性存儲在 MapAffine 對象中。
MapperGradAffine:基于梯度的對齊,用于仿射運動模型。參數數量為六個,結果存儲在 MapAffine 對象中。
MapperGradProj:基于梯度的對齊,用于計算投影變換。參數數量為八個,結果存儲在 MapProject 對象中。
MapperPyramid:它使用高斯金字塔實現分層運動估計。它的構造函數接受任何實現 Mapper 接口的其他對象作為參數,并且正是該 mapper 被 MapperPyramid 在金字塔的每個尺度上調用。

如果圖像之間的運動不是非常小,使用這些類的正常方式是創建一個 MapperGrad* 對象并將其用作創建 MapperPyramid 的輸入,然后調用 MapperPyramid 來執行計算。然而,如果圖像之間的運動足夠小,我們可以直接使用 MapperGrad* 類。另一種可能性是先使用基于特征的方法進行粗略配準,然后通過 MapperPyramid 或直接使用 MapperGrad* 對象進行細化。mappers 的 “calculate” 方法接受運動的初始估計作為輸入。

在決定使用哪個 MapperGrad 時,我們必須考慮到,參數更多的 mappers 可以處理更復雜的運動,但涉及更多的計算,因此速度更慢。此外,如果我們對序列遵循的運動模型有信心,增加超出我們需要的參數數量會降低精度:最好使用我們能用的最少自由度數量。

在模塊測試中有示例,展示了如何使用任何已實現的 mappers 來配準一對圖像。

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

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

相關文章

模型驅動與分布式建模:技術深度與實戰落地指南

摘要 在AI、云原生與全球化協作的大潮中,模型驅動架構(MDA)與分布式建模不再是概念,而是支撐復雜系統設計與持續演化的核心引擎。本文從元模型、模型轉換引擎,到協同協議、沖突解決算法,再到AI輔助建模與自…

計算機基礎速通--數據結構·圖的基礎應用二(基礎圖算法)

如有問題大概率是我的理解比較片面,歡迎評論區或者私信指正。 最近了解到了一個新的改變和提高自己的方法時刻記錄不論多小的事情都記下,我目前用了4天,之前感覺一天天忙死但沒啥收獲,但是記錄了之后知道自己的時間花在了哪里&…

設計模式-策略模式 Java

模式概述 策略模式是一種行為型設計模式,它通過定義一系列可互換的算法,并將每個算法封裝成獨立類,使客戶端能夠根據需要動態切換算法 簡單代碼示例 // 1. 抽象策略接口 interface PaymentStrategy {void pay(int amount); }// 2. 具體策略實…

【機器學習深度學習】客觀評估訓練程度

目錄 前言 一、什么是客觀評估? 二、客觀評估的兩大核心方法 1. 判別式評測(Discriminative Evaluation) 2. 生成式評測(Generative Evaluation) 三、為什么客觀評估成本更高? 1.訓練目標收緊 2.訓…

Linux軟件編程:線程間通信

目錄 一、線程間通信基礎 1. 概念 2. 通信基礎:共享空間 二、互斥鎖(Mutex) 1. 概念 2. 使用流程 3. 函數接口 三、死鎖 1. 概念 2. 死鎖產生的 4 個必要條件 3. 避免死鎖的方法 四、信號量(Semaphore) 1…

【學習筆記】JVM GC回收機制

1.三種基本的垃圾回收算法 1>標記-清除法 ①先將從樹根開始,可以到達的對象標記為可達(JVM中的對象們存儲為一顆樹) ②將沒有標記的對象清除掉 缺點:會產生大量內存碎片 2>復制算法(新生代) ①先將a區…

軟件的終極:為70億人編寫70億個不同的軟件

這是個腦洞大開的想法。昨天晚上,我在用Claude code幫我寫一個小工具,用來管理我本地那些亂七八糟的文檔。寫著寫著,突然意識到一個問題:這個工具完全是按照我的工作習慣定制的——我喜歡用Markdown,習慣把TODO放在文件…

LakeHouse--湖倉一體架構

大家可能發現了,近些年湖倉一體數據架構被提及的頻率越來越高。各家大廠也有湖倉一體架構的實踐,也有很多公開分享。 那什么是湖倉一體?為什么出現了湖倉一體架構,換言之,它解決了以前數據倉庫、數據湖+數倉兩層架構所不能解決的什么問題? 本文會從數倉、數據湖依次介紹…

基于FPGA的實時圖像處理系統(1)——SDRAM回環測試

SDRAM回環設計 文章目錄SDRAM回環設計一、SDRAM簡介1、引腳2、內部結構框圖3、操作指令二、系統設計三、實現流程1、SDRAM接口2、FIFO設置3、內部SDRAM的控制模塊4、其他四、實現效果五、總結六、代碼1、top2、sdram_top3、sdram_ctrl一、SDRAM簡介 SDRAM英文全稱“Synchronou…

一鍵檢測接口是否存活:用 Python/Shell 寫個輕量級監控腳本

網羅開發(小紅書、快手、視頻號同名)大家好,我是 展菲,目前在上市企業從事人工智能項目研發管理工作,平時熱衷于分享各種編程領域的軟硬技能知識以及前沿技術,包括iOS、前端、Harmony OS、Java、Python等方…

優秀工具包-Hutool工具詳解

優秀工具包-Hutool工具詳解 課程概述 Hutool簡介 定位: 小而全的Java工具庫,簡化開發流程。對文件、流、加密解密、轉碼、正則、線程、XML等JDK方法進行封裝。 核心優勢:零依賴、高性能、中文網頁完善。 應用場景:Web開發、數…

《深度解構:構建瀏覽器端Redis控制臺的WebSocket協議核心技術》

Redis作為高性能的內存數據庫,其原生客戶端多依賴命令行或桌面應用,而瀏覽器端控制臺的缺失,成為制約Web化管理的關鍵瓶頸,WebSocket協議的出現,打破了HTTP協議單向通信的局限,為瀏覽器與Redis服務之間建立持久、雙向的實時連接提供了可能。本文將從協議本質、交互邏輯、…

Pushgateway安裝和部署,以及對應Prometheus調整

目錄Pushgateway簡介安裝驗證Prometheus的配置:其它命令Pushgateway簡介 Pushgateway 是 Prometheus 生態系統中的一個組件。主要特點是推送而非拉取:Prometheus 默認采用拉取(pull)模式收集指標,但 Pushgateway 允許…

JAVA面試匯總(四)JVM(一)

久違的重新寫了一篇面試匯總的,關于JVM的一篇,一共三篇,今天寫了第一篇,繼續重新學習,重新卷起來,come on baby 1.什么情況下會觸發類的初始化? (1)首先是類未被初始化時…

Agent中的memory

rag系列文章目錄 文章目錄rag系列文章目錄前言一、Memory機制作用二、memory分類三、langgraph實踐總結前言 眾所周知,大模型是無狀態的。但是基于大模型的agent一般是有狀態的,也就是它有記憶功能。在AI Agent框架中,Memory機制是核心組件之…

AI與IT從業者的未來:替代焦慮還是協作革命?

??引言:技術滲透與核心命題??2025年,人工智能技術已從實驗室走向產業核心。國務院《關于深入實施“人工智能”行動的意見》推動AI在醫療、制造、金融等領域的規模化落地,全球AI應用用戶規模突破2.3億,生成式AI工具滲透率達16.…

手機版碰一碰發視頻系統批量剪輯功能開發,支持OEM貼牌

引言在當今短視頻盛行的時代,視頻內容的快速生產與分享變得愈發重要。手機版碰一碰發視頻系統,借助 NFC 等近場通信技術,實現了便捷的數據交互與視頻分享,而在此基礎上集成的批量剪輯功能,更是為內容創作者和商家帶來了…

Spring AMQP如何通過配置文件避免硬編碼實現解耦

在使用Spring AMQP基于注解聲明監聽者時,可通過抽取常量來避免硬編碼:RabbitListener(bindings QueueBinding(exchange Exchange(MQConstant.USER_EXCHANGE),value Queue(MQConstant.USER_QUEUE),key MQConstant.USER_REDIS_BINDING))public void de…

解決zabbix圖片中文亂碼

要把 Zabbix 前端字體替換為 simkai.ttf(楷體,解決亂碼常用),按以下步驟操作:1. 確認 simkai.ttf 路徑 先找到系統里 simkai.ttf 字體文件,若沒有,可從 Windows 系統(C:\Windows\Fon…

實例分割-動手學計算機視覺13

介紹 實例分割(instance segmentation)的目的是從圖像中分割出每個目標實例的掩模(mask)。與語義分割相比,實例分割不但要區分不同的類別,還要區分出同一種類別下的不同目標實例。如圖13-1所示 語義分割的結果中,不同的羊對應的標簽是一樣的…