账号:
密码:
最新动态
产业快讯
CTIMES / 文章 /
汽车后视摄影机鱼眼影像修正的FPGA弹性架构
高密度FPGA设计应用专栏(4)

【作者: Dave Elliott】2008年12月08日 星期一

浏览人次:【8703】

改善鱼眼影像扭曲

由于鱼眼摄影机具有超广角特性与成本效益,因此越来越广泛应用在汽车的后视影像系统。然而,虽然鱼眼镜头(1)能够提供非常宽广的视野角度,理论上可达整个正前方半球的180°,但因必须将一个半球型的画面投影到一个平面上,也造成影像会产生严重的扭曲变形。在观看鱼眼镜头所拍摄的影像时,这些扭曲变形会造成错觉与混淆。因此,鱼眼镜头所捕捉到的影像若应用在汽车后视摄影机时,在展现给驾驶观看之前应该进行修正,使其接近光线直射时所看到的影像。


当已知基本的摄影机参数时,修正鱼眼扭曲相对来说只是单纯的数学问题,然而,由于修正过程需要进行大量的数学运算,因此无法轻易地以FPGA实现。本文将讨论只要知道基本的摄影机参数,便可在FPGA上执行鱼眼修正的创新架构。


鱼眼扭曲与映射功能

桶状变形现象

鱼眼镜头能够与一般的非鱼眼镜头一样,透过先行透视(直射)映射,并选择以特殊的映射(例如equisolid角度)方式来代替,让影像的特性呈现出凸透镜的效果,以达到极宽广的视野范围(FOV),如图一(左)所示。放射状扭曲的产生原因,是因为鱼眼映射会让影像的放大倍率随着光轴的距离增加而减小,这种现象也称之为「筒状变形」,呈现出的效果便是影像会延着球面进行映射。如此一来,鱼眼影像并无法保留最重要的直射影像特性,因为直射影像会将场景中的直线映射到影像中的直线上。


圆形(半球)与全幅鱼眼影像

鱼眼影像有两种形式:


  • ●圆形(半球)鱼眼影像。这是将图框中整个半球视角投影到一个圆形上来成像;换言之,影像圈会记录在底片或感测器区域之内,将延着垂直与水平方向各有180°的角度,如图一(左)所示。


  • ●全幅鱼眼影像。这是将半球影像以底片或感测器区域为边界来成像,如图一(右)所示。它在对角线上具有180°的视角,水平与垂直面的视角则会比较小。



《图一 鱼眼影像-圆形(左)与全幅(右)示意图》
《图一 鱼眼影像-圆形(左)与全幅(右)示意图》

很明显地,如果采用较小的感测器或底片尺寸拍摄时,圆形鱼眼也可以改成全幅。


鱼眼镜头参数设定

鱼眼镜头的特性由两个基本参数来决定:焦距长度与视野范围,在鱼眼摄影机中,这些参数还会与感测器或底片的尺寸相关,不同的鱼眼镜头的影像扭曲情形并不同,且扭曲的状况是由它们的映射功能所决定。


如果θ代表真实世界中的一个点与光轴之间的角度,此时的影像中心会通过镜头的中心,R则代表影像中的一个点与相对于θ的半径位置,镜头的焦距长度f则为不同的映射功能(2):


  • ●透视投影(一般,非鱼眼镜头):R = f tan(θ)。这是一种很像针孔相机的简易运作模式,是基于一般摄影机的直射无扭曲映射模式,如图二(左)所示。


  • ●线性比例(等距):R = fθ。此时的θ在图二(右)中代表着弧度,这是针对鱼眼镜头的最简单映射功能,且它在鱼眼镜头中可明确地对标示出来,在底片上一个点的半径位置将不同于透视映射,将会偏移到不同的位置上。




《图二 透视投影(左)与线性比例投影(右)示意图 》
《图二 透视投影(左)与线性比例投影(右)示意图 》

相同地,还有其他的鱼眼镜头映射功能:


  • ●Equisolid角度:R = 2 sinθ/2)。这是我们分析过最普遍的映射功能。


  • ●正投影:R = sin(θ)。


  • ●立体投影(一致):R = 2 tan(θ/2)。



演算法描述

找出Rp与Rf之间的相对关系

如上所述,在鱼眼影像中一个点的半径位置(Rf)与在透视影像中的位置(Rp)是不同的,因此,修正扭曲的鱼眼影像的作法,便是找出Rp与Rf之间的相对关系,其中差异可透过解出透视映射与鱼眼映射这两个方程式定义的解答找到答案。由于必须能够解出这些方程式所相关的三角函数运算功能,如果想要在FPGA中实行,将是件困难的工作。


FPGA查找表及像素内插法

因此,开发崭新的模式简化修正被扭曲鱼眼影像的程序便非常重要。要了解Rp与Rf之间的关系,完全决定于摄影机的几何构造,像是焦距长度(f)与视野范围(FOV),这意味着这些参数可以预先进行运算,并以查找表(LUT)的形式加以储存。 FPGA会使用查找表来映射扭曲鱼眼输入影像的像素,然后加以修正后再输出影像。由于这牵涉到次像素的产生,这种模式需要FPGA来执行一些像素形式的内插法,像是9点内插法模式便是一种简单且非常有效率的像素内插法的形式,可产生可接受且无扭曲的影像输出。


查找表的运算

运算公式

透过鱼眼摄影机所捕捉到的输入影像图框会被标示为来源影像,而修正后的输出则为目标影像,来源的鱼眼扭曲影像的修正工作可以被定义如下:针对在目标影像中每个像素的位置,运算出它在来源影像中相对应的像素位置(3)。


让xp与yp成为输出的透视(直射)影像中各自的目标像素的x与y座标,同样地,让xf与yf成为在输入鱼眼影像中的来源像素的座标,然后为鱼眼影像假设出一个equisolid角度映射,让以下的方程式保持为真值:


《公式一 》
《公式一 》

在此的Rp是从透视影像的中心到一个像素的半径位置,且Rf则是从鱼眼影像的中心到一个像素的半径位置,假设影像的中心会相对应到鱼眼镜头的中心,且消去上述三个方程式之间所获得的θ值:


《公式二 》
《公式二 》

在此的 与f是像素的焦距长度,也可以用以下的方程式来进行计算:


《公式三 》
《公式三 》

如此一来,每个目标像素与在鱼眼影像中相对应像素的位置都可以被运算出来,并以查找表的形式加以储存。查找表所需的所有参数都需要预先得知,像是成像装置的特性(包括成像器的视野范围与输入图框的尺寸)与显示系统的特性(包括显示尺寸),由于是针对特定的成像器与显示系统,因此查找表仅需被运算一次,且可进行离线运算。


呈现结果

图三的左边与右边,是图一鱼眼影像的左边与右边相对的修正结果,其各自的效果则如图所示。请注意,想要获得具有延着某些方向的180°视野范围且经过修正的鱼眼影像,其修正后的影像尺寸将会是无限大,当然这是不可能的事。因此目标的视野范围必须强制使其小于180°。在全幅鱼眼影像的状况下,延着水平与垂直方向的来源影像视野范围将会小于180°,如果目标影像的视野范围大于来源的鱼眼影像,则在来源影像视野范围之外的点将会被标示为黑色,这将产生称为「蝴蝶结」效果的特性,如图三(右边)所示,在角落的影像会被拉伸展开,这将可透过确保目标影像的视野范围永远比来源鱼眼影像还要小,避免发生这种现象。


《图三 鱼眼修正影像—圆形(左边)与全幅(右边)》
《图三 鱼眼修正影像—圆形(左边)与全幅(右边)》

9点内插法

避免FPGA实数值查找表问题

查找表可以为每个目标像素的位置提供对应的来源像素的位置。无论如何,来源像素的位置可以是一个实数,需要进行一些像素内插法则来运算目标影像的实际像素值。此外,具有实数值的查找表(需要用浮点数字来表示)将让FPGA在应用上变得较不方便。如果使用9点内插法方案,透过提供简单且有效率的法则来进行像数的内插运算,将可避免在查找表中储存实数,进一步解决了这些问题。


比较其他像素内插法

其他的像素内插法则比较不是那么好用,例如「最近点」内插法是一种在运算上相当简单且快速的方法,但有时也会在某种程度上产生不佳的效果,并可能导致明显的影像瑕疵。而像是双线性内插法这种更复杂的内插法技巧,则会牵涉到浮点运算问题,FPGA并不适合进行有效率地处理,9点内插法方案则属于介于最近点与双线性内插法方案之间的中庸之道,可以涵盖映射查找表的实数值像素到其相邻最近的九个点,如图四所示。


《图四 9点内插法方案示意图》
《图四 9点内插法方案示意图》

9点内插法模式简介

在这种模式下,所有虚拟像素的明暗值,是从邻近的真实像素取其明暗度的平均值所计算得来。举例来说,像素(x, y+0.5)的色彩明暗度是实际像素(x, y)与(x, y+1)的色彩明暗度的平均值,(x+0.5, y+0.5)的明暗度值则是真实像素(x, y)、(x+1, y)、(x, y+1)与(x+1, y+1)的明暗度平均值。


这种技巧的主要优势在于可以克服先前所讨论的其他两种模式所产生的问题,可以简化运算又不需要大幅地牺牲修正影像的品质。这是因为其只需运算两个或四个像素的平均值,当除以二时,可以透过将数字的总和「右移」一个位元的方式来实现;当除以四时,则可以透过将总和右移两个位元来实现,这种排序式的运算对FPGA来说相当简单。


9点内插法方案并不需要查找表储存任何实数值的像素点位置,它可以直接储存真实或者虚拟像素的位置,来映射出像数的实数值,因此可以轻易地用固点运算的表现方式来达成。


设计实行硬体架构

FPGA产品结合软式核心嵌入式处理器

利用FPGA产品系列元件与软式核心嵌入式处理器,便可实行鱼眼影像修正的功能。软式核心嵌入式处理器架构是一种RISC软式核心架构,能够整个在FPGA的可编程逻辑与记忆体模组下实行,并能够处理像是从DSP到系统控制等广泛多样的嵌入式运算应用。处理器的软式核心在本质上便可让系统设计师指定与产生出客制化的核心,为特定的应用需求来量身订制,相关嵌入式评估套件(NEEK)可以用来做为开发平台。


如图五所示,其硬体架构包含以下模组:软式核心嵌入式处理器、一个视讯输入模组、一个I2C设置模组、一个DDR-SDRAM控制器与一个LCD控制器。



《图五 软式核心嵌入式处理器硬件架构示意图》
《图五 软式核心嵌入式处理器硬件架构示意图》

视讯输入模组

视讯输入模组式是针对相容于ITU-R BT.656数位视讯标准所设计,负责处理色彩空间转换(CSC)、影像裁切、解交错讯号、比例缩放与24位元RGB打包,每个操作都会依序地执行,如图六所示,且均可透过处理器的暂存器控制来加以参数化。此外,视讯输入也可以针对想要的输出格式来进行影像裁切与缩放(上或下)。暂存器可以让系统能够客制化为多种的显示解析度与像是NTSC、PAL或SECAM等输入的视讯格式,来自模组的视讯资料则可以透过直接记忆体存取(DMA)通道来转换到外部的SDRAM图框缓冲区。


《图六 视讯输入模块处理流程图》
《图六 视讯输入模块处理流程图》

视讯输入设置模组

I2C设置模组是用于在想要的格式下来的IC视讯解码器(4)、(5),可提供以8位元的ITU-R BT.656 YCrCb 4:2:2数位视讯标准来输出。


LCD控制器

LCD控制器用于scatter-gather演算法,以达到更快速的资料转换,不需要担心由于要让处理器来承担工作,导致其成为限制因素。如图七所示,LCD SGDMA从外部SDRAM图框缓冲区取得资料,然后将资料送到FIFO以用于实行双埠RAM,以便搭配LCD周边来调整资料速率。像素转换器与资料格式转换器会依据LCD显示系统的规格来修改资料,视讯同步产生器则是用来取得格式化的资料,以产生适当的时钟讯号,并将资料送到显示器。


《图七 LCD控制器处理流程图》
《图七 LCD控制器处理流程图》

记忆体需求与管理

从摄影机将会获得连续性的资料输入,并需要将之最佳化传输量,以便进行快速的即时性处理。当需要进行储存与恢复影像,以及在鱼眼影像修正进行必须的额外资料处理工作时,有效率的记忆体管理将变得非常关键,在NEEK中的架构会利用可用的记忆体资源来执行以下的用途:


输入图框缓冲区

这是在快速SS RAM上实行,从视讯解码器IC的输入中采用一种16位元的交错式RGB565格式,其中每个像素需要占用2位元组。当输入摄影机的解析度是656×492像素时,在保留单一输入图框时所需的记忆体需求量为:


  • ●输入影像宽度×输入影像高度×每个像素所需的位元组=652×492×2位元组=630.375 Kbytes



输出图框缓冲区

这也是在SDRAM上实行,缓冲区的大小是依据显示器的解析度而定,以NEEK显示萤幕解析度为800×480像素为例,其输出格式也是RGB565,其保留给输出图框的记忆体需求量为:


  • ●输出影像宽度×输出影像高度×每个像素所需的位元组=800×480×3位元组=1125 Kbytes



储存与读取静态查找表

在电源开启之后,每次影像进行修正之时,必须从已知的摄影机与显示器参数在外部产生查找表,因此,它必须存在于NEEK之中。由于RAM无法用于永久性的储存静态查找表,因此必须使用非挥发性的CFI快闪记忆体,但由于快闪记忆体有较高的存取时间,因此查找表必须复制到RAM模组中,以便达到想要的运算速度。


储存查找表注意事项

为了得到每个目标影像的像素,查找表包含来源影像的像素座标(透过使用9点内插法获得),依据映射的来源像素各自是真实的还是虚拟的像素,以此来用整数值或以0.5为单位的十进位值来代表。换言之,查找表的数值可以是x或(x+0.5)(如果x代表任何整数值),或是y或(y+0.5)(如果y代表任何整数值)。


无论如何,我们在储存查找表时要符合以下两个要求:


  • ●当在描述查找表时,我们想要避免储存与运算浮点数值。


  • ●当取得的影像是交错式格式时,将同时并存偶数与奇数栏位,为了拥有最快的速度,我们不想要在处理影像输入时,还要进行解交错处理。



查找表纪录值资料显示形式

最后一个需求可以透过当在产生查找表与执行期间,运算出正确的偏移值来达成,因此任何一个在交错式输入影像中已映射(实际的)原始像素都可以被直接对应到。想要满足前一个需求,需要注意9点内插像素x与y座标的整数部分,将必须一直对应到一个实际的原始影像像素。如此一来,每个查找表的纪录值便可以使用以下的32位元资料形式来表示:


  • ●前29个最重要的表示位元是用来对交错式原始影像的9点内插像素的x与y座标之整数部分进行编码;


  • ●第三个较次要的表示位元代表着坐落在偶数栏位(位元值为0)或奇数栏位(位元值为1)中的像素位置;


  • ●第二个较次要的表示位元代表着x座标是一个整数值(位元值为0)或是浮点值(位元值为1);


  • ●最后一个的表示位元代表着y座标是一个整数值(位元值为0)或是浮点值(位元值为1)。



比起当我们在CFI快闪记忆体中用浮点值来储存时,这种方法在储存查找表时显得更有效率。


查找表的大小将依据输出图框的大小而定,每个输出像素在查找表中需要4位元组(32位元)的储存空间,因此用于储存查找表所需保留的记忆体需求量为:


  • ●影像输出宽度×影像输出高度×每个查找表资料所需的位元组=800×480×4位元组=1500 Kbytes



所有的这些记忆体功能将会使用控制讯号来执行,从CPU传送到SDR控制器,SDR控制器连接到SDRAM晶片,并处理所有​​的SDRAM通讯协定需求。


产生输出图框

从查找表中一次会读出两个数值,代表着输出图框的每个x与y座标,查找表透过输出图框来建立索引,它的值是输入图框的像素位置,它们的明暗度必须指派到或用于运算出输出图框对应像素的明暗度,我们首先透过检查它的最后一个代表位元(LSB)与第二个代表位元,来判断查找表纪录值是相对应到实际的或虚拟的像素:高值代表着这是一个实际的像素,低值则代表其是虚拟的像素。然后透过采用9点内插法的技巧,用直接指派(此时是一个实际像素)或采取平均值(此时是一个虚拟像素)的方式,RGB565明暗度会指派到输出图框的像素上,以决定输出像素的明暗度。以下的范例程式便是用来描述这种方法:




  • DETERMINE(决定)查找表的记忆体大小:显示的宽度×显示的高度×4位元组


  • ASSIGN(指派)在DRAM中静态查找表的记忆体大小


  • OPEN(开启)快闪记忆体元件


  • 从快闪记忆体复制静态查找表到SDRAM


  • CLOSE(关闭)快闪记忆体元件


  • COMPUTING THE OUTPUT FRAME(运算输出图框)


  • FOR(针对)输出影像的每一行


  • FOR(针对)输出影像的每一列


  • OBTAIN(取得)在静态查找表中像素位置的值(向右平移查找表3位元)


  • IF如果)像素位置是 INVALID THEN(无效的,然后)


  • ASSIGN(指派)像素为 BLACK(黑色)


  • ELSE(否则)


  • IF(如果)像素位置表示为 REAL(实际)像素 THEN(然后)


  • ASSIGN(指派)其相对应的输出像素的明暗值给输出像素


  • ELSE IF(否则如果)像素位置表示为FICTITIOUS(虚拟)像素THEN(然后)


  • COMPUTE(运算)依据栏位是偶数或奇数来求出最接近实际输入像素的平均明暗度


  • ASSIGN(指派)输出像素的数值


  • ENDIF


  • ENDIF


  • ENDFOR


  • ENDFOR


  • DISPLAYING THE FRAME(显示图框)


  • ASSIGN(指派)所运算出的输出图框做为萤幕缓冲区



结论

使用FPGA与软式核心嵌入式处理器技术的崭新架构,能够在广角摄影机中进行鱼眼影像修正。这种架构具有灵活性、可调整性,并能够有效率地使用FPGA的资源,因为架构中所使用的处理器足够处理额外的嵌入式处理器功能,这种技术非常适合像是汽车后视摄影机与其他有使用广角摄影机的应用。


(作者为Altera资深车用电子部门行销经理)


<参考资料:


1、「鱼眼镜头」,维基百科:


http://en.wikipedia.org/wiki/Fisheye_lens


2、在电脑绘图中的变形与投影,David Salomon,Springer,2006年。


3、Nios II处理器参考手册:


www.altera.com/literature/lit-nio2.jsp


4、Nios II嵌入式评估套件,CycloneR III版本,使用手册:


www.altera.com/literature/ug/niosii_eval_user_guide.pdf


5、Nios II快闪记忆体编程器使用手册:


www.altera.com/literature/ug/ug_nios2_flash_programmer.pdf>


相关文章
专攻低功耗工业4.0应用 可程式化安全功能添防御
以设计师为中心的除错解决方案可缩短验证时间
移动演算法 而非巨量资料
最大限度精减电源设计中输出电容的数量和尺寸
Nexus技术平台:重新定义低功耗、小尺寸FPGA
comments powered by Disqus
相关讨论
  相关新闻
» 意法半导体突破20奈米技术屏障 提升新一代微控制器成本竞争力
» Pure Storage携手NVIDIA加快企业AI导入 以满足日益成长的需求
» ROHM推SOT23封装小型节能DC-DC转换器IC 助电源小型化
» 意法半导体先进高性能无线微控制器 符合将推出的网路安全保护法规
» ST推先进超低功耗STM32微控制器 布局工业、医疗、智慧量表和消费电子市场


刊登廣告 新聞信箱 读者信箱 著作權聲明 隱私權聲明 本站介紹

Copyright ©1999-2024 远播信息股份有限公司版权所有 Powered by O3  v3.20.1.HK83T4PWPT0STACUKW
地址:台北数位产业园区(digiBlock Taipei) 103台北市大同区承德路三段287-2号A栋204室
电话 (02)2585-5526 #0 转接至总机 /  E-Mail: webmaster@ctimes.com.tw