发明内容
本发明提供的一种图像预畸变校正的方法和装置,能够高速、稳定的实现视频图像处理,消除软件算法带来的弊端。
为达到上述目的,本发明的技术方案是这样实现的:
一方面,本发明公开一种图像预畸变校正方法,采用FPGA为主控芯片,所述方法包括:
FPGA芯片的转存单元将视频流中的图像数据存储在FPGA芯片的第一RAM组的多个BRAM中;
在所述第一RAM组完成预定数量的图像数据存储后,FPGA芯片的转存单元将接下来的图像数据存储在FPGA芯片的第二RAM组的多个BRAM中,并通知第一RAM组的控制器和FPGA芯片的地址/时序生成单元;
在所述第二RAM组完成预定数量的图像数据存储后,FPGA芯片的转存单元将接下来的图像数据存储在FPGA芯片的第一RAM组的多个BRAM中,并通知第二RAM组的控制器和FPGA芯片的地址/时序生成单元;
所述地址/时序生成单元将生成的输出地址和输出时序分别发送给所述第一、第二RAM组的控制器;
所述第一、第二RAM组的控制器根据接收的所述输出地址读取存储在其控制的RAM组中的图像数据,并对读取的图像数据进行预畸变校正;
所述第一、第二RAM组的控制器根据接收的所述输出时序将预畸变校正后的图像数据输出到FPGA芯片的多路选择器MUX,由所述多路选择器MUX将两路图像数据合成一路后输出到屏幕进行显示。
优选地,FPGA芯片的转存单元将视频流中的图像数据存储在FPGA芯片的第一、第二RAM组的多个BRAM中,包括:
转存单元提取视频流中的图像数据的RGB值;
转存单元对视频流中的同步时钟信号进行二分频,得到第一时钟信号,将第一时钟信号相移180°,得到第二时钟信号;
转存单元根据所述第一时钟信号和所述第二时钟信号对所述图像数据分别进行采样,得到两组采样后的图像数据;
转存单元同时根据所述第一时钟信号和所述第二时钟信号驱动所述第一RAM组,将所述两组采样后的图像数据按照交叉存储和按行存储的方式存储在所述第一、第二RAM组的多个BRAM中。
优选地,所述通知第一、第二RAM组的控制器和FPGA芯片的地址/时序生成单元,包括:
第一、第二RAM组的控制器将整个屏幕分成N个小块,将每一小块的图像畸变曲线方程预存入FPGA芯片内部的查找表LUT中,其中N为正整数;
地址/时序生成单元生成的输出地址和输出时序,并发送给所述第一、第二RAM组的控制器;
第一、第二RAM组的控制器根据接收的输出地址反向查询所述查找表LUT,通过图像畸变曲线方程得到所述输出地址对应的原图像的输入坐标(X,Y),所述X,Y为小数;
第一、第二RAM组的控制器对所述输入坐标(X,Y)进行坐标转换获得输入坐标(X,Y)周围相邻的四个像素点的坐标;
第一、第二RAM组的控制器计算所述输入坐标(X,Y)周围相邻的四个像素点的相应的RGB的均值,获得所述原图像的输入坐标(X,Y)对应的图像数据的RGB值,完成所述图像数据的预畸变校正。
优选地,第一、第二RAM组的控制器对所述输入坐标(X,Y)进行坐标转换获得输入坐标(X,Y)周围相邻的四个像素点的坐标,包括:
第一、第二RAM组的控制器对输入坐标(X,Y)进行取整运算,判断取整运算后的坐标([X],[Y])位于第一RAM组中的奇数列或偶数列,其中[·]表示取整运算;
若取整运算后的坐标([X],[Y])处于偶数列,即[Y]为偶数,则输入坐标(X,Y)周围相邻的四个像素点的整数坐标位于不同BRAM的相同数据地址;
所述不同BRAM的地址范围位于为[X]*2至[X]*2偏移3个地址的范围内,所述相同的数据地址为[Y]/2;即输入坐标(X,Y)周围相邻的四个像素点的整数坐标分别为([X]*2,[Y]/2)、([X]*2+1,[Y]/2)、([X]*2+2,[Y]/2)、([X]*2+3,[Y]/2);
若取整运算后的坐标([X],[Y])处于奇数列,即[Y]为奇数,则输入坐标(X,Y)周围相邻的四个像素点的整数坐标位于不同BRAM的相邻数据地址;
所述四个像素点中位于右侧的像素点的数据地址为([Y]+1)/2,其不同的BRAM地址分别为[X]*2和将[X]*2偏移2个地址;左侧的像素点的数据地址为([Y]+1)/2-1,其不同的BRAM数据地址分别为将[X]*2偏移1个地址和3个地址,即输入坐标(X,Y)周围的四个整数坐标分别为([X]*2,([Y]+1)/2)、([X]*2+2,([Y]+1)/2)、([X]*2+1,([Y]+1)/2-1)、([X]*2+3,([Y]+1)/2-1)。
优选地,在FPGA芯片的转存单元将视频流中的图像数据存储在FPGA芯片的第一RAM组的多个BRAM中之前,所述方法还包括:
FPGA芯片的压缩/旁路单元对视频流进行压缩,将压缩后的视频流输出到FPGA芯片的转存单元。
另一方面,本发明公开一种图像预畸变校正装置,采用FPGA为主控芯片,包括:
转存单元,用于将视频流中的图像数据存储在FPGA芯片的第一RAM组的多个BRAM中;在所述第一RAM组完成预订数量的图像数据存储后,FPGA芯片的转存单元将接下来的图像数据存储在FPGA芯片的第二RAM组的多个BRAM中,并通知第一RAM组的控制器和FPGA芯片的地址/时序生成单元;以及在所述第二RAM组完成预定数量的图像数据存储后,FPGA芯片的转存单元将接下来的图像数据存储在FPGA芯片的第一RAM组的多个BRAM中,并通知第二RAM组的控制器和FPGA芯片的地址/时序生成单元;
第一RAM组和第二RAM组,分别用于存储图像数据;
地址/时序生成单元,用于将生成输出地址和输出时序分别发送给所述第一、第二RAM组的控制器;
第一RAM组的控制器和第二RAM组的控制器,用于根据接收的所述输出地址读取存储在其控制的RAM组中的图像数据,并对读取的图像数据进行预畸变校正;以及根据接收的输出时序将预畸变校正后的图像数据输出到FPGA芯片的多路选择器MUX;
多路选择器MUX,用于将接收到的两路图像数据合成一路后输出到屏幕进行显示。
优选地,所述转存单元进一步用于,
提取视频流中的图像数据的RGB值;
对视频流中的同步时钟信号进行二分频,得到第一时钟信号,将第一时钟信号相移180°,得到第二时钟信号;
根据所述第一时钟信号和所述第二时钟信号对所述图像数据分别进行采样,得到两组采样后的图像数据;
同时根据所述第一时钟信号和所述第二时钟信号驱动所述第一RAM组,将所述两组采样后的图像数据按照交叉存储和按行存储的方式存储在所述第一、第二RAM组的多个BRAM中。
优选地,所述第一RAM组的控制器和第二RAM组的控制器进一步用于,
将整个屏幕分成N个小块,将每一小块的图像畸变曲线方程预存入FPGA芯片内部的查找表LUT中,其中N为正整数;
根据接收的输出地址反向查询查找表LUT,通过图像畸变曲线方程得到所述输出地址对应的原图像的输入坐标(X,Y),所述X,Y为小数;
对所述输入坐标(X,Y)进行坐标转换获得输入坐标(X,Y)周围相邻的四个像素点的坐标;
计算所述输入坐标(X,Y)周围相邻的四个像素点的相应的RGB的均值,获得所述原图像的输入坐标(X,Y)对应的图像数据的RGB值,完成所述图像数据的预畸变校正。
优选地,所述第一RAM组的控制器和第二RAM组的控制器进一步用于,
对输入坐标(X,Y)进行取整运算,判断取整运算后的坐标([X],[Y])位于第一RAM组中的奇数列或偶数列,其中[·]表示取整运算;
若取整运算后的坐标([X],[Y])处于偶数列,即[Y]为偶数,则输入坐标(X,Y)周围相邻的四个像素点的整数坐标位于不同BRAM的相同数据地址;
所述不同BRAM的地址范围位于为[X]*2至[X]*2偏移3个地址的范围内,所述相同的数据地址为[Y]/2;即输入坐标(X,Y)周围相邻的四个像素点的整数坐标分别为([X]*2,[Y]/2)、([X]*2+1,[Y]/2)、([X]*2+2,[Y]/2)、([X]*2+3,[Y]/2);
若取整运算后的坐标([X],[Y])处于奇数列,即[Y]为奇数,则输入坐标(X,Y)周围相邻的四个像素点的整数坐标位于不同BRAM的相邻数据地址;
所述四个像素点中位于右侧的像素点的数据地址为([Y]+1)/2,其不同的BRAM地址分别为[X]*2和将[X]*2偏移2个地址;左侧的像素点的数据地址为([Y]+1)/2-1,其不同的BRAM数据地址分别为将[X]*2偏移1个地址和3个地址,即输入坐标(X,Y)周围的四个整数坐标分别为([X]*2,([Y]+1)/2)、([X]*2+2,([Y]+1)/2)、([X]*2+1,([Y]+1)/2-1)、([X]*2+3,([Y]+1)/2-1)。
优选地,所述装置还包括:
压缩/旁路单元,用于对视频流进行压缩,将压缩后的视频流输出到FPGA芯片的转存单元。
本发明实施例的有益效果是:本发明公开了一种图像预畸变校正的方法和装置,采用FPGA为主控芯片,利用FPGA内部的RAM资源,只需要少量的外围电路进行图像预畸变校正的硬件实现,能够有效降低成本和电路板的面积;通过利用FPGA芯片的转存单元将视频流中的图像数据存储在FPGA芯片的第一RAM组和第二RAM组中,在所述第一RAM组存储完毕启动对第一RAM组中的图像数据进行图像预畸变校正操作时,第二个RAM组存储接下来的图像数据,并在存储完毕时启动对第二RAM组中的图像数据进行图像预畸变校正操作,使第一RAM组和第二RAM组实现乒乓操作,以降低后端处理的时钟频率,提高稳定性;并且本发明按照交叉存储和按行存储的方式将图像数据存储在第一RAM组和第二RAM组中,采用全新的数据结构以降低所述第一RAM组和第二RAM组的读写速度,提高稳定性。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
图1为本发明实施例提供的图像预畸变校正方法流程图,该图像预畸变校正方法采用FPGA为主控芯片,所述方法包括:
S101,FPGA芯片的转存单元将视频流中的图像数据存储在FPGA芯片的第一RAM组的多个BRAM中。
具体的,参考图2,所述视频流包括图像数据、同步时钟信号SYNC_CLK、有效显示数据选通信号DE、行同步信号HSYNC以及场同步信号VSYNC;所述转存单元将视频流中的图像数据存储在FPGA芯片的第一RAM组的多个BRAM中,包括:
转存单元根据视频流中的有效显示数据选通信号DE提取视频流中的图像数据的RGB值;
转存单元对视频流中的同步时钟信号SYNC_CLK进行二分频,得到第一时钟信号CLK1,将第一时钟信号CLK1相移180°,得到第二时钟信号CLK2;
转存单元根据时钟信号CLK1和CLK2对所述图像数据分别进行采样,得到两组采样后的图像数据DATA1、DATA2;
转存单元同时根据所述时钟信号CLK1和CLK2驱动所述第一RAM组,将所述两组采样后的图像数据DATA1和DATA2按照交叉存储和按行存储的方式存储在所述第一RAM组中。
需要说明的是,本技术方案所采用的FPGA主控芯片具有内嵌的BRAM,例如Xlinx的SP3系列FPGA包括两种RAM,分别是BRAM(Block RAM)和DRAM(Distributed RAM),而BRAM相对较多,每个BRAM结构为真正的双端口RAM,包含两套完备的36bit读写数据总线以及相应的控制总线;根据实际需求,每个BRAM均可被配置为单端口的RAM或双端口RAM,并支持级联;并且该SP3系列的FPGA支持多种纵横比、多种数据带宽转换,支持奇偶性操作,能够有效的拓展FPGA的应用范围和灵活性。
S102,在所述第一RAM组完成预定数量的图像数据存储后,FPGA芯片的转存单元将接下来的图像数据存储在FPGA芯片的第二RAM组的多个BRAM中,并通知第一RAM组的控制器和FPGA芯片的地址/时序生成单元。
S103,在所述第二RAM组完成预定数量的图像数据存储后,FPGA芯片的转存单元将接下来的图像数据存储在FPGA芯片的第一RAM组的多个BRAM中,并通知第二RAM组的控制器和FPGA芯片的地址/时序生成单元。
S104,所述地址/时序生成单元将生成的输出地址和输出时序分别发送给所述第一、第二RAM组的控制器。
S105,所述第一、第二RAM组的控制器根据接收的输出地址读取存储在其控制的RAM组中的图像数据,并对读取的图像数据进行预畸变校正。
具体的,以第一RAM组的控制器对其控制的RAM组中图像数据进行预畸变校正为例进行说明:
首先,第一RAM组的控制器将整个屏幕分成N个小块,将每一小块的图像畸变曲线方程预存入FPGA芯片内部的查找表LUT中,其中N为正整数,查找表LUT(Look Up Table)简称为LUT,本质上是一个RAM,允许把数据预先写入该RAM中,每当输入一个信号就相当于输入一个地址进行查表,找出该地址对应的内容并输出。
其次,地址/时序生成单元生成输出地址和输出时序,并发送给所述第一RAM组的控制器。
再其次,第一RAM组的控制器根据接收的输出地址反向查询所述查找表LUT,通过图像畸变曲线方程得到所述输出地址对应的原图像的输入坐标(X,Y),所述X,Y为小数。
然后,第一RAM组的控制器对所述输入坐标(X,Y)进行坐标转换获得输入坐标(X,Y)周围相邻的四个像素点的坐标。
具体的,第一RAM组的控制器对输入坐标(X,Y)进行取整运算,判断取整运算后的坐标([X],[Y])位于第一RAM组中的奇数列或偶数列,其中[·]表示取整运算;
若取整运算后的坐标([X],[Y])处于偶数列,即[Y]为偶数,则输入坐标(X,Y)周围相邻的四个像素点的整数坐标位于不同BRAM的相同数据地址;
所述不同BRAM的地址范围位于为[X]*2至[X]*2偏移3个地址的范围内,所述相同的数据地址为[Y]/2;即输入坐标(X,Y)周围相邻的四个像素点的整数坐标分别为([X]*2,[Y]/2)、([X]*2+1,[Y]/2)、([X]*2+2,[Y]/2)、([X]*2+3,[Y]/2);
若取整运算后的坐标([X],[Y])处于奇数列,即[Y]为奇数,则输入坐标(X,Y)周围相邻的四个像素点的整数坐标位于不同BRAM的相邻数据地址;
所述四个像素点中位于右侧的像素点的数据地址为([Y]+1)/2,其不同的BRAM地址分别为[X]*2和将[X]*2偏移2个地址;左侧的像素点的数据地址为([Y]+1)/2-1,其不同的BRAM数据地址分别为将[X]*2偏移1个地址和3个地址,即输入坐标(X,Y)周围的四个整数坐标分别为([X]*2,([Y]+1)/2)、([X]*2+2,([Y]+1)/2)、([X]*2+1,([Y]+1)/2-1)、([X]*2+3,([Y]+1)/2-1)。
最后,第一RAM组的控制器计算所述输入坐标(X,Y)周围相邻的四个像素点的相应的RGB的均值,获得所述原图像的输入坐标(X,Y)对应的图像数据的RGB值,完成所述图像数据的预畸变校正。
S106,所述第一、第二RAM组的控制器根据接收的输出时序将预畸变校正后的图像数据输出到FPGA芯片的多路选择器MUX,由所述多路选择器MUX将两路图像数据合成一路后输出到屏幕进行显示
优选的,在FPGA芯片的转存单元将视频流中的图像数据存储在FPGA芯片的第一RAM组的多个BRAM中之前,所述方法还包括:
FPGA芯片的压缩/旁路单元对视频流进行压缩,将压缩后的视频流输出到FPGA芯片的转存单元,以降低大数据量对后续数据处理的压力。
图3为本发明实施例提供的一种图像预畸变校正装置,采用FPGA为主控芯片,包括转存单元31、第一RAM组32和第二RAM组33、地址/时序生成单元34、第一RAM组的控制器35第二RAM组的控制器36和多路选择器MUX37。
转存单元31,用于将视频流中的图像数据存储在FPGA芯片的第一RAM组32的多个BRAM中;在所述第一RAM组32完成预订数量的图像数据存储后,FPGA芯片的转存单元31将接下来的图像数据存储在FPGA芯片的第二RAM组33的多个BRAM中,并通知第一RAM组的控制器35和FPGA芯片的地址/时序生成单元34;以及在所述第二RAM组33完成预定数量的图像数据存储后,FPGA芯片的转存单元31将接下来的图像数据存储在FPGA芯片的第一RAM组32的多个BRAM中,并通知第二RAM组的控制器36和FPGA芯片的地址/时序生成单元34。
第一RAM组32和第二RAM组33,分别用于存储图像数据。
地址/时序生成单元34,用于将生成的输出地址和输出时序分别发送给所述第一RAM组的控制器35、第二RAM组的控制器36。
第一RAM组的控制器35和第二RAM组的控制器36,用于根据接收的输出地址读取存储在其控制的RAM组中的图像数据,并对读取的图像数据进行预畸变校正;以及根据接收的输出时序将预畸变校正后的图像数据输出到FPGA芯片的多路选择器MUX37。
多路选择器MUX37,用于将接收到的两路图像数据合成一路后输出到屏幕进行显示。
优选地,所述转存单元31进一步用于,
提取视频流中的图像数据的RGB值;
对视频流中的同步时钟信号进行二分频,得到第一时钟信号,将第一时钟信号相移180°,得到第二时钟信号;
根据所述第一时钟信号和所述第二时钟信号对所述图像数据分别进行采样,得到两组采样后的图像数据;
同时根据所述第一时钟信号和所述第二时钟信号驱动所述第一RAM组,将所述两组采样后的图像数据按照交叉存储和按行存储的方式存储在所述第一RAM组(或第二RAM组)的多个BRAM中。
优选地,所述第一RAM组的控制器35(或第二RAM组的控制器36)进一步用于,
将整个屏幕分成N个小块,将每一小块的图像畸变曲线方程预存入FPGA芯片内部的查找表LUT中,其中N为正整数;
根据接收的输出地址反向查询查找表LUT,通过图像畸变曲线方程得到所述输出地址对应的原图像的输入坐标(X,Y),所述X,Y为小数;
对所述输入坐标(X,Y)进行坐标转换获得输入坐标(X,Y)周围相邻的四个像素点的坐标;
计算所述输入坐标(X,Y)周围相邻的四个像素点的相应的RGB的均值,获得所述原图像的输入坐标(X,Y)对应的图像数据的RGB值,完成所述图像数据的预畸变校正。
优选地,所述第一RAM组的控制器35(或第二RAM组的控制器36)进一步用于,
对输入坐标(X,Y)进行取整运算,判断取整运算后的坐标([X],[Y])位于第一RAM组中的奇数列或偶数列,其中[·]表示取整运算;
若取整运算后的坐标([X],[Y])处于偶数列,即[Y]为偶数,则输入坐标(X,Y)周围相邻的四个像素点的整数坐标位于不同BRAM的相同数据地址;
所述不同BRAM的地址范围位于为[X]*2至[X]*2偏移3个地址的范围内,所述相同的数据地址为[Y]/2;即输入坐标(X,Y)周围相邻的四个像素点的整数坐标分别为([X]*2,[Y]/2)、([X]*2+1,[Y]/2)、([X]*2+2,[Y]/2)、([X]*2+3,[Y]/2);
若取整运算后的坐标([X],[Y])处于奇数列,即[Y]为奇数,则输入坐标(X,Y)周围相邻的四个像素点的整数坐标位于不同BRAM的相邻数据地址;
所述四个像素点中位于右侧的像素点的数据地址为([Y]+1)/2,其不同的BRAM地址分别为[X]*2和将[X]*2偏移2个地址;左侧的像素点的数据地址为([Y]+1)/2-1,其不同的BRAM数据地址分别为将[X]*2偏移1个地址和3个地址,即输入坐标(X,Y)周围的四个整数坐标分别为([X]*2,([Y]+1)/2)、([X]*2+2,([Y]+1)/2)、([X]*2+1,([Y]+1)/2-1)、([X]*2+3,([Y]+1)/2-1)。
优选地,所述装置还包括:
压缩/旁路单元,用于对视频流进行压缩,将压缩后的视频流输出到FPGA芯片的转存单元31。
下面以一个具体的实施例来说明本技术方案的有益效果。
以校正头戴显示器中的畸变图像为例进行说明,由于镜头自身的光学特性,用户看到的图像都是具有畸变特性的,如图4所示,左图中灰色部分为原图像,分辨率为M*N,右图中以黑色边框为目标图像大小,其分辨率也为M*N,经过畸变校正后,左图中的灰色矩形部分映射为右图中的灰色曲边框形部分;由于图像变小导致了右图中的黑色部分,当输出右图的目标图像时,黑色部分实际上对应于左图中虚线与灰色矩形框之间的部分,超出了原图像的范围,即无效部分。
在本实施例中,将整个屏幕分成N个小块,参考图5,每一块都有其畸变曲线 将每一小块的图像畸变曲线方程预存入FPGA芯片内部的查找表LUT中;如果当前输出的像素点K的坐标值为(X1,Y1),位于分区M3中,通过查询查找表LUT的畸变曲线方程 从而得到K点映射到原图像的输出坐标;然后通过坐标变换在RAM组中寻找该输出坐标对应的RGB值,送出显示。
图6为本实施例提供的对图像进行预畸变校正的原理框图,将压缩或未压缩的图像数据的前n行存储在FPGA芯片的RAM组中,存储完成后,RAM组的控制器控制时序生成单元产生输出时序,同时根据目标图像的输出坐标反向查询查找表LUT,得到一个原图像的输入坐标,将所述输入坐标进行坐标变换,获得所述输入坐标周围相邻的四个像素点的整数坐标,并在所述RAM组中找寻该四个像素点的整数坐标对应的RGB值,计算所述四个RGB值的均值,获得该输入坐标对应的RGB值,并送出显示;当所述RAM组存储完毕并进行相应的畸变操作时,另一个RAM组开始存储下一个n行数据,如此进行兵乓操作,降低后端处理的时钟频率,提高稳定性。
需要说明的是,由于坐标变换和RAM组操作需要时间,实际输出的坐标需要通过一个定时器Timer进行延时;而且在逆向查找查找表LUT时,由于目标图像是畸变图像,同一行输出对应原图像会有多行的跨度,参考图4,目标图像中的A、B、C三个像素点位于同一行上,而与其对应的原图像上的A'、B'、C'三个像素点却不在同一行上,因此需要将多行原图像的RGB数据存储在RAM组的BRAM中。
在本实施例中,假设输入图像时钟频率与输出图像时钟频率相同,同为75MHz,由于FPGA内部的RAM组读写不能太快,如果采用现有技术中的按行存储方式,需要提高RAM组的读写速度实现多次读取RAM组中暂存的原图像的RGB值,以保证整个系统的正常工作,而提高RAM组的读写速度会造成读写错误和不稳定。
此外,本实施例中,根据目标图像输出的整数坐标,经过畸变曲线方程计算得到对应的原图像的输入坐标,而该输入坐标为小数值,由于原图像在RAM组中都是按照整数坐标存储,因此需要查找该输入坐标的周围相邻的四个像素点的整数坐标对应的RGB值,进行均值处理,例如,如图7所示,根据畸变曲线方程得到的小数坐标P(102.3,871.8),从空间关系上可以得出,P点周围的四个像素点的坐标分别是P1(102,871)、P2(103,871)、P3(102,872)以及P4(103,872),因此需要从RAM组中取出这四个像素点的RGB值做均值运算以获得P点的RGB值。假设P1与P2所在行存储在RAM组的Line102中,P3和P4所在行存储在RAM组的Line103中,要取出这个像素点,至少需要分别连续读Line102和Line103两次,即需要4个时钟周期。假如后端输出的同步时钟也是75MHz,而一个输出像素点对应的四个原图像的像素点的RGB值,因此读取RAM组需要75MHz*4,即300MHZ/s的速度读取RAM组,这对于FPGA内部的RAM组来说速度过快,会造成读写的不稳定。因此RAM组的续写速度成为一个非常大的瓶颈,直接影响功能的实现。
本实施例中,为降低RAM组的读写速度,提高稳定性,采用如下的数据结构。
参考图2,SYNC_CLK和DATA是视频流中的同步时钟信号和图像数据,用SYNC_CLK做二分频,得到CLK1,CLK1再做180°的移相,得到CLK2,用CLK1、CLK2作为采样时钟对DATA进行采样,得到DATA1和DATA2,同时以CLK1和CLK2为时钟去驱动RAM组存储DATA1和DATA2,即原图像相邻像素的RGB值交叉存储在RAM组中。
具体的,如图8所示,一个10*10的图像,采用上述交叉存储方式和按行存储方式后,所述10*10的图像在所述RAM组中的数据结构如图9所示;图8中的A、B、C、D四个像素点的坐标为小数值,其周围相邻的四个像素点在图9的坐标值如表1所示:
由这四个像素点或其他任何一个点分析可得到:当取整之后位于偶数列时,则该像素点对应周围的四个像素点的整数坐标值位于不同BRAM的相同数据地址;当位于奇数列时,则该像素点对应周围的四个像素点的整数坐标值位于不同BRAM的相邻数据地址。
从表1中的分析可知,每个小数坐标对应的整数坐标的像素点均存储在不同的BRAM中,故可以同时读取四个BRAM值;假如后端图像的输出按照和输入相同的速度,即75MHz的同步时钟,因此可以实现以75MHz的时钟来读取所述RAM组,提高了RAM组的读稳定性。
需要说明的是,本实施例采用如下方法同时读取四个BRAM值,以图8中的A、B、C、D四个输出像素点为例进行说明:
首先,对所述四个像素点的坐标(X,Y)进行取整运算,判断取整运算后的坐标([X],[Y])位于RAM组中的奇数列或偶数列,其中A和C两点位于偶数列,B和D两点位于奇数列。
然后,根据所述四个输出像素点所处奇偶列采用不同方法获取其周围相邻的四个像素点坐标。
其中,A输出像素点通过逆向查询LUT可知,其对应原图像的坐标为(6.2,2.3),将其取整后为(6,2),由于(6,2)位于偶数列,坐标(6.2,2.3)周围的四个像素点的坐标的BRAM地址范围为6*2~6*2在偏移3个地址,相同的数据地址为2/2,即坐标(6.2,2.3)周围的四个像素点的坐标分别为(12,1)、(13,1)、(14,1)和(15,1),分别对应图9的像素点为P62、P63、P72和P73,并且与图8中A点周围相邻的四个像素点一致;
C输出像素点通过逆向查询LUT可知,其对应原图像的坐标为(1.5,4.7),将其取整后为(1,4),由于(1,4)位于偶数列,坐标(1.5,4.7)周围的四个像素点的坐标的BRAM地址范围为1*2~1*2在偏移3个地址,相同的数据地址为4/2,即坐标(6.2,2.3)周围的四个像素点的坐标分别为(2,2)、(3,2)、(4,2)和(5,2),分别对应图9的像素点为P14、P15、P24和P25,并且与图8中A点周围相邻的四个像素点一致。
B输出像素点通过逆向查询LUT可知,其对应原图像的坐标为(3.4,3.1),将其取整后为(3,3),由于(3,3)位于奇数列,坐标(3.4,3.1)周围的四个像素点中位于右侧的像素点的数据地址为(3+1)/2,其不同的BRAM地址分别为3*2和3*2偏移两个地址;位于左侧的像素点的数据地址为(3+1)/2-1,其不同的BRAM地址分别为3*2偏移一个地址和3*2偏移三个地址,即坐标(3.4,3.1)周围的四个像素点的坐标分别为(6,2)、(8,2)、(7,1)和(9,1),分别对应图9的像素点为P34、P44、P33和P43,并且与图8中A点周围相邻的四个像素点一致;
D输出像素点通过逆向查询LUT可知,其对应原图像的坐标为(8.1,7.6),将其取整后为(8,7),由于(8,7)位于奇数列,坐标(8.1,7.6)周围的四个像素点中位于右侧的像素点的数据地址为(7+1)/2,其不同的BRAM地址分别为8*2和8*2偏移两个地址;位于左侧的像素点的数据地址为(7+1)/2-1,其不同的BRAM地址分别为8*2偏移一个地址和8*2偏移三个地址,即坐标(8.1,7.6)周围的四个像素点的坐标分别为(16,4)、(18,4)、(17,3)和(19,3),分别对应图9的像素点为P34、P44、P33和P43,并且与图8中A点周围相邻的四个像素点一致。
综上所述,本发明公开了一种图像预畸变校正的方法和装置,采用FPGA为主控芯片,利用FPGA内部的RAM资源,只需要少量的外围电路进行图像预畸变校正的硬件实现,能够有效降低成本和电路板的面积;通过利用FPGA芯片的转存单元将视频流中的图像数据存储在FPGA芯片的第一RAM组和第二RAM组中,在所述第一RAM组存储完毕启动对第一RAM组中的图像数据进行图像预畸变校正操作时,第二个RAM组存储接下来的图像数据,并在存储完毕时启动对第二RAM组中的图像数据进行图像预畸变校正操作,使第一RAM组和第二RAM组实现乒乓操作,以降低后端处理的时钟频率,提高稳定性;并且本发明按照交叉存储和按行存储的方式将图像数据存储在第一RAM组和第二RAM组中,采用全新的数据结构以降低所述第一RAM组和第二RAM组的读写速度,提高稳定性。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。