MATLAB雙目標定

前言:

????????現在有許多雙目攝像頭在出廠時以及標定好,用戶拿到手后可以直接使用,但也有些雙目攝像頭在出廠時并沒有標定。因而這個時候就需要自己進行標定。本文主要介紹基于matlab工具箱的自動標定方式來對雙目相機進行標定。

1、MATLAB工具箱標定

????????首先需要準備一張棋盤,如下圖所示。對于標定不同測距范圍相機所用的棋盤方格寬度會有所不同。對于短焦雙目相機(測距范圍在20m以內),棋盤中方格的寬度達到20mm即可;對于長焦雙目相機(測距范圍在40m左右),棋盤中方格的寬度需要盡量大,否則會影響標定的精度,一般至少達到60mm。

?????????然后通過Python腳本對棋盤進行多角度拍攝,每按下一次s鍵之后自動保存一組左右鏡頭的照片。Python代碼如下:

注:盡可能拍攝多組照片,這樣可以提高標定效果,標定效果的好壞直接影響到測距的精度。對于短焦相機通常拍攝40組照片即可;長焦相機通常會需要更多組照片。

????????照片拍攝好后,進入matlab標定工具箱,如下圖所示。注意:不要選擇matlab2020b版本,筆者測試過該版本無法正常使用標定工具箱,可以使用matlab2020a版本。

注:Stero Camera Cailbrator為雙目標定工具箱,Camera Cailbrator為單目相機標定工具箱,因此這里選擇Stero Camera Cailbrator工具箱。

????????進入工具箱以后,選擇Add Images。然后選擇左右相機照片的路徑,Size of checkerboard square為棋盤中每一個方格的長度,單位為毫米,一定要準確測量方格的長度,如下圖所示。

????????點擊確定以后,Radial Distortion Compute選擇3 Coefficients和Tangential Distortion,然后點擊Calibrate進行校準。?

2、降低標定誤差?

????????左下方的直方圖為左右圖像的標定誤差,點擊誤差較大的直方圖,可以直接在左邊的圖像對中找到對應的圖像,右鍵選擇“Remove and Recalibrate”,可以重復上述步驟,直到認為誤差滿足標定需求為止。

3、導出標定數據

?????????標定好后將標定數據導入到工作空間,點擊Export Camera Parameters即可。此時我們已經拿到標定數據了,為了避免手工獲取數據時出錯,筆者寫了一個腳本可以直接獲取標定數據,并保存到表格文件中,之后直接復制粘貼即可。

rowName = cell(1,10);
rowName{1,1} = '平移矩陣';
rowName{1,2} = '旋轉矩陣';
rowName{1,3} = '相機1內參矩陣';
rowName{1,4} = '相機1徑向畸變';
rowName{1,5} = '相機1切向畸變';
rowName{1,6} = '相機2內參矩陣';
rowName{1,7} = '相機2徑向畸變';
rowName{1,8} = '相機2切向畸變';
rowName{1,9} = '相機1畸變向量';
rowName{1,10} = '相機2畸變向量';
xlswrite('out.xlsx',rowName(1,1),1,'A1');
xlswrite('out.xlsx',rowName(1,2),1,'A2');
xlswrite('out.xlsx',rowName(1,3),1,'A5');
xlswrite('out.xlsx',rowName(1,4),1,'A8');
xlswrite('out.xlsx',rowName(1,5),1,'A9');
xlswrite('out.xlsx',rowName(1,6),1,'A10');
xlswrite('out.xlsx',rowName(1,7),1,'A13');
xlswrite('out.xlsx',rowName(1,8),1,'A14');
xlswrite('out.xlsx',rowName(1,9),1,'A15');
xlswrite('out.xlsx',rowName(1,10),1,'A16');
xlswrite('out.xlsx',stereoParams.TranslationOfCamera2,1,'B1');  % 平移矩陣
xlswrite('out.xlsx',stereoParams.RotationOfCamera2.',1,'B2');  % 旋轉矩陣
xlswrite('out.xlsx',stereoParams.CameraParameters1.IntrinsicMatrix.',1,'B5');  % 相機1內參矩陣
xlswrite('out.xlsx',stereoParams.CameraParameters1.RadialDistortion,1,'B8');  % 相機1徑向畸變(1,2,5)
xlswrite('out.xlsx',stereoParams.CameraParameters1.TangentialDistortion,1,'B9');  % 相機1切向畸變(3,4)
xlswrite('out.xlsx',stereoParams.CameraParameters2.IntrinsicMatrix.',1,'B10');  % 相機2內參矩陣
xlswrite('out.xlsx',stereoParams.CameraParameters2.RadialDistortion,1,'B13');  % 相機2徑向畸變(1,2,5)
xlswrite('out.xlsx',stereoParams.CameraParameters2.TangentialDistortion,1,'B14');  % 相機2切向畸變(3,4)
xlswrite('out.xlsx',[stereoParams.CameraParameters1.RadialDistortion(1:2), stereoParams.CameraParameters1.TangentialDistortion,...stereoParams.CameraParameters1.RadialDistortion(3)],1,'B15');  % 相機1畸變向量
xlswrite('out.xlsx',[stereoParams.CameraParameters2.RadialDistortion(1:2), stereoParams.CameraParameters2.TangentialDistortion,...stereoParams.CameraParameters2.RadialDistortion(3)],1,'B16');  % 相機2畸變向量
showReprojectionErrors(stereoParams)
showExtrinsics(stereoParams)

標定數據文件保存的路徑即為當前程序的路徑,要想保存到其他路徑直接修改腳本中的路徑即可,導出的參數如下圖所示。

將表格中的數據復制到雙目相機配置文件中,其中相機1內參復制到left_camera_matrix中,相機1畸變復制到left_distortion中,相機2內參復制到right_camera_matrix中,相機2畸變復制到right_distortion中,旋轉矩陣復制到R中,轉移矩陣復制到T中,如下圖所示。

?

參考文獻:Matlab雙目相機標定?

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

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

相關文章

visual studio 常用的快捷鍵(已經熟悉的就不記錄了)

以下是 Visual Studio 中最常用的快捷鍵分類整理,涵蓋代碼編輯、調試、導航等核心場景: 一、生成與編譯 ?生成解決方案 Ctrl Shift B 一鍵編譯整個解決方案,檢查編譯錯誤(最核心的生成操作)?編譯當前文件 Ctrl F…

Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0.

今天寫項目的時候碰到一個報錯,在網上查找到了解決方法,這里備份一下。防止下次再次遇到 原文章鏈接:Sass import rules are deprecated and will be removed in Dart Sass 3.0.0. 報錯內容如下: Deprecation Warning: Sass i…

【QT】QWidget 概述與核心屬性(API)

🌈 個人主頁:Zfox_ 🔥 系列專欄:Qt 目錄 一:🔥 控件概述 🦋 控件體系的發展階段 二:🔥 QWidget 核心屬性 🦋 核心屬性概覽🦋 用件可用&#xff08…

Redis 在處理并發請求時,如何保證高效性和數據一致性

1. 單線程模型(核心命令處理) 單線程優勢:Redis 的核心命令處理是單線程的(基于內存操作,避免多線程競爭),所有命令按順序執行,天然避免了多線程的鎖競爭和上下文切換開銷。非阻塞 …

flutter-Text等組件出現雙層黃色下劃線的問題

文章目錄 1. 現象2. 原因3. 解決方法 1. 現象 這天我正在寫Flutter項目的頁面功能,突然發現我的 Text 文字出現了奇怪的樣式,具體如下: 文字下面出現了雙層黃色下劃線文字的空格變得很大,文字的間距也變得很大 我百思不得其解&a…

cursor+高德MCP:制作一份旅游攻略

高德開放平臺 | 高德地圖API (amap.com) 1.注冊成為開發者 2.進入控制臺選擇應用管理----->我的應用 3.新建應用 4.點擊添加Key 5.在高德開發平臺找到MCP的文檔 6.按照快速接入的步驟,進行操作 一定要按照最新版的cursor, 如果之前已經安裝舊的版本卸載掉重新安…

使用 IP 代理改 IP 后注意事項如何防封號

在使用一鍵換IP軟件輔助網絡營銷賬號切換時,需注意以下關鍵事項以確保賬號安全并降低封號風險。 一、IP有效性及質量驗證 確保更換的IP地址有效且質量高,低質量或失效的IP可能導致賬號存活時間縮短。優先選擇動態住宅IP(如“兔子IP代理”提…

qt designer 創建窗體選擇哪種屏幕大小

1. 新建窗體時選擇QVGA還是VGA 下面這個圖展示了區別 這里我還是選擇默認,因為沒有特殊需求,只是在PC端使用

數據可視化 —— 折線圖應用(大全)

一、導入需要的庫 # Matplotlib 是 Python 最常用的繪圖庫,pyplot 提供了類似 MATLAB 的繪圖接口 import matplotlib.pyplot as plt import numpy as np import pandas as pd 二、常用的庫函數 plt.plot(x軸,y軸):plot()是畫折線圖的函數。 plt.xlabe…

ubuntu 20.04 安裝源碼編譯 ros humble過程

公司要兼容ros1還需要ros2 這個時候不得不使用ubuntu20.04 安裝 humble 但實際上在20.04上安裝humble是需要在源碼編譯的。 根據這個帖子 https://blog.csdn.net/m0_62353836/article/details/129730981 重寫一份,以應對無法下載的問題 系統配置 #檢查是否為UTF-8編碼,是則跳…

CVPR‘25 SOTA——GoalFlow論文精讀

1)第一遍___粗讀 Q: 這篇論文試圖解決什么問題? A: 這篇論文提出了一個名為 GoalFlow 的端到端自動駕駛方法,旨在解決自動駕駛場景中高質量多模態軌跡生成的問題。具體而言,它試圖解決以下問題: 軌跡選擇的復雜性&am…

關于 CSDN的C知道功能模塊 的詳細解析,包括 新增的AI搜索(可選深度思考) 和 智能體功能 的具體說明及對比分析

以下是關于 CSDN的C知道功能模塊 的詳細解析,包括 新增的AI搜索(可選深度思考) 和 智能體功能 的具體說明及對比分析: 一、C知道核心功能模塊詳解(基礎功能) (參考前文內容,此處略…

forms實現快讀閱讀器

forms實現快讀閱讀器 主要功能包括: ??1.文本自動分塊顯示??:按設定的速度逐詞顯示文本內容。 ??2.閱讀控制??:開始/停止按鈕以及回車鍵控制。 ??3.界面自定義??:包括字體、顏色(前景色和背景色&#xff…

PowerBI 條形圖顯示數值和百分比

數據表: 三個度量值 銷售額 VAR Sales SUM(銷量表[銷售量]) RETURNIF(ISBLANK(sales), 0, sales) //希望Y軸顯示所有產品(沒有記錄顯示0)就加這個代碼,不希望顯示就不加//注意, 因為Y軸顯示的產品,會被篩選,所以用ALLSELECTED來獲取當前篩…

python: audioFlux XXCC 提取梅爾頻率倒譜系數 MFCC

承上一篇:python:audioFlux 使用教程 XXCC: 倒譜系數,支持所有頻譜類型. 可以提取梅爾頻率倒譜系數(MFCC) Cepstrum coefficients, supports all spectrum types. 以下是使用 audioflux 庫中 XXCC 類計算倒譜系數…

為 docker 拉取鏡像配置代理

為 Docker 配置代理,有 兩個層面 的操作:(1) Docker 守護進程(用于拉取鏡像等操作),(2) Docker 容器內部(容器內應用的網絡流量)。 我們這篇文章著重于前者,以下是詳細步驟&#xff…

最新的es版本忘記密碼,重置密碼

剛剛安裝了最新的es版本,就忘了密碼,怎么重置密碼呢? 一、進入es的斌目錄 #進入es文件/bin 目錄 ./elasticsearch-reset-password -u elastic 二 、輸入對應的密碼 然后再次訪問 我的是去掉了ssl的訪問 三、如果報錯:解決 [main] WARN

cursor如何集成MCP服務

本文主要介紹 Cursor IDE 是如何通過 Model Context Protocol (MCP) 服務來增強其功能的。本文將重點介紹兩個核心 MCP 服務的集成:GitHub MCP 服務和 Filesystem MCP 服務。 MCP 服務簡介 MCP(Model Context Protocol)是一個允許 IDE 與各…

Linux LED驅動(gpio子系統)

0. gpio子系統 gpio子系統是linux內核當中用于管理GPIO資源的一套系統,它提供了很多GPIO相關的API接口,驅動程序中使用GPIO之前需要向gpio子系統申請。 gpio子系統的主要目的就是方便驅動開發者使用gpio,驅動開發者在設備樹中添加gpio相關信息…

go中new和make有什么異同?

相同點:都是給變量分配內存 不同點: 作用類型不同。new通常給int、string、數組類型的變量分配內存,而make通常給slice、map、channel分配內存。返回值類型不同。new返回指向變量的指針,make返回的是變量本身new分配內存空間后&…