主頁 >  其他 > 翻越相機標定的奧林匹斯

翻越相機標定的奧林匹斯

2023-04-08 08:11:47 其他

    在機器視覺領域,相機標定是不可或缺的一步,而張氏標定法,因其靈活性,是各種標定方法中最有影響力的一種,稱其為相機標定的 "奧林匹斯山" 并不為過

    張正友 99年發表的論文 "Flexible Camera Calibration by Viewing a Plane from Unknown Orientations",在 2013年獲得 ICCV 的 Helmholtz Prize,便是對其影響的認可

    鑒于該論文的廣泛影響,張后來再三完善論文細節,治學嚴謹可見一斑,網上下載最多的是 "A Flexible New Technique for Camera Calibration",和獲獎那篇差異不大

     

    關于張氏標定法,不再贅述,本文將圍繞"標定精度",和讀者一起翻越相機標定的"奧林匹斯山"

 

1  相機標定

1.1  定義

    已知:世界坐標系中(建在平面標定板上),幾組特征點的空間坐標,以及在像素坐標系中,特征點對應的像素位置坐標

    求解:相機的內參和畸變系數

     

    標定板上特征點的空間坐標(3d),通過相機模型,與特征點的像素位置坐標(2d)關聯起來,如下:

$\qquad s \begin{bmatrix} u \\ v \\ 1 \end{bmatrix}  = \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix}  \begin{bmatrix} r_{11} & r_{12} & r_{13} & t_1 \\ r_{21} & r_{22} & r_{23} & t_2 \\ r_{31} & r_{32} & r_{33} & t_3 \end{bmatrix}  \begin{bmatrix} X_w \\ Y_w \\ Z_w\\ 1 \end{bmatrix} $

1.2  二維展開

    相機標定的程序,就是輸入幾組已知的 3d 特征點坐標和提取的 2d 特征點坐標,將反投影誤差構建為目標函式,在已知相機模型方程的基礎上,通過最小化目標函式,得到相機模型方程的引數

    開個腦洞,類比《三體》中的質子展開程序:高維度的相機標定問題,如果展開到二維空間,就是一個曲線擬合的問題,如下圖,參見 Ceres Solver 的曲線擬合例程

     

    分析相機標定的程序,得出影響標定(精度)的三個因素:1) 特征提取;2) 最優化方法;3) 相機模型

 

2  特征提取

    以視場(對角線) 100mm 的機器視覺系統為例,根據卓越成像的最佳實踐原則 #3,可知鏡頭的作業距離約為 200~400mm

    選 1/3 英寸(對角線6mm) CIS芯片,同樣根據最佳實踐原則 #3,推測出鏡頭的理想焦距為 12~24mm

     

    假定 CIS芯片的解析度為 1024(H) x 768(V),則 H 方向的"像素解析度"為 80mm/1024pixel ≈ 0.08mm/pixel

    這意味著,如果提取的特征點偏差 1個像素,造成的尺寸偏差為 0.08mm,因此,特征提取的精度非常重要

2.1  標定板圖案

    特征提取,屬于影像處理范疇,處理的是標定板在相機中的成像圖片,提取的是標定板圖案的特征點 (如角點、圓心等)

    常用標定板的圖案,有棋盤格、圓、非對稱圓、圓環,以及 ChArUco 等,Halcon 公司有特定圖案的 Halcon 標定板

   

    一般而言,圓環標定板的標定精度最高,圓次之,棋盤格最低

2.1.1  特征提取精度

    參考[2]中,對三種圖案標定板的各五張合成影像(非相機拍攝),添加相同的徑向畸變,比較不同圖案的特征提取精度

     1)  棋盤格,特征為角點,利用 OpenCV 先 findChessboardCorners() 粗定位,再 cornerSubPix() 精定位,得定位誤差 6pixel

     2)  圓標定板,特征為圓心,定位誤差次小,為 2.6pixel

     3)  圓環標定板,特征為圓環中心,定位誤差最小,為 1.7pixel

    對于0.08mm/pixel 的機器視覺系統,當鏡頭確定時(畸變系數固定),不同標定板對應的特征,提取精度最大相差 4.3pixel,約 0.34mm

   

2.1.2  反投影誤差

    用這三種圖案的各五張合成影像,來進行標定,得到反投影誤差的 RMSE 分別為 0.1263,0.0517 和 0.0515

    而用相機拍攝的三種圖案的實際影像,進行標定后,得到反投影誤差的 RMSE 分別為 0.139,0.135 和 0.115

     

    綜上,圓環標定板的標定精度,略高于圓標定板,二者均高于棋盤格標定板

2.2  迭代標定法

    特征提取出現偏差,是因為在標定程序中,標定板要變換位姿,不同位姿會引起透視收縮,導致特征檢測精度降低,張正友的論文里也提到過

     

2.2.1  偏差原因

    當棋盤格旋轉一定角度時,cornerSubPix() 精定位演算法中的梯度,并不和邊緣垂直,導致提取的角點有偏差

     

    將標定板進行透視校正,使棋盤格正對相機,此時演算法中的梯度和影像邊緣垂直,角點提取無偏差

       

    針對位姿導致的特征提取偏差,參考[2]提出了一種迭代標定法:先將影像轉換為平行正對,再檢測特征,重新標定,迭代直至收斂

     

2.2.2  方法步驟

    1)給定影像的特征檢測(角點、圓心或圓環中心)

    2)相機標定,得到標定引數

    重復以下步驟,直至收斂

    3)畸變校正和透視校正(轉換為平行正對影像)

    4)在平行正對影像中,檢測特征(模板匹配演算法)

    5)根據標定引數(每次迭代更新),將特征點轉換回原始位置

    6)相機標定,得到新的標定引數

    選相機真實拍攝的影像,采用該方法標定,得到反投影誤差的 RMSE,如下:  

     

    從表中看,采用迭代標定法,棋盤格的 RMSE 從 0.14 降到了 0.08,而圓和圓環的,則分別從 0.14 和 0.12 降到了 0.07 和 0.06

    以上結果,是參考[2]中所列,本人未實踐過,但在一家公司公眾號的文章中 (參考[4]),發現了類似迭代標定法的動圖,如下:

     
 

3  優化方法

    張的論文中,輸入影像 ≥11幅時,標定誤差顯著減小,而 Bouguet 標定包,用 20~25幅影像,影像數量越多,意味著提取的特征點也越多

   

    實際中,受照明不均勻、標定板或鏡頭污染、提取演算法等的限制,即使標定板轉換為平行正對,提取的特征點也會有離群點

3.1  RANSAC 標定法

    對于特征中離群點的剔除,常用的一種方法是 RANSAC:以反投影誤差 $E_{reproj}$ 做閾值,小于的為內點,大于的為外點,不斷迭代使選定的內點都滿足 $<E_{reproj}$

3.1.1  方法步驟

    1)張氏標定法,得到標定引數

    2)計算所有特征點的反投影誤差 $E_{reproj}$

    3)選 $E_{reproj} < T_{reproj}$ 的所有內點,再次標定得到新的引數

    重復步驟 2) 和 3),直到所有的內點都滿足 $E_{reproj} < T_{reproj}$ (文中 T 取 2)

    4)對每一幅標定影像,計算其反投影誤差 $E_{img}$,設定 RANSAC 引數初值,例如,$T_{img}=1.2 E_{img}$,最大內點數 $N=\infty$,置信度 $p=0.99$,$i=1$ 等

    5)將提取的特征點,在像素位置坐標中畫十字線,均分成四組 (避免四點共線)

    6)四組中各選一個點,計算相機外參,綜合之前的相機內參,篩選出滿足 $< T_{img}$ 的內點集 $S_{in}^i$

    7)如果本次篩選的 $S_{in}^i$,比之前篩選的內點數量多,則更新 $N$ 值為 $S_{in}^i$ 的內點數

    8)當 $i > N$ 時,進入步驟 9),否則,令 $i=i+1$,重復步驟 5) 6) 7)

    9)對每一幅影像,都執行步驟 5) 6) 7) 8),獲取每一幅影像的最大內點集 $S_{con}$

    10)綜合每幅影像,選出的內點集,再次標定,得到最終的標定引數

    以上步驟,和 OpenCV 中的 findHomography() 函式,在求解單應性矩陣時所用的 RANSAC 法類似,可參考之

3.1.2  測驗效果

    對于一幅合成的標定影像,添加高斯噪聲后,采用閾值法 和 RANSAC 法,篩選出的內點集,如下:

  

    對于一幅真實的標定影像,當因光照不均等存在離群點時,采用閾值法 和 RANSAC 法,篩選效果如下:

     

    從統計學上分析,隨著提取特征點中離群點的剔除,標定引數更逼近真實值,相機的標定精度也越來越高

     

    由此可知,采用閾值法 和 RANSAC 法,對于大部分的離群點,都能成功的篩選出來

3.2  目標函式

3.2.1  2d 和 3d

    考慮鏡頭的畸變,相機標定是一個非線性優化的程序,對于張氏標定法,目標函式在 2d 像平面上,如下:

     

    可定義為像平面中檢測到的特征點 $m_{u}^d$,和反投影到像平面上的特征點$\hat m_{u}^d$之間的像素差,如下:

    $\quad\displaystyle\sum_{i=1}^{N} \sum_{j=1}^{L}|| m_{u,i,j}^d - \hat{m}_{u,i,j}^{d}(f_x, f_y, u_0, v_0, k_1, k_2, R_i, t_i)||^2$

    在實際應用中,視覺系統測量的是 3d 空間中的特征點,2d 像平面中像素差相同的兩組點對,投射到 3d 空間中的距離差反而不相同

      

    可重定義目標函式,為檢測到的特征點轉換到相機坐標系 $m_c$,和反投影到相機坐標系上的特征點 $\hat m_c$ 之間的距離差,如下:

    $\quad\displaystyle\sum_{i=1}^N \sum_{j=1}^L || m_{c,i,j}(R_i, t_i) - \hat{m}_{c, i, j}(f_x, f_y, u_0, v_0,k_1, k_2, R_i, t_i)||^2$

    拍攝實際的影像,分別用上述兩種方法進行標定,結果表明:二者的反投影誤差幾無差別

   

3.2.2  $E_1$ 和 $E_2$

    目標函式變了,用原來的反投影誤差來評價標定精度,不再合適,為此,引入三個新的評價指標:

    $\quad E_1 = \begin{split}\frac{1}{n}\displaystyle\sum_{i=1}^{n}\sqrt{||M_{c,i} - \hat M_{c,i}||^2} \end{split}$

    $\quad E_2 = \begin{split}\frac{1}{n}\displaystyle \sum_{i=1}^{n}\sqrt{||M_{c,i} - \hat L_{c,i}||^2} \end{split}$

    $\quad E_3 = \begin{split}\frac{1}{m}\displaystyle \sum_{i,j=1}^{n}\sqrt{(|| M_{w,i} - M_{w,j}|| - ||\hat M_{c,i} - \hat M_{c,j}||)^2} \end{split}$

    再次比較這兩種標定方法,結果表明:3d 目標函式的優化精度要高于 2d 目標函式

   

 

參考

    卓越成像的11條最佳實踐原則

    Accurate Camera Calibration using Iterative Refinement of Control Points,2009

    Calibration Best Practices

    計算機與機器視覺中的高精度相機標定 (下)

    Accurate and robust estimation of camera parameters using RANSAC,2012

    Camera Calibration Toolbox for Matlab,Jean-Yves Bougue

    OpenCV Tutorials / feature2d module / Basic concepts of the homography explained with code

    A novel optimization method of camera parameters used for vision measurement,2013

    Review of Calibration Methods for Scheimpflug Camera,2018

    Automatic machine vision calibration using statistical and neural network methods,2005

原文鏈接: http://www.cnblogs.com/xinxue/

專注于機器視覺、OpenCV、C++ 編程

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/549437.html

標籤:其他

上一篇:Privilege Escalation 權限提升

下一篇:從功能到年薪30W+的測驗開發工程師,分享我這10年的職業規劃路線

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more