鱼眼校正c语言算法,一种鱼眼图像逆向经纬映射的快速校正算法

1. 引言

鱼眼镜头因其焦距短,视场大,拍摄图像信息量大等优点,在安防监控、360度汽车成像仪等领域中得到广泛应用。但鱼眼镜头在获得大视场的同时,会产生严重的图像畸变问题 [1] [2] 。通过鱼眼镜头成像得到的畸变图像,从图像中心向四周边界的变形越来越严重,是一种视觉上无法接受且后续无法直接应用的非线性畸变图像。

为满足鱼眼镜头图像视觉效果及后续处理的需求,国内外大量学者针对鱼眼图像畸变的校正方法进行了深入研究,取得了有意义的研究成果。目前鱼眼图像畸变校正常用的两种方法是基于投影变换模型的校正方法 [3] ,以及基于标定的校正方法 [4] [5] ,基于投影变换模型的校正方法需要进行迭代优化,计算量大,耗时长。基于标定的校正方法精确度高,但需要精确的标定设备,针对每一个特定的镜头,需要重新进行标定,针对无法获取相机镜头参数的图像会遇到问题。另外有些学者提出了一些不需要进行标定、运算简单的畸变校正方法,如杨玲等 [6] 提出一种基于经纬映射的鱼眼图像校正方法,该方法不需要任何标定数据,可以快速纠正等角鱼眼变形。杨梦宁 [7] 、魏利胜 [8] 和刘亿静 [9] 等在经纬法校正的基础上进行了改进,都取得了一定的畸变校正效果,但上述这些方法都只注重对鱼眼图像校正效果的研究,没有考虑算法的快速性和实时性问题。

由于鱼眼校正的运算量较大,目前很多方法虽然能够实现较好的校正效果,但是校正速度较慢,无法满足实时性需求。因此本文在上述经纬映射鱼眼图像校正方法基础上,提出了一种基于模板矩阵的鱼眼镜头畸变图像快速校正方法,以图像中心点为分隔原点,将整个图像区域分为上下左右四个像素区域,对目标图像上的其中一个像素区域上的每一个坐标点,通过逆向经纬映射方法,找到其在待校正鱼眼图像上对应点的坐标,并将该对应点坐标值保存在一个坐标模板矩阵中。对目标图像中剩下三个区域上的像素坐标点,只需建立其与第一个像素区域上坐标点之间的对应关系,就可直接从坐标模板矩阵中得到待校正鱼眼图像中对应点坐标,大大节省了计算量,提高了校正速度,完全满足鱼眼图像校正的实时要求。

2. 鱼眼图像的正向经纬映射校正计算

一般情况下,鱼眼图像的经纬映射校正算法的基本步骤为 [10] :将需要校正的鱼眼畸变图像定为源图像,规定校正后的图像为目标图像。首先计算图像平面中源图像的半径R,将鱼眼图像像素坐标

(

x

,

y

) 一一映射到半径为R的球面坐标

(

x

,

y

,

z

) ,计算球面坐标点

(

x

,

y

,

z

) 在球面上的经纬度坐标

(

λ

,

ϕ

) ,再由经纬坐标在

[

0

,

π

] 上展开,得到校正后的目标图像

(

u

,

v

) ,校正过程如图1所示。

3. 鱼眼图像逆向经纬映射校正方法

采用从源图像到目标图像的映射变换,会导致目标图上有大量的坐标像素点没有值。因此本文采用逆向映射的坐标计算方法,从目标图像出发,对每一个目标图像的坐标点,反向计算其在源图像上对应点的坐标 [6] [9] [11] [12] [13] (图2)。

ac90b96a69b31fa6e0014db664462594.png(a)

51503e5799bb60dae53c28168a82a9d8.png(b)

c2e5eb519a62abce87f66f61d12d1a4c.png(c)

55aa7fc5e713e190ecf276d9b21879dd.png(d)

Figure 1. The chart of forward longitude and latitude correction for fish-eye image. (a) Coordinate of fish-eye image; (b) Coordinate of 3D spherical surface; (c) Coordinate of longitude and latitude; (d) Coordinate of corrected image

图1. 鱼眼图像正向经纬映射校正示意图。(a) 鱼眼图像坐标系;(b) 三维球面坐标系;(c) 经纬坐标系;(d) 校正图像坐标系

00b771a6c5dcc2d7ca1d85d9b152f510.png

Figure 2. The chart of inverse longitude and latitude projection transformation

图2. 逆向经纬映射变换示意图

鱼眼图像I的图像半径为R,中心点坐标为

(

x

0

,

y

0

) ,鱼眼图像上任一点

(

x

,

y

) 到中心的距离为

r

e 。鱼眼图像对应的目标图像为D,中心点坐标为

(

u

0

,

v

0

) ,目标图像上任一点

(

u

,

v

) 到中心的距离用

r

d 表示。以图像中心点为坐标原点,对应点坐标可分别写成下式:

鱼眼图像I:

x

=

x

x

0

,

y

=

y

y

0 ;

r

e

=

(

x

)

2

+

(

y

)

2

=

(

x

x

0

)

2

+

(

y

y

0

)

2

目标图像D:

u

=

u

u

0

,

v

=

v

v

0 ;

r

d

=

(

u

)

2

+

(

v

)

2

=

(

u

u

0

)

2

+

(

v

v

0

)

2

从目标图像开始,对每一个坐标点

(

u

,

v

) ,根据逆向经纬映射,找到每一个当前点

(

u

,

v

) 在鱼眼图像上对应的坐标点及对应数据值,计算得到目标图像上当前点的数据值

D

(

u

,

v

) 。目标图像D上任一坐标点

C

(

u

,

v

) ,与其在球面上对应经纬坐标点

C

(

λ

,

ϕ

) 的关系式为:

λ

=

k

u

′ ,

ϕ

=

k

v

′ ,其中

k

=

π

/

2

R (1)

根据经纬坐标点

C

(

λ

,

ϕ

) ,以及视球面半径R和视球面球心O,可求出其在视球面上对应点

B

(

x

,

y

,

z

) 的三维坐标:

{

x

=

R

cos

ϕ

sin

λ

y

=

R

sin

ϕ

z

=

R

cos

ϕ

cos

λ (2)

通过视球面上点

B

(

x

,

y

,

z

) 的三维坐标,可以计算得出经过B点和球心的入射光线OB与Z轴的夹角

θ :

θ

=

arccos

(

z

/

R

)

=

arccos

(

cos

ϕ

cos

λ

) (3)

本文中,采用等距投影模型来计算视球面上的点与鱼眼图像上对应点的坐标投影关系。由等距投影函数 [14] [15] ,鱼眼图像上像素点

(

x

,

y

) 到中心点的距离为

r

e

=

f

θ ,目标图像中像素点到中心点的距离

满足

tan

θ

=

r

d

f 。由此可计算得到:

r

e

=

f

tan

1

(

r

d

f

) (4)

鱼眼图像上点

(

x

,

y

) 到中心的连线与x轴的夹角为

α ,由此可导出鱼眼图像上与目标图像对应点的坐标为:

{

α

=

arctan

(

y

x

)

=

arctan

(

sin

ϕ

cos

ϕ

sin

λ

)

x

=

r

e

cos

α

y

=

r

e

sin

α (5)

最后由所找到的鱼眼图像上的对应点

A

(

x

,

y

) ,通过插值计算得到目标图像当前点处的数据值。对目标图像中的每一个坐标点

(

u

,

v

) ,通过上述公式(1)~(5),找到其在源图像中的对应坐标点

(

x

,

y

) ,利用双线性插值方法计算得到

(

u

,

v

) 点的强度值,即可得到校正后的图像。

4. 基于模板矩阵的逆向经纬映射快速计算方法

对目标图像中的每一个坐标点,利用公式(1)~(5)并经过插值计算得到该点的强度数据值,计算量是非常大的。在此本文提出了一种基于模板矩阵的鱼眼镜头畸变图像快速校正方法,将目标图像以图像中心点作为分隔中心,平均分为上下左右四个像素区域,如图3。对校正后的目标图像上的其中一个区域上的每一个坐标点,通过逆向经纬映射方法,找到其在待校正鱼眼图像上对应点的坐标,并将该对应点坐标值保存在一个坐标的模板矩阵中。对目标图像中剩下三个区域上的像素坐标点,只需建立其与第一个区域上坐标点之间的对应关系,就可直接从坐标模板矩阵中得到待校正鱼眼图像中对应点坐标。具体步骤为:

1) 分别以鱼眼图像和目标图像的中心点为原点,各自建立坐标系,如图3所示。以原点为中心,分别将两个图像区域分为四个象限①,②,③和④,两个图像上的四个部分分别对应。

2) 目标图像上第一象限上一点

(

u

,

v

) 经过公式(1)~(5),反向映射得到

(

x

,

y

)

{

x

=

F

1

(

G

1

(

u

,

v

)

)

y

=

F

1

(

G

1

(

u

,

v

)

) (6)

3) 根据目标图像第一象限上所有点,计算得到鱼眼图像上对应点的横纵坐标,并存储于模板矩阵[XX, YY]中:

X

X

(

u

,

v

)

=

x

Y

Y

(

u

,

v

)

=

y

′ (7)

4) 根据第①区域坐标点与②,③和④坐标点的对应关系,目标图像上其它三个像素区域坐标点可通过它们对应的符号关系,直接在模板矩阵[XX、YY]通过正确的符号变换,找到与目标图像上坐标点对应的鱼眼图像坐标点,符号变化式如下:

{

x

=

s

i

g

n

(

u

)

X

X

(

|

u

|

,

|

v

|

)

y

=

s

i

g

n

(

v

)

Y

Y

(

|

u

|

,

|

v

|

) (8)

5) 经过上述三步,即可快速完成对鱼眼图像坐标点的选取。

本文利用模板矩阵将校正程序中大量运算部分变为读取坐标的模板矩阵数据,减小了运算量,显著降低了运算时间。

5. 实验结果与分析

分别利用正向经纬映射校正法,逆向经纬校正法和我们提出的基于模板矩阵的逆向经纬映射法对这些鱼眼图像进行了校正处理,部分图像处理结果如图4,图5和图6所示。

从图中可以看出,我们的方法校正效果与逆向经纬方法校正效果一样,就是运行速度更快。由于正向映射与逆向映射插值不同,逆向映射校正效果要比正向映射校正视觉效果好些。唯一的不足之处,就是因为经纬映射自身的原因,在经度上的校正效果要好于纬度上的校正效果,这也是后续我们算法需要继续研究的。如图4至图6中,在鱼眼图中,竖立方向弯曲的柱子和房子,在结果图中都得到了很好的校正,但横向上弯曲的杆及砖块等,在结果图中却变得更加弯曲。

表1中的数据为针对300 × 300,60 × 640及1080 × 1080三种不同分辨率大小的鱼眼图像,分别采用三种方法进行校正处理所用的时间,单位为毫秒。从中可以看出,对于相同分辨率大小的鱼眼图像,我们的快速算法比正向经纬映射校正和逆向经纬校正映射方法处理的时间少很多,假定正向经纬映射校正处理时间为O(N),则我们算法的时间只有O(N/2)。且随着鱼眼图像分辨率的增大,这几种方法在时间上的差异也相同。实验结果证明,采用我们的快速算法,对于大小为300 × 300的鱼眼图像处理时间只需要0.01 s,视频图像处理帧率可达100帧/秒,即使是百万像素级大小的图像也能达到处理帧率为20帧/秒,因此本文提出的快速算法可以满足视频图像校正处理的实时需求。

436a1b104861a32305a2c0848e862a85.png(a)

4db2788cb3fc73b4c61933f53bd228a0.png(b)

Figure 3. The chart for area partition of fish-eye image and object image. (a) Pixel area partition of fish-eye image; (b) Pixel area partition of object image

图3. 鱼眼图像和目标图像区域划分示意图。(a) 鱼眼图像像素区域划分;(b) 目标眼图像像素区域划分

ebb5ceb820cd5d654eefb2581cf29594.png (a)

a54e2f9cd1a6f5d7db511056e2c91a96.png(b)

1b08d2009b74ade80a16b01bb0e41ebe.png(c)

cf9392e64c36917267975da959104130.png(d)

Figure 4. Correction results of 300 × 300 fish-eye image. (a) Fish-eye image; (b) Result of forward latitude-longitude correction; (c) Result of inverse latitude-longitude correction; (d) Result of the proposed method

图4. 300 × 300鱼眼图像及校正结果。(a) 鱼眼图像;(b) 正向经纬校正结果;(c) 逆向经纬校正结果;(d) 我们方法校正结果

7066c990a3ba0ab78cb55a8446cf9a54.png (a)

899d0aa27271430c544be3c3b9b41cf8.png(b)

8fc17995d34ee8fc0f4ae5b10ba1da6e.png (c)

cc1950a125a00ad2b36f161fd4022e56.png(d)

Figure 5. Correction results of 640 × 640 fish-eye image. (a) Fish-eye image; (b) Result of forward latitude-longitude correction; (c) Result of inverse latitude-longitude correction; (d) Result of the proposed method

图5. 640 × 640鱼眼图像及校正结果。(a) 鱼眼图像;(b) 正向经纬校正结果;(c) 逆向经纬校正结果;(d) 我们方法校正结果

44ff6901df27d6c3ba0a51ed127d4f25.png

Table 1. The correction time of three different methods (ms)

表1. 三种不同校正算法所用时间(ms)

0d965ed9a62b9da631328bf95e00690f.png(a)

e02f2c4f989576de3f35d1cf478a5e21.png (b)

d62a5c2760ec4ccdddd35fc099f92ebe.png (c)

dfa74c968fcb43baa1c64a17a40f78de.png(d)

Figure 6. Correction results of 1080 × 1080 fish-eye image. (a) Fish-eye image; (b) Result of forward latitude-longitude correction; (c) Result of inverse latitude-longitude correction; (d) Result of the proposed method

图6. 1080 × 1080鱼眼图像及校正结果。(a) 鱼眼图像;(b) 正向经纬校正结果;(c) 逆向经纬校正结果;(d) 我们方法校正结果

6. 结论

针对鱼眼图像校正的实时性问题,本文提出了一种基于模板矩阵,采用逆向经纬映射进行鱼眼畸变图像的快速校正方法。分别将源图像和目标图像分成四个对称区域,只需计算其中一个区域上两幅图像之间的经纬映射值,其它三个区域的经纬映射值都可以根据其与第一区域之间的坐标关系来得到,节省了大量数据的计算时间。对不同相机拍摄的各种不同分辨率鱼眼图像进行处理,实验结果表明本文提出的校正方法耗时少,速度快,具有较强的实用性。

基金项目

国家自然科学基金(61305039),国家自然科学基金重点项目(61433007)资助项目。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值