五、畸變矯正—讓世界不在扭曲

五、畸變矯正—讓世界不在扭曲

? ? ? ? ? 這篇博文所要講述的內容,是標定的主要用途之一:矯正攝像機的畸變。對于圖像畸變矯正的方法,張正友教授也在其大作“A Flexible New Technique forCamera Calibration”中給出。

? ? ? ? ?玉米在這里先為大家介紹一下,攝像機畸變主要有哪幾種以及這些討厭的畸變從何而來。

攝像機畸變主要包含:鏡像畸變、切向畸變。玉米在這里分別講述一下,并引用一些圖片,使大家對他們有一個直觀的認識。

? ? ? ? ?1.徑向畸變:產生原因是光線在遠離透鏡中心的地方比靠近中心的地方更加彎曲徑向畸變主要包含桶形畸變和枕形畸變兩種。下面兩幅圖是這兩種畸變的示意:


? ? ? ? ? 它們在真實照片中是這樣的:

? ? ? ? ? ?2.切向畸變:產生的原因透鏡不完全平行于圖像平面,這種現象發生于成像儀被粘貼在攝像機的時候。下面圖片來自于《學習opencv》p413。

? ? ? ? ? 畸變矯正,首先應該知道畸變系數,然后做與畸變相反的變換,消除畸變。

? ? ? ? ? 張氏標定法中只關注徑向畸變。我們是按照張氏標定,計算畸變系數的。那么,下面讓我們來看一下徑向畸變的數學表達。

? ? ? ? ? 因為在實際情況下,徑向畸變較小,所以其可以用主點(principle point)周圍的泰勒級數展開的前幾項進行描述。張氏標定法,利用前兩項來確定徑向畸變的畸變系數。數學表達式如下:

其中,代表理想無畸變的像素坐標,代表實際徑像畸變的情況下的像素坐標,代表主點,代表理想無畸變時的連續圖像坐標,代表實際徑像畸變的情況下的連續圖像坐標。K1,k2代表前兩階的畸變參數。。

???????? 那么對于圖像上的任意一點,我們有兩個個等式。化成矩陣形式:


? ? ? ? 通過前面兩篇博文所介紹的內容,求得的攝像機模型,我們可以計算出(可通過攝像機模型直接解出)、(與是否畸變無關,直接在已求得的內參陣中得到)、(即直接讀取的有畸變的像素坐標),(由攝像機模型可以通過物體的世界坐標點解出)。那么,兩個方程兩個未知數,我們用一點就可以求的徑向畸變了。因為我們有n張圖片,每張圖片上有m個點,所以我們可以得到2mn個等式。運用最小二乘法對結果進行優化。可用下式解徑向畸變k=[k1,k2]。

其中,D等式左邊的方程的系數矩陣,d是等式右邊的有畸變的像素坐標與無像素坐標之差構成的矩陣。有上式,一步到位,計算出畸變系數。

?????? 但是,但是,大家先別急。我們的參數求解之路還沒有結束。為了使標定得到的估算實際的、存在徑向畸變的攝像機參數。我們需要把,剛剛求解得到的畸變參數,連同前面得到的理想無畸變條件下的內外參數一起,進行極大似然估計。

?????? 這里的極大似然估計方法與上一篇博文《極大似然參數估計》相同,玉米在這里就不在贅述。

依然是以最小化下列函數為目標,只不過此次參數估計中又多加了k1,k2:

? ? ? ? 然后,仍然用Levenberg-Marquardt算法進行計算。最終就得到了,我們想要在考慮畸變情況下,攝像機的參數。

張氏標定,大功告成!

? ? ? ?下面讓我們矯正畸變:

? ? ? ? 就是這樣一個簡單的公式,就完成了畸變矯正。代表矯正畸變后的像素坐標,代表實際徑像畸變的情況下的圖像的像素坐標。

? ? ? ? 最后給大家展示兩幅圖,讓大家看一下畸變矯正的成果:


? ? ? ? ? 這就是張氏標定帶給我們的第一個直觀的好處,后面還有兩個大好處,玉米將為您介紹。

? ? ? ? ? 玉米才疏學淺,懇請請大家批評指正!

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

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

相關文章

第二階段個人沖刺08

昨天做了什么? 解決新建項目時會遇到“Your android sdk is out of date or is missing templates”的問題,,實現學生交流區,只有學生和管理員有權查看,教師無權查看的功能 今天要做什么? 實現學生交流區&a…

HALCON示例程序distance_transform.hdev通過distance_transform檢測線的缺陷

HALCON示例程序distance_transform.hdev通過distance_transform檢測線的缺陷 示例程序源碼(加注釋) 關于顯示類函數解釋 dev_close_window () dev_open_window (0, 0, 400, 400, ‘black’, WindowHandle)通過一系列的坐標點生成多邊形像素輪廓 gen_re…

java面試-Java并發編程(二)——重排序

當我們寫一個單線程程序時,總以為計算機會一行行地運行代碼,然而事實并非如此。 什么是重排序? 重排序指的是編譯器、處理器在不改變程序執行結果的前提下,重新排列指令的執行順序,以達到最佳的運行效率。 重排序分類 …

《MySQL必知必會》[01] 基本查詢

《MySQL必知必會》(點擊查看詳情)1、寫在前面的話這本書是一本MySQL的經典入門書籍,小小的一本,也受到眾多網友推薦。之前自己學習的時候是啃的清華大學出版社的計算機系列教材《數據庫系統概論》,基礎也算是半罐水&am…

(七)立體標定與立體校正 【計算機視覺學習筆記--雙目視覺幾何框架系列】

七、立體標定與立體校正 這篇博文中,讓玉米和大家一起了解一下,張氏標定是怎樣過渡到立體標定的?在這里主要以雙目立體視覺進行分析。對于雙目立體視覺,我們有兩個攝像頭。它們就像人的一雙眼睛一樣,從不同的方向看世界…

HALCON示例程序edge_segments.hdev提取連續的邊緣段

HALCON示例程序edge_segments.hdev提取連續的邊緣段 示例程序源碼(加注釋) 關于顯示類函數解釋 dev_update_off () dev_close_window () read_image (Image, ‘mreut’) get_image_size (Image, Width, Height) dev_open_window_fit_image (Image, 0, 0…

讓 jQuery UI draggable 適配移動端

背景: 在移動端,本人要實現對某個元素的拖動,想到使用 jQuery UI 的 draggable 功能。但是發現此插件的拖動只支持PC端,不支持移動端。 原因: 原始的 jQuery UI 里,都是mousedown、mousemove、mouseup來描述…

LAMP(7限定某個目錄禁止解析php、 限制user_agent、 PHP相關配置、PHP擴展模塊

限定某個目錄禁止解析php防止***上傳一個目錄文件php&#xff0c;網站會從而解析php,對我們的網站有很大的危險。因此&#xff0c;我們需要在能上傳文件的目錄直接禁止解析PHP代碼禁止步驟1.編輯虛擬主機配置文件&#xff1a;增添內容核心配置文件內容<Directory /data/wwwr…

編譯器的功能是什么

1、編譯器就是將“一種語言&#xff08;通常為高級語言&#xff09;”翻譯為“另一種語言&#xff08;通常為低級語言&#xff09;”的程序。一個現代編譯器的主要工作流程&#xff1a;源代碼 (source code) → 預處理器(preprocessor) → 編譯器 (compiler) → 目標代碼 (obje…

八、走向三維

八、走向三維 我們前面花了七篇博文做鋪墊&#xff0c;我們所做的一切努力都是為了最后的這一擊——立體成像。因為玉米的這個系列文章是對雙目視覺幾何框架的總結。此處跳過匹配&#xff0c;假設左右圖像點的完美匹配的。只看在幾何上&#xff0c;三維坐標是如何被還原的。相對…

通用連接池項目開啟

通用連接池項目開啟 待完善......轉載于:https://www.cnblogs.com/aresyl/p/5552092.html

HALCON示例程序fin.hdev通過形態學檢測缺陷

HALCON示例程序fin.hdev通過形態學檢測缺陷 示例程序源碼&#xff08;加注釋&#xff09; 關于顯示類函數解釋 dev_update_window (‘off’) read_image (Fins, ‘fin’ [1:3]) get_image_size (Fins, Width, Height) dev_close_window () dev_open_window (0, 0, Width[0],…

FEZ前端模塊化工程開發框架

FEZ FEZ 是面向前端模塊化工程的開發框架。主要目的是統一前端開發模式和項目開發結構&#xff0c;自動化前端工作流&#xff0c;提高開發效率和開發質量。使用持續集成等軟件工程的架構模式&#xff0c;集成眾多業界先進的解決方案&#xff0c;讓研發人員更專注于業務邏輯的實…

棧內存和堆內存

堆和棧這兩個字我們已經接觸多很多次&#xff0c;那么具體是什么存在棧中什么存在堆中呢&#xff1f;就拿JavaScript中的變量來說&#xff1a; 首先JavaScript中的變量分為基本類型和引用類型。 基本類型就是保存在棧內存中的簡單數據段&#xff0c;而引用類型指的是那些保存在…

L~M方法

L~M方法&#xff1a; L~M&#xff08;Levenberg-Marquardt&#xff09;方法有些讓人摸不清頭腦。玉米覺得L~M讓人困擾的主要原因有兩點&#xff1a;一是L~M從何而來、二是L~M怎么樣用&#xff1f;因為玉米也不是研究最優化理論的&#xff0c;所以玉米在這里用較為通俗的觀點&a…

Android——Activity去除標題欄和狀態欄

一、在代碼中設置 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //去除title requestWindowFeature(Window.FEATURE_NO_TITLE); //去掉Activity上面的狀態欄getWindow().setFlags(WindowManager.LayoutParams. FLAG_FULLSC…

Ghosts for Tea

Ghosts for Tea 喝茶&#xff1f;鬧鬼&#xff1f; Ten pence for a view over the bay . said the old man with the telescope. Lovely clearmorning. Have a look at the old lighthouse and the remains of the great shipwreckof 1935. “在如此可愛清爽的早晨&#xff0…

HALCON示例程序find_pads.hdev通過fit_rectangle2_contour_xld繪制精準輪廓

HALCON示例程序find_pads.hdev通過fit_rectangle2_contour_xld繪制精準輪廓 示例程序源碼&#xff08;加注釋&#xff09; 關于顯示類函數解釋 dev_update_pc (‘off’) dev_update_window (‘off’) dev_update_var (‘off’) read_image (Image, ‘die_pads’) dev_close_w…

IDEA將項目上傳至碼云/GitHub托管

前言 好久都沒有寫博客了&#xff0c;由于博主之前一直都在上班處于加班的階段&#xff0c;所以根本就沒有時間去學習。現在請假回到學校寫論文&#xff0c;有時間來學習了。 所以會不斷的進行博客的更新&#xff0c;以及分享我在公司學到的一些新的技術&#xff0c;希望大家多…

BZOJ 1937: [Shoi2004]Mst 最小生成樹 [二分圖最大權匹配]

傳送門 題意&#xff1a; 給一張無向圖和一棵生成樹&#xff0c;改變一些邊的權值使生成樹為最小生成樹&#xff0c;代價為改變權值和的絕對值&#xff0c;求最小代價 線性規劃的形式&#xff1a; $Min\quad \sum\limits_{i1}^{m} \delta_i$ $Sat\quad $非樹邊邊權$\ge$生成樹上…