在攝影測量和計算機視覺中都需要對含有畸變的影像進行改正操作,常用到的模型是對透視影像改正的brown模型,在很多資料和軟體中都可以看到該模型的畸變改正公式,比如photoscan和context capture中,在很多開源庫中也有該畸變的改正函式,比如opencv和openmvg。雖然可以通過簡單的函式呼叫便可以實現對影像的畸變改正,但是原理部分總會覺得有點不踏實,本文用於梳理brown模型畸變改正的流程。
1、畸變的正向過程
在書中和軟體說明書中為了方便讀者理解畸變的過程,常常表示的是物體透視成像後畸變生成的過程,即從物方三維點座標到影象點。三維點(x,y,z)通過透視成像得到像點座標(x,y),由於鏡頭存在畸變,所以會出現像點座標(x,y)與影象座標(u,v)不一致的情況,這時就需要進行畸變變換才能得到真實的影象座標,(u,v)表示的是發生畸變的真實的影象座標。這樣描述雖然容易理解畸變發生的過程,但是不利於畸變改正過程的理解,畸變改正的過程也不會涉及到物方三維點。
x = x / z
y = y / z
r = x*x + y*y;
x1 = x*(1 +
k1* r +
k2* r*r +
k3* r*r*r) +
p2* (r + 2 * x*x) + 2 *
p1* x*y;
y1 = y*(1 +
k1* r +
k2* r*r +
k3* r*r*r) +
p1* (r + 2 * y*y) + 2 *
p2* x*y; u
= 0.5*
weight
+ cx
+ x1* f;
v= 0.5*
height
+ cy
+ y1* f ;
2、畸變的逆向過程
2.1 以open mvg中的無畸變影像的輸出為例介紹畸變改正
已有的是帶有畸變的影像,座標用(u,v)表示,還需要有自標定得到的相機引數包括主點偏移(cx,cy)、焦距f、畸變引數k1、k2、k3、p1、p2,具體的實現公式如下:
x'=(u-cx)/ f
y'=(v-cy)/ f
r = x' *x'+ y' *y';
x = x' *(1 +
k1* r +
k2* r*r +
k3* r*r*r) +
p2* (r + 2 * x' *x' ) + 2 *
p1* x' *y' ;
y = y' *(1 +
k1* r +
k2* r*r +
k3* r*r*r) +
p1* (r + 2 * y' *y' ) + 2 *
p2* x' *y' ;
u'=x*f +cx;
v'=y*f +cy;
(u',v』)是畸變改正後的座標,經過重取樣過程生成無畸變影像。
2.2 opencv的實現完全按照畸變的反過程進行,計算到了物方點,但其實我們知道在透視變換中x/f=x/w ,y/f=y/w,因此與openmvg中的結果是一樣的。
以此作為自己學習的整理,希望為與我有同樣困惑的同學有啟發作用。
針孔相機模型和相機鏡頭畸變模型
圖1.針孔相機模型 針孔相機模型 如圖1所示 存在四個座標系 世界座標系 攝像機座標系 影象物理座標系和影象畫素座標系。假設現實世界的空間點的世界座標系的座標為pw xw,yw,zw 對應的攝像機座標系座標為pc xc,yc,zc 對應的影象物理座標系的座標為p x y 對應的影象畫素座標系的座標為...
相機內參與畸變模型
相機內參包括相機矩陣引數和畸變係數。相機內參矩陣為3 3的矩陣 m fx 0 ppx 0 fy ppy 0 0 1 畸變係數 k1 k2 k3 p1 p2 使用matlab可以很方便地進行相機內參標定 首先看一下無畸變情況下,已知相機座標系內的乙個點 xc,yc,zc 通過內參矩陣求出該點在影象平面...
相機畸變矯正
影象的幾何畸變是指在影象平面上影象點在幾何位置上的誤差,是因為成像系統不能使影象與實際景物在全視場範圍內嚴格滿足針孔成像模圖型使中心投影射線發生彎曲造成的,畸變主要分為徑向畸變和切向畸變 徑向畸變是指給定影象點從它的理想位置向內或向外移動,主要是由鏡頭表面部分在徑向曲率的變化存在缺陷造成的,影象點負...