发明内容
本发明的目的是提供一种基于SOPC的全方位视觉系统,解决了现有全方位视觉系统构建方法无法在小型嵌入式设备中同时实现全方位视觉图像实时采集、畸变校正、存储、显示的问题。
本发明是基于Nios II/SOPC的全方位视觉系统,通过如下方案实现全方位视觉系统的功能:
一种基于SOPC的全方位视觉系统,包括:鱼眼镜头、CMOS图像传感器、SOPC、Nor Flash、SDRAM、和显示器,
所述鱼眼镜头和图像传感器组成摄像头模组,并将摄像头模组的图像数据输出引脚与SOPC中图像采集相应功能引脚相连,Nor Flash与SOPC中的Flash控制引脚相连,SDRAM与SOPC中SDRAM控制引脚相连,显示器与SOPC中图像输出相应功能引脚相连;
所述SOPC是由Nios II处理器、Avalon总线、图像采集模块、畸变校正模块、LCD控制器、各种存储设备控制器以及I/O外设整合到一起,成为一个独立、可编程的全方位视觉系统芯片,形成最终的SOPC。
选择合适的鱼眼镜头和CMOS图像传感器组成摄像头模组,通过该模组获取大于半球视场(360°x180°)的全方位视觉图像信息,这种构造方法使得全方位视觉系统的体积小、成本低。
通过显示器预览全方位视觉图像,具有简单便捷的人机交互接口。
将Nios II处理器、Avalon总线、存储设备控制器及I/O外设整合到一块FPGA芯片中,成为一个独立、可编程的全方位视觉系统芯片,形成最终的SOPC系统,使得系统集成度很高,功能可扩展性很强。
创建基于Nios II的SOPC系统,包括如下步骤:
a)通过SOPC Builder开发工具选择和配置Nios II CPU、JTAG调试单元、SDRAM控制器、Nor Flash控制器、SD卡控制器、时钟管理单元、串口控制器、定时器;
b)设计自定义IP核,集成了I2C配置模块、图像采集模块,畸变校正模块、LCD控制器、专用DMA通道、异步FIFO、寄存器组,该IP核实现全方位视觉图像的实时采集、畸变校正和显示功能;
c)通过SOPC Builder工具自动生成Avalon总线互连逻辑,组织和连接各个模块,形成一个完整的可编程片上系统(SOPC)。
设计系统软件程序和各个模块的驱动程序,通过软件控制系统功能的运行。
采用软硬协同设计方法对通过鱼眼镜头获取的全方位视觉图像进行实时畸变校正处理,系统首次启动,通过软件运行坐标变换算法生成鱼眼图像畸变地址映射表,并将畸变地址映射表存入Nor Flash,系统再次启动,则直接从Nor Flash中读取畸变地址映射表到内存SDRAM中,然后配置自定义的IP核的寄存器,将映射表的存储地址传给自定义IP核中的畸变校正模块,由畸变校正模块依次完成整幅图像的畸变校正,大大提高了全方位视觉图像畸变校正的实时性。
本系统是由Nor Flash存储SOPC系统的配置信息、系统运行程序及畸变地址映射表,每当系统通电,配置信息会初始化FPGA,在FPGA中实现Nios II系统,然后从Nor Flash调入程序到SDRAM中运行,在软件初始化时从Nor Flash中读取畸变地址映射表到SDRAM中。
全方位视觉系统还包括控制SOPC系统运行相应功能的按键,按键与SOPC中的按键端口引脚相连。还包括用于存储拍摄的全方位视觉图像文件的SD卡,所述SD卡与SOPC中的SD卡控制引脚相连,在系统运行时通过SD卡存储图像文件。
与现有技术相比,本发明解决了现有全方位视觉系统构建方法无法在小型嵌入式设备中实现全方位视觉图像实时采集、校正、显示的问题。具有体积小、成本低、功能可扩展性强的优点。
具体实施方式
图1为本发明基于SOPC技术的全方位视觉系统的总体框图,它的构成包括:鱼眼镜头1、CMOS图像传感器2、SOPC系统3、Nor Flash4、SDRAM5、SD卡6、按键7、LCD显示器8,系统的具体实现方法如下:
1.系统整体架构实现:鱼眼镜头1和CMOS图像传感器2组成摄像头模组,通过该模组获取大于半球视场(360°x180°)的全方位视觉图像信息,并以一定时序将图像数据输出到SOPC系统3;SOPC系统采集全方位视觉畸变图像,并进行实时畸变校正,然后将原畸变图像数据或校正后的图像数据以一定时序输出,通过LCD显示器8进行预览显示;NorFlash4与SOPC系统3中的CFI Flash控制引脚相连,用来存储SOPC系统的配置信息、系统软件程序以及畸变地址映射表;SDRAM5与SOPC系统3中SDRAM控制引脚相连,作为SOPC系统3的内存单元;SD卡6与SOPC系统3中的SD卡控制引脚相连,存储拍摄的全方位视觉图像文件;按键7与SOPC系统3中的按键端口引脚相连,可以控制SOPC系统运行相应功能。
2.鱼眼畸变图像校正方法实现:系统中的全方位视觉图像是通过鱼眼镜头获取的,存在严重的畸变,因此需要对鱼眼畸变图像进行实时的校正处理,畸变校正流程如图2所示,图像中的每一个像素点信息均存储在内存中一个指点的地址单元中,也即对应一个坐标,假设畸变校正后像素的存储偏移地址为iAddr,通过地址变换计算出该点在畸变图像中对应的偏移地址为oAddr,然后将oAddr对应的像素信息存储到iAddr指向的存储单元中,完成像素映射的过程。依次将图像中的每个像素点都作同样的处理,即可完成整幅图像的畸变校正。具体的实现步骤如下:
1)获得三维空间点坐标:iAddr表示畸变校正后任一点的像素偏移地址,它们对应的虚拟空间坐标为(xa,ya,za)。xa,ya是iAddr对应的二维坐标值,由下面的公式得到,za是鱼眼镜头的标定参数。
其中每个像素点占4个字节,[]代表取整,w代表图像宽度。
2)坐标变换:坐标变换是鱼眼图像畸变校正的核心算法,由如下步骤完成:
2.1)建立四阶多项式模型,如公式(2)所示:
r=b4θ4+b3θ3+b2θ2+b1θ+b0 (2)
式(2)中的θ代表入射角,由公式(3)得到,r代表校正后像素点离畸变中心的距离,[b4,b3,b2,b1,b0]是多项式的系数参数,由鱼眼镜头参数标定获得。
2.2)由下面公式计算得出校正后的像素点的理想坐标:
2.3)通过仿射变换,获得真实图像坐标。由于系统采集和显示图像的分辨率均是640*480,因此需要进行仿射变换对原图像进行延伸,获得真实图像坐标,由下面公式所得:
式中的(xo,yo)代表畸变图像中心点坐标,[c,d,e]为仿射参数。
2.4)对上一步计算出来的值为小数的坐标进行插值。系统采用最近邻插值,对于二维平面,即取待测样点周围4个相邻像素点中距离最近1个相邻点的值作为待测样点的像素值。如下式所示:
3)通过插值后的坐标值得到校正后的像素点在原畸变图像中对应的偏移地址,计算公式如下所示:
oAddr=y*w+x (7)
4)像素映射:系统采取的后向映射,即通过输入畸变校正后的像素偏移地址iAddr,计算得出该点在畸变图像中对应的偏移地址oAddr。读取oAddr所指向的像素点数据并将该像素点的值存入iAddr所指向的单元,完成像素点的信息。
5)采用软硬协同校正充分保障全方位视觉畸变图像校正的实时性,如图2所示,将畸变校正流程分为地址变换和像素映射两个部分,地址变换的实质是坐标变换。对于同一类型的鱼眼镜头,其输出与输入的对应关系是一致的,即地址变换的输出是一样的,因此此部分实时性要求不高,且算法比较复杂,故将此部分由软件完成,使用软件先计算出校正后图像的所有像素点在原畸变图像中对应的偏移地址,并将它们全部存储在像素畸变地址变换表中,并通过配置硬件模块寄存器将映射表首地址传给硬件模块,但由于软件运算速度很慢,故将系统首次启动生成的畸变地址映射表存入Nor Flash中,再次启动时则只需要从Nor Flash中读取映射表即可,使获取映射表的速度大大提高;校正后的图像随着输入的畸变图像的变化而实时变化,因此像素映射部分实时性要求很高,且算法比较简单,将此部分用硬件实现,以提高图像校正速率,保障畸变图像校正的实时性。具体的实现步骤如下:
5.1)通过软件从Nor Flash中读取畸变地址映射表备份标记,并判断标记的值;
5.2)如果备份标记的值不等于1,则说明Nor Flash中未备份鱼眼图像畸变地址映射表,则通过软件进行畸变地址变换运算生成畸变地址映射表,然后置位备份标记,并将畸变地址映射表和备份标记写入NorFlash,接着转到步骤5.4;
5.3)如果备份标记的值等于1,则说明Nor Flash4中已经备份鱼眼图像畸变地址映射表,则直接从Nor Flash4中读取畸变地址映射表;
5.4)配置硬件畸变校正模块的寄存器,设置原始全方位视觉图像的存储地址,校正后图像的存储地址以及畸变址址映射表的存储地址;
5.5)启动硬件畸变校正功能,硬件畸变校正模块根据畸变地址映射表的对应关系依次完成整幅图像的校正。
3.SOPC系统实现:基于Nios II软核处理器SOPC系统是整个系统的控制运算单元,负责全方位视觉图像的采集处理、人机交互等系统的核心功能,整个SOPC系统的架构如图3所示,创建SOPC系统的实现步骤如下:
(1)通过SOPC Builder开发工具选择和配置Nios II CPU、JTAG调试单元、定时器、SDRAM控制器、Nor Flash控制器、SD卡控制器、时钟管理单元、GPIO端口,并由SOPC Builder自动生成总线互连逻辑连接这些模块,Nios II处理器与Avalon总线的工作频率均为100Mhz。
(2)使用硬件描述语言Verilog HDL设计自定义IP核,集成了如下子功能模块:图像采集模块,畸变校正模块、LCD控制器、专用DMA通道、功能状态机、寄存器组,该IP核实现全方位视觉图像的实时采集、畸变校正和显示功能,图4为自定义IP核的结构框图,该IP核的各个模块的实现如下:
(2.1)图像采集模块:负责通过I2C总线模块配置摄像头参数和工作方式,根据图像传感器的输出时序,采集并整合图像信息,然后将其存入图像输入FIFO,各子模块的描述如下:
(2.1.1)I2C配置模块:通过I2C总线方式对摄像头模块进行配置,包括分辨率、帧频、白平衡、曝光补偿、数据输出格式等;
(2.1.2)图像捕获与整合模块:图像捕获模块关键设计如图5所示,依据PCLK,行场同步行号LVAL与FVAL,进行图像数据采样,输出有效段信号DVAL,并为后级提供坐标计数值X_CNT,Y_CNT。图像传感器的像素输出格式如图6所示,每个像素点的RGB分量信息被分布在上下两行里。图像数据整合模块就是负责将它们整合成表1所示的RGB数据格式,图像整合模块设计图如图7所示,其中ALTSHIFT_TAPS是Altera公司提供的移位寄存器IP核,通过它可以将原始数据分别延迟一行和两行输出,然后再通过两个寄存器分别将输出Tap0,Tap1再延迟一个PCLK输出,则可以使R、G1、G2、B四个分量信号出现在同一个时钟节拍下,再根据前级提供的X_CNT,Y_CNT信号在偶数行,基数列进行分量信号整合计算。
表1 图像数据整合格式
Bits[31:24] |
Bits[23:16] |
Bits[15:8] |
Bits[7:0] |
0 |
R |
(G1+G2)/2 |
B |
(2.1.3)图像输入FIFO:由于整合后的像素点输出频率只12.5MHz,而系统总线时钟频率为100MHz,系统与外设数据传输速度不匹配,并且多个模块需要通过系统总线分时访问同一个图像数据存储器,因此采用异步FIFO对像素信息进行缓存。为了保证数据正确的写入或读出,就要根据FIFO空满状态及时进行FIFO的读写操作,使FIFO不能出现溢出或读空的状态。FIFO大小的选取也是相当重要,不能太大,太大系统资源不够,太小则缓存的作用有限。根据大量调试,设计的图像输入FIFO长度为512,位宽为24Bit,与像素点的位数一致。当FIFO中缓存的的像素点超过128个时,则置位图像存储标志,通过自定义DMA通道采用突发传输方式每次将FIFO中的128个像素信息存入SDRAM中,每次传输大概需要138个左右的总线时钟周期,平均每个像素点的存储时间大约只需一个总线时钟周期,极大的提高了传输效率。
(2.2)LCD控制器:负责从SDRAM中读取图像数据,并根据LCD时序把图像数据推送至LCD显示设备,以实现图像的预览显示,由如下两个模块组成:
(2.2.1)LCD驱动:LCD时序类似于VGA时序,LCD时序产生模块设计如图8所示,模块在25MHz输入时钟的激励下分别驱动行同步、场同步计数器,并把计数值与LCD时序参数作比较,从而产生符合标准的LCD行同步信号HSYNC、场同步信号VSYNC,并根据相应激励状态向图像输出FIFO中请求要显示的像素数据。
(2.2.3)图像输出FIFO:LCD控制器的工作时钟也与系统总线时钟不匹配,并且图像采集和畸变校正模块也需要通过系统总线分时访问SDRAM,因此也需要通过异步FIFO对要显示的像素信息进行缓存。经过大量测试,图像输出FIFO的长度设为512,位宽为24位,当FIFO少于384个数据,则置位图像读取标志,在总线空闲时间通过自定义DMA通道采用突发传输方式每次从SDRAM中读取128个像素信息,每次传输仅需要138个左右的总线时钟周期,平均每个像素点的读取时间大约只有一个总线时钟周期,极大的提高了传输效率。
(2.3)畸变校正模块:鱼眼图像畸变校正,采用软硬协同校正方法实现,其中地址变换部分是由软件完成,生成校正后图像的每个像素点在原畸变图像中对应的像素偏移地址值,并将其全部存储于畸变地址映射表中,最后由硬件模块根据映射表的对应关系完成畸变图像校正。
(2.3.1)硬件模块功能原理简单示例如图9所示,设原畸变图像在SDRAM中的首地址为Sa,像素偏移地址为oAddr,映射表的首地址为Ta,校正后的图像首地址为Da,像素偏移地址为iAddr,iAddr初始值为0,对应坐标为(0,0)。整个步骤分为如下四步:
(2.3.1.1)首先根据地址Ta+iAddr的值从畸变地址映射表中读出校正后像素(Da+iAddr对应的像素,此时对应坐标为(0,0))在畸变图像中对应的像素偏移地址oAddr,如图9(b)所示,此时对应坐标为(0,1);
(2.3.1.2)然后根据Sa+oAddr的值从原畸变图像中读出对应坐标(0,1)的像素值,如图9(a)所示,此时它所对应的像素信息为红色;
(2.3.1.3)最后将该红色像素信息存入校正后像素地址Da+iAddr对应的坐标单元(0,0),如图9(c)所示;
(2.3.1.4)将iAddr的值从0依次递增到640*480-1,然后重复上述三个步骤,即可完成整幅图像的畸变校正。
(2.3.2)缓存设计:根据Avalon总线协议,总线突发传输效率最高,因此要使传输效率最高,就要尽量使用突发传输方式,而突发传输的前提条件是被访问的从端口地址必须是连续的。由于畸变地址映射表存储的地址值不是连续的,因此畸变校正模块的步骤二,读取像素点的信息无法进行突发传输。
为了提高图像数据访问效率,步骤一和步骤三采用突发传输,步骤二采用普通传输方式。突发传输一次要进行多个数据的传输,因此需要将准备传输的数据缓存起来,包括步骤一读取的地址和步骤二读取的像素。本模块使用地址连续的寄存器作为缓存,缓存的长度即代表了突发传输的长度,也即代表该模块每次运行所占用的总线时钟周期。
由于图像采集模块、LCD显示模块以及畸变校正模块是分时对SDRAM进行访问,如果缓存太大,则畸变校正模块每次运行会占用过多的总线时钟周期,使得图像采集模块和LCD显示模块不能及时访问SDRAM,导致图像输入FIFO溢出和图像输出FIFO为空的情况。如果缓存太短,则畸变校正模块访问SDRAM的效率过低,因此要经过大量测试选择合理的缓存长度。
经过大量测试,本模块设计的缓存长度为64。畸变校正步骤一每次从畸变地址映射变突发读取64个畸变地址到地址缓存所需要的总线时钟数约为74;校正步骤二根据步骤一读取的畸变地址读取每个像素需要的总线时钟约为8,读取64个像素到像素缓存所需要的总线时钟约为512;步骤三将像素缓存中的64个像素值采用突发传输写入校正后图像存储单元需要的总线时钟约为72。因此本模块每次校正64个像素点需要的总线时钟数约为(512+74+72)=658。
(2.3.3)状态机:畸变校正模块的状态机主要是控制畸变校正的三个步骤分时有序完成。主要包括五个状态,分别定义为读地址状态ADDR_RD,读像素点状态PIXEL_RD,写像素点到对应地址状态PIXEL_WR,空闲态IDLE,和结束态STOP。状态转换图如图10所示,只要畸变校正使能被功能控制器置为1,并且当前总线空闲,即没有其它模块访问SDRAM,则开始依次进行硬件畸变校正的三个步骤,步骤自动连续执行,中间没有任何打断。
(2.3.4)畸变校正帧率:经计算,每秒畸变校正帧率的理论值约为23.8fps,经测试实际的校正帧率约为22fps,大于图像输入的帧率15fps,达到全方位视觉图像畸变校正的实时性要求。
(2.4)功能状态机:图像采集模块、LCD控制以及畸变校正模块都被集成在同一个IP核中,都要通过同一个自定义DMA通道分时对SDRAM进行访问。功能状态机的主要功能就是根据一定的逻辑判断规则控制各个模块分时有序访问SDRAM。
图像采集模块在图像输入FIFO超过128个像素数据时,置位存储图像使能Image_Store_En=1;VGA控制器在图像读取FIFO少于384个像素数据时,置位图像读取使能,Image_Read_En=1;当上面两种情况都不满足时,则置位畸变校正使能,Distortion_Correction_En=1。功能控制器则根据这些使能信号,进行功能状态切换,状态转换图如图11所示,该模块由软件通过配置寄存器启动,当模块启动后,则根据各模块工作使能信号进行相应工作状态切换。LCD显示帧频是60fps,而摄像头的图像输入帧频是15fps,说明每秒图像读取的次数要高于图像存储的次数,因此将图像读取的优先级置为最高,工作流程如下所示:
(2.4.1)IDLE:系统上电复位后,则自动进入IDLE状态,当软件通过配置寄存器启动模块运行后,则根据各模块工作使能信号进行相应工作状态切换。
(2.4.2)IMAGE_READ:当系统处于IDLE状态时,只要图像读取使能Image_Read_En=1,则系统进入图像读取状态(IMAGE_READ),通过DMA通道从SDRAM中读取128个像素信息到图像输出FIFO中,然后自动进入STOP态。
(2.4.3)IMAGE_STORE:当系统处于IDLE状态时,如果不满足图像读取条件,且图像存储使能Image_Store_En=1,进入图像存储状态(IMAGE_STORE),通过DMA通道将图像输入FIFO中的128个像素信息写入SDRAM中,然后自动进入STOP态。
(2.4.4)DISTORTION_CORRECTION:当系统处于IDLE状态时,如果既不满足图像读取条件,也不满足图像存储条件,则进入畸变校正状态(DISTORTION_CORRECTION),一次校正64个像素点,然后自动进入STOP态。
(2.4.5)STOP:在该状态,进行图像存储地址指针、图像读取地址指针、畸变校正地址指针的自增操作,以及相应标志位清0操作,然后自动回到IDLE态。
(2.5)系统寄存器组:系统寄存器组用于配置和控制自定义IP核内部各个功能模块,它们挂载在Avalon总线上,IP核内部共设计16个32位的寄存器,用于配置相应的模块,主要包括:采集图像的存储单元配置寄存器,显示图像的存储单元配置寄存器,畸变地址映射表存储地址配置寄存器,校正后图像存储地址配置寄存器以及模块功能使能控制寄存器等。
(2.6)DMA通道:通过Avalon总线的传输协议,使用硬件描述语言Verilog HDL设计读写逻辑,通过主端口信号线,在自定义IP与SDRAM之间直接传输数据,大大提高数据传输的效率。
(3)系统控制程序实现:系统控制程序流程如图12所示,通过C语言编程实现。系统在上电复位后进行系统初始化,然后获得畸变坐标映射表,接着系统处于图像预览模式中的原图像预览模式。主要流程步骤如下:
(3.1)系统初始化,主要包括以下方面:
(3.1.1)内存空间初始化:主要包括定义畸变地址映射表存储空间、原畸变图像存储空间以及校正后图像存储空间;
(3.1.2)系统GPIO口初始化:主要是设置GPIO端口的方向和初始值;
(3.1.3)定时器初始化:设置按键扫描定时间隔以及系统计数时间间隔;
(3.1.4)摄像头参数配置:编写I2C接口驱动,配置摄像头的工作方式;
(3.1.5)图像采集初始化:设置采集图像的存储地址,以及图像的宽度和高度,并启动图像采集功能;
(3.1.6)LCD显示初始化:设置需要显示图像的内存区域,并启动显示功能。
(3.2)获取畸变地址映射表:首先从Nor Flash中读畸变地址映射表备份标记,判断是Nor Flash中是否已经备份了映射表。如果没有备份,则要通过畸变校正算法计算出畸变地址映射表,然后将映射表和备份标记存储到Nor Flash中;如果Nor Flash已经备份,则只需要读取Nor Flash中的畸变地址映射表到内存SDRAM中。
(3.3)系统进入图像预览模式:首先进入原始全方位视觉畸变图像预览模式。
(3.4)按键触发:主要设置如下三个按键:
(3.4.1)畸变校正按键:通过这个按键,可以在启动、停止畸变校正功能之间进行切换;
(3.4.2)预览模式切换按键:可通过它选择预览原畸变图像还是预览校正后的全方位视觉图像;
(3.4.3)拍摄按键:按下它则可以进行拍照功能,将全方位视觉图像存储到SD卡中。