OpenCV相機標定與3D重建(36)計算兩幅圖像之間基本矩陣(Fundamental Matrix)的函數findFundamentalMat()的使用

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

算法描述

從兩幅圖像中的對應點計算基本矩陣。
cv::findFundamentalMat 是 OpenCV 中用于計算兩幅圖像之間基本矩陣(Fundamental Matrix)的函數。基本矩陣描述了兩個未校準攝像機之間的幾何關系,它在計算機視覺中用于立體視覺、運動結構恢復(Structure from Motion, SfM)、視覺里程計等任務。

函數原型


Mat cv::findFundamentalMat
(InputArray 	points1,InputArray 	points2,int 	method,double 	ransacReprojThreshold,double 	confidence,int 	maxIters,OutputArray 	mask = noArray() 
)		

參數

  • 參數points1:來自第一幅圖像的 N 個點數組。點的坐標應該是浮點數(單精度或雙精度)。
  • 參數points2:第二幅圖像的點數組,與 points1 具有相同的大小和格式。
  • 參數method:計算基本矩陣的方法。
    • FM_7POINT:用于7點算法。N=7
    • FM_8POINT:用于8點算法。N≥8
    • FM_RANSAC:用于RANSAC算法。N≥8
    • FM_LMEDS:用于最小中值法(LMedS)算法。N≥8
  • 參數ransacReprojThreshold:僅用于 RANSAC 的參數。它是點到極線的最大距離(以像素為單位),超過該距離的點被認為是離群點,并不用于計算最終的基本矩陣。根據點定位的準確性、圖像分辨率和圖像噪聲,它可以設置為1-3等。
  • 參數confidence:僅用于 RANSAC 和 LMedS 方法的參數。它指定了估計矩陣正確的期望置信水平(概率)。
  • 參數[out] mask:可選輸出掩碼。
  • 參數maxIters:穩健方法的最大迭代次數。

說明

極幾何由以下方程描述:

[ p 2 ; 1 ] T F [ p 1 ; 1 ] = 0 [p_2; 1]^T F [p_1; 1] = 0 [p2?;1]TF[p1?;1]=0

其中 F 是基本矩陣,p1和p2分別是第一幅和第二幅圖像中的對應點。

該函數使用上述列出的四種方法之一來計算基本矩陣,并返回找到的基本矩陣。通常只找到一個矩陣。但在7點算法的情況下,該函數可能返回多達3個解(一個 9×3 矩陣,按順序存儲所有3個矩陣)。

// Example. Estimation of fundamental matrix using the RANSAC algorithm
int point_count = 100;
vector<Point2f> points1(point_count);
vector<Point2f> points2(point_count);
// initialize the points here ...
for( int i = 0; i < point_count; i++ )
{points1[i] = ...;points2[i] = ...;
}
Mat fundamental_matrix =findFundamentalMat(points1, points2, FM_RANSAC, 3, 0.99);

代碼示例


#include <iostream>
#include <opencv2/opencv.hpp>using namespace cv;
using namespace std;int main( int argc, char** argv )
{// 創建虛擬的匹配點數據(假設我們有8對匹配點)vector< Point2f > points1 = { Point2f( 154.0f, 38.0f ),  Point2f( 285.0f, 176.0f ), Point2f( 279.0f, 238.0f ), Point2f( 276.0f, 284.0f ),Point2f( 273.0f, 342.0f ), Point2f( 267.0f, 397.0f ), Point2f( 262.0f, 446.0f ), Point2f( 254.0f, 495.0f ) };vector< Point2f > points2 = { Point2f( 149.0f, 49.0f ),  Point2f( 280.0f, 187.0f ), Point2f( 274.0f, 249.0f ), Point2f( 271.0f, 295.0f ),Point2f( 268.0f, 353.0f ), Point2f( 262.0f, 408.0f ), Point2f( 257.0f, 457.0f ), Point2f( 249.0f, 506.0f ) };// 定義輸出的基本矩陣和掩碼Mat fundamentalMatrix, mask;// 使用 RANSAC 方法計算基本矩陣fundamentalMatrix = findFundamentalMat( points1, points2,FM_RANSAC,  // 使用RANSAC方法1.0,        // 點到極線的最大重投影誤差0.99,       // 置信水平2000,       // 最大迭代次數mask );     // 輸出掩碼// 打印結果cout << "Fundamental Matrix:\n" << fundamentalMatrix << endl;// 打印哪些點被認為是內點cout << "Inliers mask:\n";for ( size_t i = 0; i < mask.total(); ++i ){if ( mask.at< uchar >( i ) ){cout << "Point " << i + 1 << " is an inlier." << endl;}else{cout << "Point " << i + 1 << " is an outlier." << endl;}}return 0;
}

運行結果

Fundamental Matrix:
[-3.247212965698772e-20, -0.0008949509319799827, 0.704568065615863;0.0008949509319799836, 3.892534466973619e-19, 0.229349120734492;-0.7144125258676433, -0.2338238753943923, 1]
Inliers mask:
Point 1 is an inlier.
Point 2 is an inlier.
Point 3 is an inlier.
Point 4 is an inlier.
Point 5 is an inlier.
Point 6 is an inlier.
Point 7 is an inlier.
Point 8 is an inlier.

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

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

相關文章

Vscode + gdbserver遠程調試開發板指南:

本章目錄 步驟環境準備網絡配置vscode配置步驟 (全圖示例)開發板配置開始調試注意: 每次斷開之后&#xff0c;開發板都需要重新啟動gdbserver才可調試。 參考鏈接: 步驟 環境準備 將交叉編譯鏈路徑加入$PATH變量&#xff1a;確保系統能夠找到所需的工具。 export PATH$PATH:/p…

對外發PDF設置打開次數

在線 Host PDF 文件并對鏈接進行限制——保障文件安全的最佳解決方案 在數字化辦公和遠程協作日益普及的今天&#xff0c;如何安全高效地分享 PDF 文件成為許多用戶關注的重點。MaiPDF 作為一款功能強大的在線工具&#xff0c;不僅支持在線 host PDF 文件&#xff0c;還提供多…

VS2022 中的 /MT /MTd /MD /MDd 選項

我們有時編譯時,需要配置這個 運行庫,指定C/C++運行時庫的鏈接方式。 如下圖 那么這些選項的含義是什么? /MT:靜態鏈接多線程庫 /MT選項代表“Multi-threaded Static”,即多線程靜態庫。選擇此選項時,編譯器會從運行時庫中選擇多線程靜態連接庫來解釋程序中的代碼,…

MacOS下TestHubo安裝配置指南

TestHubo是一款開源免費的測試管理工具&#xff0c; 下面介紹MacOS私有部署的安裝與配置。TestHubo 私有部署版本更適合有嚴格數據安全要求的企業&#xff0c;支持在本地或專屬服務器上運行&#xff0c;以實現對數據和系統的完全控制。 1、Mac 服務端安裝 Mac安裝包下載地址&a…

Windows 11 配置gym、mujoco、mujoco-py環境教程

Windows 11 配置gym、mujoco、mujoco-py環境教程 整理了windows11系統安裝mujoco、mujoco_py、gym的教程以及報錯解決方法。 環境版本 mujoco-py-2.1.2.14 mujoco210 gym==0.23.1 python 3.9.16 pytorch 1.12.1+cu113 mujoco安裝 1. 在Github中下載mujoco210壓縮包 G…

Java重要面試名詞整理(五):Redis

文章目錄 Redis高級命令Redis持久化RDB快照&#xff08;snapshot&#xff09;**AOF&#xff08;append-only file&#xff09;****Redis 4.0 混合持久化** 管道&#xff08;Pipeline&#xff09;**StringRedisTemplate與RedisTemplate詳解**Redis集群方案gossip腦裂 Redis LuaR…

Amazon Bedrock 實踐 - 利用 Llama 3.2 模型分析全球糖尿病趨勢

黃浩文 資深開發者布道師 亞馬遜云科技 擁有電信、互聯網以及云計算等行業超過 20 年的豐富經驗&#xff0c;曾任職于微軟、Sun 和中國電信。他目前專注于生成式 AI、大型語言模型 (LLM)、機器學習和數據科學等領域的技術內容創作和實踐分享&#xff0c;致力于賦能全球開發者。…

期權懂|如何計算期權賣方平倉后的盈利?

錦鯉三三每日分享期權知識&#xff0c;幫助期權新手及時有效地掌握即市趨勢與新資訊&#xff01; 如何計算期權賣方平倉后的盈利&#xff1f; 期權賣方平倉后的盈利計算涉及多個因素&#xff0c;包括期權的交易價格、平倉價格以及權利金的變動等。 交易價格&#xff1a;期權賣…

【連續學習之VCL算法】2017年論文:Variational continual learning

1 介紹 年份&#xff1a;2017 期刊&#xff1a; arXiv preprint Nguyen C V, Li Y, Bui T D, et al. Variational continual learning[J]. arXiv preprint arXiv:1710.10628, 2017. 本文提出的算法是變分連續學習&#xff08;Variational Continual Learning, VCL&#xf…

多視圖 (Multi-view) 與多模態 (Multi-modal)

多視圖 (Multi-view) 與多模態 (Multi-modal) 是兩種不同的數據處理方式&#xff0c;它們在機器學習和數據分析中有著重要的應用。盡管這兩者有一些相似之處&#xff0c;但它們關注的角度和處理方法有所不同。 多視圖 (Multi-view) 定義&#xff1a;多視圖指的是同一數據對象…

MySQL 性能瓶頸,為什么 MySQL 表的數據量不能太大?

MySQL的性能瓶頸(為什么MySQL有幾萬的qps,怎么來的?性能分析 為什么 MySQL 表不能太大網上大部分人的說法:問題的關鍵: B樹層數對查詢性能的影響到底有多大? 是什么導致的 MySQL 查詢緩慢?如何解決: MySQL的性能瓶頸(為什么MySQL有幾萬的qps,怎么來的? 一個全表掃描的查詢…

Linux 實用命令 grep、wc

grep 命令詳解 grep [選項] ‘模式’ 文件名 grep [參數] [選項] [操作對象]grep ‘error’ -c 5 --color info.log [模式]&#xff1a;是要搜索的字符串或正則表達式。 [選項]&#xff1a;是可選的&#xff0c;用于定制grep的行為。 [操作對象]&#xff1a;是要搜索的文件…

【Transformer】深入淺出自注意力機制

寫在前面&#xff1a;博主本人也是剛接觸計算機視覺領域不久&#xff0c;本篇文章是為了記錄自己的學習&#xff0c;大家一起學習&#xff0c;有問題歡迎大家指出。&#xff08;博主本人的習慣是看文章看到不懂的有立馬去看不懂的那塊&#xff0c;所以博文可能內容比較雜&#…

HarmonyOS NEXT 實戰之元服務:靜態案例效果---教育培訓服務

背景&#xff1a; 前幾篇學習了元服務&#xff0c;后面幾期就讓我們開發簡單的元服務吧&#xff0c;里面豐富的內容大家自己加&#xff0c;本期案例 僅供參考 先上本期效果圖 &#xff0c;里面圖片自行替換 效果圖1完整代碼案例如下&#xff1a; import { authentication } …

3.阿里云flinkselectdb-py作業

1.概述 Python API中文文檔 本文介紹在阿里云實時計算flink中使用python作業&#xff0c;把oss中的數據同步數據到阿里云selectdb的過程。python簡單的語法特性更適合flink作業的開發&#xff1b; 先說結論: 在實際開發中遇到了很多問題&#xff0c;導致python作業基本基本無法…

互聯網視頻云平臺EasyDSS無人機推流直播技術如何助力野生動植物保護工作?

在當今社會&#xff0c;隨著科技的飛速發展&#xff0c;無人機技術已經廣泛應用于各個領域&#xff0c;為我們的生活帶來了諸多便利。而在動植物保護工作中&#xff0c;無人機的應用更是為這一領域注入了新的活力。EasyDSS&#xff0c;作為一款集視頻處理、分發、存儲于一體的綜…

51c視覺~YOLO~合集8

我自己的原文哦~ https://blog.51cto.com/whaosoft/12897680 1、Yolo9 1.1、YOLOv9SAM實現動態目標檢測和分割 主要介紹基于YOLOv9SAM實現動態目標檢測和分割 背景介紹 在本文中&#xff0c;我們使用YOLOv9SAM在RF100 Construction-Safety-2 數據集上實現自定義對象檢測模…

Docker Container 可觀測性最佳實踐

Docker Container 介紹 Docker Container&#xff08; Docker 容器&#xff09;是一種輕量級、可移植的、自給自足的軟件運行環境&#xff0c;它在 Docker 引擎的宿主機上運行。容器在許多方面類似于虛擬機&#xff0c;但它們更輕量&#xff0c;因為它們不需要模擬整個操作系統…

氣相色譜-質譜聯用分析方法中的常用部件,分流平板更換

分流平板&#xff0c;是氣相色譜-質譜聯用分析方法中的一個常用部件&#xff0c;它可以實現氣相色譜柱流與MS檢測器流的分離和分流。常見的氣質聯用儀分流平板有很多種&#xff0c;如單層T型分流平板、雙層T型分流平板、螺旋分流平板等等。 操作視頻http://www.spcctech.com/v…

易基因: BS+ChIP-seq揭示DNA甲基化調控非編碼RNA(VIM-AS1)抑制腫瘤侵襲性|Exp Mol Med

大家好&#xff0c;這里是專注表觀組學十余年&#xff0c;領跑多組學科研服務的易基因。 肝細胞癌&#xff08;hepatocellular carcinoma&#xff0c;HCC&#xff09;早期復發仍然是一個具有挑戰性的領域&#xff0c;其中涉及的機制尚未完全被理解。盡管微血管侵犯&#xff08…