【相機標定系列】【相機模型】SLAM 中常用的相機模型畸變模型總結

Overview

魚眼鏡頭的成像原理分類:

Dioptric cameras,通過透鏡來實現,主要是折射
Catadioptric cameras,使用一個標準相機加一個面鏡(Shaped mirror)
polydioptric camera,通過多個相機重疊視野

目前的視覺系統都是 central 的,入射光線會相交于同一點,點稱為 single effective viewpoint。

https://github.com/alalagong/CameraModel

Camera models相機模型

Pinhole:針孔
omnidirectional:全向

(【魚眼鏡頭9】論文Omnidirectional Camera,魚眼是全向折射相機,滿足單一有效視點,scaramuzza多項式Taylor模型(適用于魚眼相機),統一投影模型(在魚眼應用受限))中提到了Omni 相機模型,早期的統一投影模型和后來的scaramuzza多項式Taylor模型(適用于魚眼相機)

Distortion models :畸變模型

Equidistant (EQUI)
Radtan
FOV

Equi畸變模型是一種用于描述相機鏡頭引起的徑向畸變(radial distortion)的數學模型。它基于等距投影(equidistant projection)的原理,即圖像上點與物體空間點之間的距離在投影前后保持不變。在【魚眼鏡頭10】等距Equidistant模型的Kannala-Brandt模型中我說明了這個的模型的情況,在opencv 中fisheye有應用

Radtan在【相機標定系列】徑向畸變和切向畸變(radial-tangential distortion) 徑向畸變和切向畸變模型,簡稱為radtan畸變模型。中有說明,是經典的畸變模型

Projection model:投影模型

Full projection model
MEI Camera
Pinhole Camera
atan Camera
Davide Scaramuzza Camera

常用用例

要注意畸變矯正之后的相機內參會變化。

DSO:Pinhole + Equi / Radtan / FOVVINS:Pinhole / Omni + RadtanSVO:Pinhole / atan / ScaramuzzaOpenCV:cv: pinhole + Radtan , cv::fisheye: pinhole + Equi , cv::omnidir: Omni + Radtan

cv::fisheye在 OpenCV 中用于魚眼相機的標定,但它本身并不直接等同于 Kannala-Brandt 模型。不過,cv::fisheye 函數在處理魚眼相機標定時,可能會采用類似 Kannala-Brandt 模型或其他魚眼相機模型的方法來描述和校正魚眼相機的畸變。

cv::fisheye

cv::fisheye 是 OpenCV 庫中用于處理魚眼相機(Fisheye Camera)的模塊。它基于魚眼相機模型來處理魚眼鏡頭引入的嚴重畸變。以下是關于 cv::fisheye 所基于的模型的一些關鍵點:

  1. 魚眼相機模型簡介

    • 魚眼相機相較于傳統針孔相機,擁有更廣闊的視野,但這也導致了更嚴重的畸變。
    • 魚眼相機模型通常包括針孔成像和魚眼畸變兩個主要部分。
  2. 針孔成像

    • 在魚眼相機模型中,針孔成像描述了從3D世界坐標系到相機坐標系,再到理想圖像坐標系的投影過程。
    • 這一過程通過外參數的旋轉和平移轉換來實現。
  3. 魚眼畸變

    • 魚眼畸變是魚眼相機特有的現象,它導致圖像中的直線在圖像邊緣附近呈現彎曲狀。
    • OpenCV 中的 cv::fisheye 模塊使用多項式模型來描述這種畸變,通常包括多個畸變系數(如 k1, k2, k3, k4 等)。
    • 畸變校正通常涉及將畸變圖像坐標轉換為校正后的圖像坐標。
  4. 畸變校正過程

    • 對于世界坐標系中的一點 P,首先通過針孔投影得到理想坐標 [a; b]。
    • 接著,應用魚眼畸變模型計算畸變后的坐標 [x’; y’]。
    • 最后,將畸變坐標調整到像素坐標系 [u; v]。
  5. 多項式畸變模型

    • OpenCV 的 cv::fisheye 模塊使用的畸變模型通常是一個多項式,如 θ d = θ ( 1 + k 1 θ 2 + k 2 θ 4 + k 3 θ 6 + k 4 θ 8 θd = θ (1 + k1θ^2 + k2θ^4 + k3θ^6 + k4θ^8 θd=θ(1+k1θ2+k2θ4+k3θ6+k4θ8)。
    • 其中,θ 是理想坐標的極角,θd 是畸變后的極角,k1, k2, k3, k4 是畸變系數。
  6. 模型應用

    • cv::fisheye 模塊提供了多種函數和工具,用于魚眼相機的標定、畸變校正、投影和反投影等操作。
    • 通過這些工具,用戶可以準確地校正魚眼相機拍攝的圖像,獲得更準確的視覺信息。

總結來說,cv::fisheye 是基于魚眼相機模型來處理魚眼鏡頭引入的畸變的。它利用針孔成像原理和多項式畸變模型來模擬和校正魚眼相機的成像過程,從而為用戶提供高質量的視覺信息。

參考

https://blog.csdn.net/OKasy/article/details/90665534

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

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

相關文章

npm的基本命令和用法

1. 安裝與初始化 安裝npm 首先,確保你的系統中已安裝了Node.js,因為npm隨Node.js一同分發。訪問Node.js官網下載并安裝適合你操作系統的版本。安裝完成后,在終端或命令提示符中輸入以下命令來驗證安裝: 1$ node -v 2$ npm -v …

[STM32-HAL庫]ADC采集-DMA中斷采集-平均值濾波-STM32CUBEMX開發-HAL庫開發系列-主控STM32F103C8T6

目錄 一、前言 二、實現步驟 1.STM32CUBEMX配置 2.Keil工程程序設計 三、結語 一、前言 本文通過STM32CUBEMX實現對ADC的數據采集和濾波操作,幫助各位開發者完成與模擬量輸入的采集工作。 二、實現步驟 1.STM32CUBEMX配置 以STM32F103C8T6為例,打開S…

3D 生成重建015-nerf2mesh從神經輻射場中提取mesh和紋理!

3D 生成重建015-nerf2mesh從神經輻射場中提取mesh和紋理! 文章目錄 0 論文工作1 論文方法2 效果 0 論文工作 NeRF2Mesh 提出了一種從多視角 RGB 圖像重建紋理表面網格的新方法。它克服了傳統 NeRF 模型的局限性,由于其隱式表示,傳統 NeRF 模…

高斯分步正態分布

高斯分布,也稱為正態分布(Normal Distribution),是統計學和概率論中最重要的分布之一。它由德國數學家卡爾弗里德里希高斯(Carl Friedrich Gauss)首先系統研究并命名。以下是關于高斯分布的詳細介紹&#x…

基于 Pre-commit 的 Python項目代碼風格統一實踐

背景信息 統一代碼風格首先需要定義參照的規范,每個團隊可能會有自己的規范,我們選擇的規范是 yapf mypy isort,如果保證所有的研發人員都遵循相關規范呢? 鼓勵 IDE 中對應的插件的安裝,通過直接對應的插件&#x…

bootstrap實現天平效果

之前提到了,最近,孩子的幼兒園讓家長體驗“半日助教活動”,每個家長需要講授15-20分鐘的課程。作為一名程序員,實在沒有能教的課程,只能做了一個小游戲,帶著小朋友們熟悉數字。 在上一章博客中&#xff0c…

【讀書】讀書筆記——理科生的視角:底層邏輯+數學之美

1,底層邏輯1(看清這個世界的底牌) 劉潤 著 0)什么是底層邏輯? 底層邏輯是:事物之間共同點、變化背后不變的東西事;看清事物的本質,才能在復雜變化中從根本上解決問題。 1&#x…

【Java繼承】(超級詳細!!!)

【Java繼承】(超級詳細!!!) 1、 繼承的概念2 、繼承的語法3、 父類成員訪問3.1 子類中訪問父類的成員變量3.2 子類中訪問父類的成員方法 4、 super關鍵字5 、子類的構造方法6、 繼承關系上的執行順序7、protected 關鍵…

ubuntu20.04安裝后配置:wifi、屏幕亮度、Nvidia驅動等

文章目錄 一、安裝時最好用英語,否則Downloads等home下文件夾是中文二、安裝后開機無法進入系統圖形界面三、清理不必要軟件,更新系統四、屏幕亮度、Nvidia驅動五、wifi 一、安裝時最好用英語,否則Downloads等home下文件夾是中文 安裝完再在…

error: ‘address‘ in ‘class school‘ does not name a type school:: address = “

錯誤代碼 class school{ public:string name;static string address; public:static string getAddress(){return address;} };school::address "南京路";原因 school::address “南京路”;前面未加類型,導致編譯錯誤 解決 class school{ public:stri…

選項卡式小部件QTabWidget

文章目錄 1. 詳細介紹2. 常用屬性3. 信號4. 常用函數5. 官方示例Tab Dialog QTabWidget提供一堆選項卡式小部件。 1. 詳細介紹 選項卡式部件提供一個選項卡欄和一個用于顯示與每個選項卡相關的頁面的頁面區域。 默認情況下,選項卡欄顯示在頁面區域上方,…

Vue.js - 計算屬性與偵聽器 【0基礎向 Vue 基礎學習】

文章目錄 計算屬性 computedcomputed 的使用方法computed 與 method 的區別計算屬性完整寫法 watch 偵聽器(監視器)簡單寫法 → 簡單類型數據,直接監視完整寫法 → 添加額外配置項 計算屬性 computed computed 的使用方法 **概念&#xff1…

web題解,基礎知識鞏固(qsnctf)

1.文章管理系統 1)打開題目,把它頁面翻完了,沒看懂它有啥用 2)看了看源碼,也是一樣的,沒找到有用的東西 3)想著可能還是在隱藏文件里找,那我就直接用dirsearch掃掃看 4)…

初識C++ · 模擬實現vector

目錄 前言: 1 部分簡單函數的實現 2 push_back和pop_back 3 reserve和resize 4 Print_vector 5 insert和erase 6 拷貝構造 7 構造 8 賦值 9 memcpy的問題 10 迭代器失效 前言: 繼上文模擬實現了string之后,接著就模擬實現vector&…

DataFrame—數據匯總9

s3.sort_index() 文章最前: 我是Octopus,這個名字來源于我的中文名--章魚;我熱愛編程、熱愛算法、熱愛開源。所有源碼在我的個人github ;這博客是記錄我學習的點點滴滴,如果您對 Python、Java、AI、算法有興趣&#xf…

MyBatis復習筆記

3.Mybatis復習 3.1 xml配置 properties&#xff1a;加載配置文件 settings&#xff1a;設置駝峰映射 <settings><setting name"mapUnderscoreToCamelCase" value"true"/> </settings>typeAliases&#xff1a;類型別名設置 #這樣在映射…

如何去除視頻上的文字?免費無痕去水印分享!視頻制作良器!

對于需要進行二次創作的視頻素材&#xff0c;去除原有的文字可以提供一個更加干凈的畫布&#xff0c;方便創作者在其基礎上進行新的創作和編輯。同時&#xff0c;去除文字后的視頻也更方便分享到各種平臺&#xff0c;避免因為平臺對文字的限制而導致視頻無法發布或傳播。 要去除…

Kotlin 標準函數 with、run、apply 的定義和使用

Kotlin 標準函數 with、run、apply 的定義和使用 1. with 函數 定義&#xff1a; with 函數允許你在一個對象的上下文中執行一個 lambda 表達式&#xff0c;而不需要在 lambda 表達式中重復引用該對象。 kotlin.internal.InlineOnly public inline fun <T, R> with(r…

云計算期末復習(1)

云計算基礎 作業&#xff08;問答題&#xff09; &#xff08;1&#xff09;總結云計算的特點。 透明的云端計算服務 “無限”多的計算資源&#xff0c;提供強大的計算能力 按需分配&#xff0c;彈性伸縮&#xff0c;取用方便&#xff0c;成本低廉資源共享&#xff0c;降低企…

python 3.10 install on centos

CentOS 7 安裝 Python 3.10_yum python3.10-CSDN博客