1. 程式人生 > >(轉)影象處理中消除相機透鏡畸變和視角變換

(轉)影象處理中消除相機透鏡畸變和視角變換

一般的針孔相機模型如下:

三維座標點經過透視投影變換,轉換到一個影象平面座標點。

而相機透鏡還存在一定的畸變,包括橫向畸變和切向畸變。

因此,針孔相機模型又被擴充套件為以下模型:

首先,世界座標被轉換為相機座標,由X,Y,Z到x,y,z;

然後,歸一化,z=1處,x,y的投影座標x`,y`;

接下來,對投影座標,進行畸變處理;

最後,由相機座標轉換到影象座標。

在使用廣角鏡頭或魚眼相機時,原始影象存在畸變比較嚴重。

在影象識別的很多應用場景中,消除影象的畸變是影象預處理的首要問題。

通過相機標定,很容易拿到相機的內部引數,包括焦距、光心和畸變係數。

以上過程,就是透鏡畸變前後影象座標變換的公式。具體步驟如下:

1. 由影象座標系反變換到相機座標系中

2.  然後,校正反變換R-1,一般無校正變換的相機,預設為單位矩陣

3. 歸一化,並進行相機透鏡畸變處理

4. 由相機座標轉換到影象座標。

由此,得到由針孔模型到透鏡畸變畸變模型相互變換的對應關係u <--> mapx, v <--> mapy

initUndistortRectifyMap函式就是完成了以上工作。

opencv中,remap與undistortion都是消除畸變的函式,undistortion在設定了一些引數後呼叫了remap函式,二者的演算法實質是一樣的。由目標影象的座標,找到對應的原始影象座標,然後將其值複製到目標影象。大致思路是如此,由於影象大小和變換,需要插值或近似的方法,如最鄰近法、線性插值等

影象視角變換

如影象由前向視角frontview轉換為俯視角birdview。

一般來講,相機向下傾斜時,相機前向視角frontview的視角範圍比較大,而俯視birdview需要的視角比較小(涉及地面的視角部分)。

 

針孔模型下,在前向視角影象中,擷取涉及地面的部分,並通過透視變換,轉換為俯視視角。地面的一個矩形區域,在前向檢視中會大致是一個三角形或梯形的形狀,而在俯檢視中,仍是一個矩形影象,且能保留線性、平行性特徵。

如下,一個前向廣角檢視,轉換為俯檢視。

前向檢視:

俯檢視:

 

轉換方法:

首先,通過標定獲取相機的外部引數,世界座標系中相機的位置Position和傾角(相對於x,y,z座標軸的角度),即M=R|t。並假定地面的z座標為z=0.

然後,獲取俯檢視內的三維地面座標。z=0,地面區域的實際大小與俯檢視的大小成一定比例,即俯檢視中一個畫素的位置(u`,v`),在地面座標上,也有對應的位置(x`, y`, 0) = (u`*spaceSolution, v`*spaceSolution, 0).spaceSolution是空間畫素的大小,如一個畫素的高和寬是0.05米。。

然後,由上面第二塊公式,通過位置變換,畸變計算,和相機引數變換,三個步驟,將每個地面位置座標(x`,y`, 0)轉換為前向檢視中的座標(u, v)。

此時,前向畸變檢視像與俯檢視像有一個對應關係(u,v) <--> (u`,v`)。

通過對應關係,每個俯檢視的畫素都在前向畸變檢視像中有對應的位置,兩者的畫素值相等(使用最鄰近法或線性插值等)。俯檢視前方的部分邊緣模糊比較嚴重,這是在原圖中取樣範圍小的原因。

相關推薦

影象處理消除相機透鏡畸變視角變換

一般的針孔相機模型如下: 三維座標點經過透視投影變換,轉換到一個影象平面座標點。 而相機透鏡還存在一定的畸變,包括橫向畸變和切向畸變。 因此,針孔相機模型又被擴充套件為以下模型: 首先,世界座標被轉換為相機座標,由X,Y,Z到x,y,z; 然後,歸一化,

影象處理消除相機透鏡畸變視角變換

 一般的針孔相機模型如下: 三維座標點經過透視投影變換,轉換到一個影象平面座標點。 而相機透鏡還存在一定的畸變,包括橫向畸變和切向畸變。 因此,針孔相機模型又被擴充套件為以下模型: 首先,世界座標被轉換為相機座標,由X,Y,Z到x,y,z; 然後,歸一化,z=1處

在Eclipse創建Maven多模塊工程

http term water 表現 優化配置 -i sco 文件 man 背景:以前只總結了怎麽在命令行下創建maven的多模塊項目,在eclipse下怎麽創建不是很清楚。最近需要在git的資源庫中上傳多模塊項目,方便後期的維護,所以將網上的資料進行整理。 原文鏈接:h

ASP.NET常見文件類型及用途

bin 許可 程序集 授權 rac 查看 類關系 置配 執行 從入門導師那繼承來的習慣,也是加上自己的所謂經驗判斷,一直對WEB開發不太感冒,可惜呀,從業近二十年,還得從頭開始對付HTML、CSS、JS、ASPX,以前的經驗,用不上啦!!!先從好好學習ASPX開發入手吧!

Matlab學習筆記--影象處理

11、影象算術運算 IPT支援的影象算術運算 函式 描述 Imadd 兩幅影象相加或把常數加到影象 Imsubtract 兩幅影象相減或從影象減去常數

Matlab學習筆記--影象處理

1、影象的讀取與顯示 >> rgb = imread('F:\圖片\beautiful scenery\\2.jpg');             &nb

更改MyEclipse的src目錄的瀏覽方式

更改MyEclipse中的src目錄的瀏覽方式 看到這個標題,有人可能不會明白,這裡先看張圖:   右邊的圖就是我們要更改的樣子,有的時候我們做專案需要看下目錄的層次,於是使用了Navigator的那個檢視,其實常用的這種包檢視也可以變成那種樣式。 這是我

影象處理與計算機視覺:基礎,經典以及最近發展4影象處理與分析

Last update: 2012-6-3 本章主要討論影象處理與分析。雖然後面計算機視覺部分的有些內容比如特徵提取等也可以歸結到影象分析中來,但鑑於它們與計算機視覺的緊密聯絡,以及它們的出處,沒有把它們納入到影象處理與分析中來。同樣,這裡面也有一些也可以劃歸到計算機視覺中

opencvpython影象處理之三

一、函式簡介 1、zeros—構造全0矩陣 函式原型:zeros(shape, dtype=None, order=’C’) shape:矩陣大小;例如:300x300; dtype:資料型別;例如:”uint8” order:資料排列順序,預設按列排的 2、line—畫線

轉載影象處理卷積

卷積公式  解釋  卷積公式是用來求隨機變數和的密度函式(pdf)的計算公式。  定義式:  z(t)=x(t)*y(t)= ∫x(m)y(t-m)dm.   已知x,y的pdf,x(t),y(t).現在要求z=x+y的pdf. 我們作變數替顯,令  z=x+y,m=x. 雅可比行列式=1.那麼,z,m聯合密

opencvpython影象處理之九

一、函式簡介 1、threshold—影象簡單閾值化處理 函式原型:threshold(src, thresh, maxval, type, dst=None) src:影象矩陣 thresh:閾值 maxVal:畫素最大值 type:閾值化型別 2、adaptiveThre

設計模式類的關係

     在java以及其他的面向物件設計模式中,類與類之間主要有6種關係,他們分別是:依賴、關聯、聚合、組合、繼承、實現。他們的耦合度依次增強。 1. 依賴(Dependence)          依賴關係的定義為:對於兩個相對獨立的物件,當一個物件負責構造另

web.xml的contextConfigLocation在spring的作用

param 不存在 new xml配置 prope alt 圖片 變量 -s 一、Spring如何使用多個xml配置文件   1、在web.xml中定義contextConfigLocation參數,Spring會使用這個參數去加載所有逗號分隔的xml文件,如果沒有這個參數

MySQL高可用方案MHA的部署原理

進制 說明 only manager 方案 運行 例如 必須 轉移 背後深層次的邏輯: MHA Node則運行在每個mysql節點上,MHA Manager會定時探測集群中的master節點,當master出現故障時,它自動將最新數據的slave提升為master,然後將其

linux命令系列 sudo apt-get updateupgrade的區別

入門linux的同志,剛開始最迫切想知道的,大概一個是中文輸入法,另一個就是怎麼安裝軟體。本文主要講一下LINUX安裝軟體方面的特點。 在windows下安裝軟體,我們只需要有EXE檔案,然後雙擊,下一步直接OK就可以了。但在LINUX下,不是這樣的。每個LINUX的發行版,比如UBUNTU,都會維

各種排列組合的數的公式推導

原貼地址:https://blog.csdn.net/qq_36808030/article/details/75045129?utm_source=blogxgwz0 一、排列(在乎順序) 全排列:P(n,n)=n! n個人都排隊。第一個位置可以選n個,第二位置可以選n-1個,以此類推

http協議改為https協議(免費證書收費證書)

1、免費證書 一、CMD執行以下程式碼: %JAVA_HOME%\bin\keytool -genkey -alias server -keyalg RSA -keystore e:\server.keystore-validity 3650 -alias是指定一個別名,類似於Map的k

Java atomic原子類的使用方法原理

trace over 本地 expec pda 安全性 cpp clas and 在講atomic原子類之前先看一個小例子: public class UseAtomic { public static void main(String[] ar

python selenium-webdriver 元素操作之滑鼠鍵盤事件

參考資料:https://blog.csdn.net/zh175578809/article/details/76767748 參考資料2:https://blog.csdn.net/qq_41817302/article/details/79618654   selenium 提供了比較完整的鍵盤操作,

Android-UI佈局---RecyclerView學習在介面卡自定義長按點選事件

該系列文章  如果想全方面學習,建議參考這個大牛的文章,寫的真可以。 地址:http://blog.csdn.net/lmj623565791/article/details/45059587 因為RecyclerView沒有點選、長按事件,需要自己寫 實現的方式比較多,