相機參數與圖像處理技術解析

01. 相機內參和外參的含義?如果將圖像放大兩倍,內外參如何變化?

  • 相機有兩個最基礎的數據:內參(Instrinsics)和外參(Extrinsics),內參主要描述的是相機的CCD/CMOS感光片尺寸/分辨率以及光學鏡頭的系數,外參主要描述的是相機在世界坐標系下的擺放位置和朝向角度。

  • 參考:https://zhuanlan.zhihu.com/p/646310465

  • 相機的內參和外參是用于描述相機如何捕捉三維世界并將其投影到二維圖像平面上的參數。

    1. 內參(Intrinsic Parameters):

      • 內參是相機自身的屬性,與場景無關。它包括焦距(focal length)、主點(principal point,圖像中心的坐標)、畸變系數(distortion coefficients,描述鏡頭畸變如徑向和切向畸變)等。

      • 焦距和圖像傳感器的尺寸共同決定了視場角(Field of View, FOV)。

      • 主點通常接近圖像中心。

      • 內參矩陣一般形式為:
        [
        K = [ f x 0 c x 0 f y c y 0 0 1 ] K = \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix} K= ?fx?00?0fy?0?cx?cy?1? ?
        ]
        其中 KaTeX parse error: Can't use function '\(' in math mode at position 1: \?(?f_x, f_y) 是焦距在圖像平面上的x軸和y軸的比例,( c x , c y c_x, c_y cx?,cy?) 是主點的坐標。

    2. 外參(Extrinsic Parameters):

      • 外參描述的是相機相對于世界坐標系的位置和方向。它由旋轉矩陣(Rotation matrix)和平移向量(Translation vector)組成,這些參數定義了從世界坐標系到相機坐標系的轉換。

      • 外參矩陣通常表示為:
        KaTeX parse error: Undefined control sequence: \[ at position 2: \?[? \begin{bmatrix…
        其中 ( R R R) 是一個3x3的旋轉矩陣,( t t t) 是一個3x1的平移向量。

    如果將圖像放大兩倍,內外參的變化如下:

    • 內參變化:

      • 焦距 ( f x , f y f_x, f_y fx?,fy?) 通常不會改變,因為它是基于相機的物理屬性。但是,圖像坐標系的比例變化了,因此主點 KaTeX parse error: Can't use function '\(' in math mode at position 1: \?(?c_x, c_y) 需要調整以反映新的圖像中心。如果原圖中 KaTeX parse error: Can't use function '\(' in math mode at position 1: \?(?c_x, c_y) 是原點,放大后它們將變為原來的兩倍。

      • 新的內參矩陣將是:
        [
        K ′ = [ f x 0 2 c x 0 f y 2 c y 0 0 1 ] K' = \begin{bmatrix} f_x & 0 & 2c_x \\ 0 & f_y & 2c_y \\ 0 & 0 & 1 \end{bmatrix} K= ?fx?00?0fy?0?2cx?2cy?1? ?
        ]

    • 外參變化:

      • 外參(旋轉矩陣和平移向量)不會因為圖像尺寸的改變而改變,因為它們描述的是相機與世界坐標系之間的物理關系,與圖像的尺寸無關。

    LSS(Lift, Splat, Shoot)

    https://github.com/nv-tlabs/lift-splat-shoot

    是一個用于三維環境感知和環境表示的視覺感知系統,主要應用于自動駕駛領域。這個方法是一種用于從二維圖像直接構建三維環境表示的深度學習算法。它主要通過以下三個步驟來實現:

    1. Lift(提升):

      • 這一步涉及到將二維像素“提升”到三維空間中。算法使用從圖像中提取的深度信息將每個像素點映射到一個三維點上。這種映射通常依賴于相機的內參和外參,通過這些參數,可以將二維圖像坐標轉換為三維世界坐標。
    2. Splat(噴灑):

      • 在“噴灑”步驟中,所提升的三維點被映射到一個離散的三維空間(通常是體素網格)中。這一步是一種數據結構轉換,它把連續的三維點云轉換為離散的體素表示,這種表示更適合用于隨后的處理步驟如卷積神經網絡。
    3. Shoot(射擊):

      • 最后一步是“射擊”,這里利用三維卷積神經網絡處理提升和噴灑后的數據,從而提取用于任務的特征。例如,自動駕駛車輛可能需要識別和分類不同的道路用戶(如行人、車輛)、道路標記和其他關鍵的環境特征。

    LSS方法的一個主要優勢是它能夠直接從圖像數據中構建出三維場景的表示,這有助于自動駕駛系統更好地理解和導航其周圍的環境。此外,它通過利用卷積神經網絡,可以在保持高度準確性的同時實現高效的處理速度。這種方法在自動駕駛技術中具有重要的應用前景,尤其是在需要精確和實時的三維環境感知和決策支持的情況下。

02. 坐標系的變換

  • BEV訓練數據集的世界坐標系, 比如nuScenes地圖,它的世界坐標系是圖片坐標系,原點在圖片左下角,單位是米。數據集中會根據時間序列給出車輛的瞬時位置,也就是在這個圖片上的XY。

  • BEV里,這個Ego是特指車輛本身,它是用來描述攝像機/激光雷達(Lidar,light detection and ranging)/毫米波雷達(一般代碼里就簡稱為Radar)/IMU在車身上的安裝位置(單位默認都是米)和朝向角度,坐標原點一般是車身中間,外參(Extrinsics Matrix)主要就是描述這個坐標系的。

  • 相機坐標系,坐標原點在CCD/CMOS感光片的中央,單位是像素,內參(Intrinsics Matrix)主要就是描述這個坐標系的。

  • 照片坐標系,坐標原點在圖片的左上角,單位是像素,橫縱坐標軸一般不寫成XY,而是uv。

  • 照片中的像素位置轉換到世界坐標系時,要經歷:Image_to_Camera, Camera_to_Ego, Ego_to_World;Camera_to_Image通常就是Intrinsics參數矩陣,Ego_to_Camera就是Extrinsics參數矩陣。

03. 放射變換與逆投影變換分別是什么

  • 仿射變換: 仿射變換是一種線性變換,保持了直線的平行性和比例關系。它可以用于將一個二維平面上的點映射到另一個二維平面上。仿射變換可以通過一個矩陣乘法和一個平移向量來表示。它包括平移、旋轉、縮放和剪切等操作。在計算機視覺領域,仿射變換常用于圖像的平移、旋轉、縮放和仿射校正等操作。

  • 逆投影變換: 逆投影變換是指通過相機內參和外參,將圖像上的點投影到三維空間中的過程。它是相機成像過程的逆過程。逆投影變換可以用于將圖像上的點轉換為三維空間中的點坐標。逆投影變換的計算需要相機的內參矩陣、外參矩陣和圖像上的點坐標。在計算機視覺和計算機圖形學中,逆投影變換常用于三維重建、相機姿態估計和虛擬現實等應用。

import numpy as np
import cv2# 定義相機內參矩陣 K
K = np.array([[1000, 0, 500], [0, 1000, 300], [0, 0, 1]], dtype=np.float32)# 定義相機外參的旋轉矩陣 R(在此為單位矩陣)
R = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]], dtype=np.float32)# 定義相機外參的平移向量 T
T = np.array([1, 2, 3], dtype=np.float32)# 定義圖像上的點坐標 uv(二維點)
uv = np.array([[200, 300], [400, 500]], dtype=np.float32)# 計算 Rc2w * K 的逆矩陣
Rc2w_invK = np.linalg.inv(np.dot(R, K))# 將 uv 點擴展成齊次坐標,并進行逆投影變換
H = np.dot(Rc2w_invK, np.append(uv, np.ones((uv.shape[0], 1)), axis=1).T)# 計算世界坐標 Pxyz(假設深度為 T[2])
Pxyz = H * (T[2] / H[2]) - T[:2]# 定義仿射變換矩陣 M
M = np.array([[1, 0, 100], [0, 1, 50]], dtype=np.float32)# 加載圖像(假設 image 是事先加載的圖像)
# image = cv2.imread('path_to_your_image.jpg')  # 替換為實際圖像路徑# 進行仿射變換
# output = cv2.warpAffine(image, M, (image.shape[1], image.shape[0]))  # 假設 image 是加載的圖像# 將每一步結果打印出來以進行驗證(可選)
print("相機內參矩陣 K:\n", K)
print("旋轉矩陣 R:\n", R)
print("平移向量 T:\n", T)
print("圖像點坐標 uv:\n", uv)
print("逆 Rc2w * K:\n", Rc2w_invK)
print("齊次坐標 H:\n", H)
print("世界坐標 Pxyz:\n", Pxyz)
print("仿射變換矩陣 M:\n", M)

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

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

相關文章

每日兩題 / 20. 有效的括號 155. 最小棧(LeetCode熱題100)

20. 有效的括號 - 力扣(LeetCode) 遇到左括號入棧 遇到右括號判斷棧頂是否為匹配的左括號 最后判斷棧是否為空 func isValid(s string) bool {var stk []runefor _, value : range s {if value ( || value { || value [ {stk append(stk, value)}…

阿里巴巴圖標庫iconfont的使用方式

文章目錄 什么是 iconfong創建一個自己的項目如何使用Unicode 使用方法Font class 使用方式Symbol 使用方式還有一種使用方式 在線鏈接(不推薦,但可用于測試) 什么是 iconfong Iconfont 是一種圖標字體服務。它將各種圖標設計轉換為字體格式…

數據庫的約束與索引

數據庫的約束與索引 文章目錄 數據庫的約束與索引一、約束1、定義2、主鍵索引3、唯一約束4、非空約束5、外鍵約束 二、索引1、定義2、主鍵索引3、唯一索引4、普通索引5、全文索引 三、深入索引面試題(一)面試題(二)面試題&#xf…

【設計模式】行為型-狀態模式

在變幻的時光中,狀態如詩篇般細膩流轉。 文章目錄 一、可調節的燈光二、狀態模式三、狀態模式的核心組件四、運用狀態模式五、狀態模式的應用場景六、小結推薦閱讀 一、可調節的燈光 場景假設:我們有一個電燈,它可以被打開和關閉。用戶可以…

snap和apt的區別簡單了解

Linux中沒有tree命令的時候提示安裝的時候出現了兩個命令,簡單看了看兩者有何區別(一般用apt就可以了): sudo snap install tree 和 sudo apt install tree 這兩個命令都是用來安裝 tree 命令行工具的,但它們使用的是不…

在線教育平臺,easyexcel使用案例

控制器 因為如何想要在讀數據的時候操作數據庫,就必須使用構造方法傳dao 或者service,因為這個不歸spring管理,不能自動注入,所以參數里需要傳遞service 或者 dao AutowiredIEduSubjectService subjectService;添加課程分類的方法…

Anaconda學習常見問題匯總

問題1:Fatal error in launcher: Unable to create process using ‘“d:\anaconda\isntall\envs\learn1\python.exe 在進行anaconda學習時,在控制臺輸入:pip list想要查看環境里的內容時發生錯誤: Fatal error in launcher: Un…

個人博客|PHP源碼|支持多國語言切換

一. 前言 今天小編給大家帶來了一款可學習,可商用的,支持多國語言的個人博客網站源碼,支持二開,無加密。此博客相當簡潔,也適合海外。詳細界面和功能見下面視頻演示。 如果您正好有此需求源碼,請聯系小編…

軟件資產管理系統:提升企業軟件資產透明度與合規性的終極解決方案!

在當今數字化轉型浪潮中,企業軟件資產管理的重要性日益凸顯。然而,傳統的手工管理方式往往效率低下,難以應對快速變化的軟件環境。SmartLic軟件資產管理系統應運而生,它以先進的技術手段,為企業提供全面的軟件資產管理…

開源自動化熱鍵映射工具autohotkey十大用法及精選腳本

AutoHotkey(AHK)是一款功能強大的熱鍵腳本語言工具,它允許用戶通過編寫腳本來自動化鍵盤、鼠標等設備的操作,從而極大地提高工作效率。以下是AutoHotkey的十大經典用法,這些用法不僅解放了用戶的雙手,還展示…

程序化交易廣告及其應用

什么是程序化交易廣告? 程序化交易廣告是以實時競價技術即RTB(real-time bidding)為核心的廣告交易方式。說到這里,你可能會有疑問:像百度搜索關鍵詞廣告還有百度網盟的廣告,不也是CPC實時競價的嗎&#x…

MDX的魔法:探索SQL Server中的多維表達式

📊 MDX的魔法:探索SQL Server中的多維表達式 在商業智能和數據分析領域,SQL Server提供了一種強大的工具來處理多維數據集,這就是多維表達式(Multidimensional Expressions,簡稱MDX)。MDX是一種…

論文學習_UVSCAN: Detecting Third-Party Component Usage Violations in IoT Firmware

論文名稱發表時間發表期刊期刊等級研究單位 Understanding the Security Risks Introduced by Third-Party Components in IoT Firmware 2024年IEEE TDSCCCF A佐治亞理工學院 1. 引言 研究背景:物聯網(IoT)已經無處不在,為我們…

HQChart報價列表高級應用教程7-走勢列數據對接

HQChart報價列表高級應用教程7-走勢列數據對接 走勢列小程序效果圖PC效果圖HQChart代碼地址走勢列類型配置走勢列數據格式示例走勢列 單獨使用一列顯示每個股票的走勢圖 小程序效果圖 PC效果圖 HQChart代碼地址 地址:github.com/jones2000/HQChart 走勢列類型 REPORT_COL…

[工業網絡] 模型建立

普渡大學ICS參考模型 普渡企業參考架構(PERA)是由西奧多J威廉姆斯(Theodore J. Williams)和普渡大學計算機集成制造工業大學聯盟的成員在1990年代開發的企業架構參考模型。該模型被ISA-99(現為ISA/IEC 62443&#xff…

使用EndNote在Word中插入參考文獻,并編輯參考文獻樣式方法

一、背景 在準備中期報告時,學校給的是Word模板,習慣了Latex排版和添加參考文獻的便利后,真不想用word寫東西。 之前投《機器人》期刊(被拒了)和準備開題的時候也是用word寫的,當時為方便添加參考文獻和定…

MyBatis 分頁插件 PageHelper 簡介

引言 PageHelper 是一款優秀的開源免費 MyBatis 分頁插件,它極大地簡化了分頁查詢的復雜性,支持多種主流數據庫如 MySQL、Oracle、MariaDB、DB2 等。本文將詳細介紹 PageHelper 的基本使用、配置參數、實現原理以及實際項目中的應用。 一、PageHelper …

Memcached中的CAS操作:確保數據一致性的原子武器

Memcached中的CAS操作:確保數據一致性的原子武器 在分布式緩存系統中,保持數據的一致性是一個重要而復雜的任務。Memcached作為一種高性能的分布式內存緩存系統,提供了一種稱為Compare-And-Swap(CAS)的操作&#xff0…

解決fastjson自動過濾null值

解決fastjson自動過濾null值 使用 SerializerFeature.WriteNullStringAsEmpty 解決 List<HistoryVector> historyVectors new ArrayList<>();HistoryVector historyVector new HistoryVector();historyVector.setInput("1");historyVector.setReason(&q…

不銹鋼酸退作業區2#冷線氧化鋯分析儀信號傳輸系統的優化

不銹鋼酸退作業區2#冷線氧化鋯分析儀信號傳輸系統的優化 一、項目提出前狀況: (一)不銹鋼酸退作業區2#冷線退火爐煙氣監測系統所使用的設備為橫河氧化鋯分析儀,此設備主要用于檢測退火爐內天然氣燃燒后煙氣成分中的氧含量值,此設備的檢測準確性直接影響產品質量,而且決定…