一种基于连通域的星点提取FPGA实现方法与流程

摘要: 本发明涉及fpga图像处理,具体涉及一种基于连通域的星点提取fpga实现方法。背景技术:1、星点中心坐标提取是星敏感器星图识别的关键前置步骤,其提取精度直接影响...
一种基于连通域的星点提取FPGA实现方法与流程

本发明涉及fpga图像处理,具体涉及一种基于连通域的星点提取fpga实现方法。

背景技术:

1、星点中心坐标提取是星敏感器星图识别的关键前置步骤,其提取精度直接影响后续星图匹配与姿态解算的准确性。随着航天任务对星敏感器实时性、小型化、低功耗要求的不断提高,如何在fpga平台上实现高精度、低延迟的星点坐标提取,已成为该领域的研究热点。

2、现有基于连通域的星点提取fpga实现方案,按技术路线可分为三类。

3、(1)基于外部协处理器的架构方案

4、邢飞等在《aps cmos星敏感器系统原理及实现方法》一书中提出以像素点及其左侧像素点、上一行四像素点共同标注的连通域实现方案,并采用fpga+dpram+dsp的硬件架构,其中fpga负责像素数据的连通域标注,dpram用于缓存中间数据,dsp完成星点中心坐标计算。该方案在理论层面符合星点结构特征,能够有效聚类同一星点的所有像素数据,满足大多数场景下的星点提取需求。

5、然而,该架构需使用外部dpram及dsp器件,对于电路面积有限的星敏感器而言,难以支持这类组件的嵌入与使用。fpga与dsp之间的数据交互需通过外部总线完成,引入了额外的数据传输延迟,且将fpga接收的像素数据送入dpram后再由dsp读取处理的实施方式,未能充分发挥fpga的并行数据处理特性,整体吞吐率受限于dsp的处理速度。

6、(2)基于迭代区域生长的方案

7、提舒雯在其硕士论文《基于星敏感器的星图预处理与星点提取技术研究》中提出基于区域生长的分割方法,遍历所有像素点并比较其与周围像素点的灰度关系以获取标注,重复迭代直到所有像素点标注完成。该方案具有较强的通用性,能够适应不同形态和亮度的星点。

8、然而,不同星图将引入不同迭代次数,迭代时间将造成处理阻塞,无法保障星图处理的实时性。此外,迭代过程需对整帧星图进行保存,这一要求必然引入外部大容量存储器件,进一步增加了系统成本和功耗。同时,迭代操作本质上是串行过程,与fpga的并行处理架构不匹配,资源利用率较低。

9、(3)基于行目标提取的fpga加速方案

10、李寅龙等在《航天返回与遥感》期刊第40卷第2期提出一种基于行目标提取的星图标注方法,寻找并记录当前行像素数据中灰度值阈值上升沿与下降沿的列坐标,构成上升沿-下降沿列坐标对(后文简称为列坐标对),列坐标对包含未标注像素数据。将当前行列坐标对与上一行存储的列坐标对进行列方向重叠性比较,若存在重叠则合并为同一星点,否则分配新标注,直至当前行所有列坐标对分析完毕。该方法无需存储星图原始数据,仅保存少量列坐标信息,避免反复迭代,耗时较短,同一标注像素数据点间结构完整、联系紧凑。

11、然而,使用当前行列坐标对与上一行存储列坐标对比较时,需同上一行存储结果依次对比直至找到重叠连接处或对比结束,比较次数未知。若采用顺序比较则处理延迟不可控;若采用fpga实现并确保实时性,需定义大规模寄存器数组并通过直接索引方法完成对比流程,将耗费大量逻辑资源。此外,该方法未给出明确的流水线时序方案,帧间处理连续性难以保证。

12、李葆华等在《导航定位与授时》期刊第2卷第1期提出一种基于fpga的实时星点坐标提取方案,充分利用了fpga并行数据处理特性,且无需引入外部组件。该方案基于连通域理论使用质心法计算星点坐标,计算效率高、结果准确、同步效果优异。但该方案需使用4倍像素时钟进行数据处理,以便在一个像素周期内串行完成阈值判断、连通域标注、质心累加和ram读写等一系列操作。为获取高精度星图数据,现有传感器通常设置较高像素时钟频率,倍频后时钟频率进一步升高将导致fpga芯片时序收敛困难,甚至存在宕机风险。此外,该方案对不同厂商fpga的ip核差异未做兼容设计,方案可移植性较差。

13、综合上述方案,现有技术普遍存在以下不足:为在单像素时钟周期内完成待测像素点判断、连通域标注、加权计算及ram读写等一系列操作,被迫对像素时钟进行倍频,当前高分辨率星敏感器像素时钟频率本身较高,倍频后时钟频率进一步升高将导致fpga时序收敛困难、功耗显著增加甚至存在宕机风险;部分方案为弥补fpga计算或存储能力的不足,需引入dsp、外部dpram或sdram等器件,不仅增加电路板面积,还引入额外传输延迟;采用迭代或逐次比较方式完成连通域合并与标注的方案,其迭代或比较次数与星图内容相关,导致每帧处理时间不确定,无法保证帧时序稳定性;而采用全并行比较架构以确保实时性时,又需定义大规模寄存器数组,占用大量逻辑资源,在中低端fpga上难以部署;此外,现有方案多针对特定厂商器件优化,不同厂商ram、fifo等ip核工作模式差异较大,方案可移植性差。

技术实现思路

1、本发明的目的在于克服上述现有技术的至少一项不足,提供一种能够以单倍像素时钟驱动、纯fpga片内实现、处理时间恒定、逻辑资源占用少且兼容主流fpga平台的星点中心坐标提取方法。

2、本发明提供一种基于连通域的星点提取fpga实现方法,以段为基本处理单元,所述段为单星点某一行内连续超过预设阈值的有效像素点集合,所述方法包括:

3、星点检测与计算存取:对当前帧输入像素点逐拍判断连通域归属,以段起始展开段内数据累加,以段结束触发累加结果存入数据ram,并在帧结束时发送帧结束信号;

4、星点数据读取与计算输出:接收到帧结束信号后,从数据ram读取每颗星点的累加结果,利用最大似然估计法计算星点中心坐标并存入fifo。

5、在一些实例中,所述段内数据累加包括行坐标和累加、列坐标和累加、有效像素点个数累加,段内各像素点的行坐标和、列坐标和及有效像素点个数分别以row_sum、col_sum、pix_num表示,段起始时分别赋值为当前像素的行坐标、列坐标及1,段内延续时分别累加当前像素的行坐标、列坐标及1。

6、在一些实例中,所述对当前帧输入像素点逐拍判断连通域归属,包括:

7、以当前像素灰度值pix_data_5、左侧像素点所属星点序号left_data以及上一行对应四个像素点所属星点序号array[0~3]作为判定依据逐拍判断连通域归属,其中,pix_data_5通过对输入像素数据打拍寄存5个时钟周期后获得,与单帧星点序号ram读出数据时间轴对齐。

8、在一些实例中,所述以当前像素灰度值pix_data_5、左侧像素点所属星点序号left_data以及上一行对应四个像素点所属星点序号array[0~3]作为判定依据逐拍判断连通域归属,包括:

9、情形一:当pix_data_5≥预设阈值且left_data==0时,判定为段起始:若当前行为首行或array[0~3]全为0,则分配新星点序号mark并置new_tag=1;若array[0~3]不全为0,则取array[0~3]中最大值作为当前段归属并置new_tag=0;段起始时将row_sum、col_sum、pix_num分别赋值为当前像素的行坐标、列坐标及1,new_tag表示当前段是否属于新星点,为1表示属于新星点,为0表示属于已有星点,mark为星点序号全局变量,初值为1,每分配一颗新星点后自增1;

10、情形二:当pix_data_5≥预设阈值且left_data≠0时,判定为段内延续:将当前像素的行坐标、列坐标及1分别累加至row_sum、col_sum、pix_num;

11、情形三:当pix_data_5<预设阈值且left_data≠0时,判定为段结束:若new_tag=1则mark自增1,并将当前段的row_sum、col_sum、pix_num写入数据ram,写地址为当前段所属星点序号;若new_tag=0,则先从数据ram读出该星点已有的row_sum、col_sum、pix_num,与当前段累加值相加后再写回数据ram,而后left_data清零;

12、情形四:当pix_data_5<预设阈值且left_data=0时,判定为背景像素:left_data清零,单帧星点序号ram当前列地址写入0。

13、在一些实例中,所述单帧星点序号ram的写入地址为当前像素的列坐标col_cnt_5,写入数据为当前像素所属星点序号;段起始时写入新分配序号或array[0~3]中的最大序号,段内延续时写入left_data,段结束及背景像素时写入0;该ram深度等于图像宽度,存储前一行所有像素的星点序号。

14、在一些实例中,当前帧全部像素处理完毕后,发送帧结束信号和星点个数信号,星点个数为mark-1。

15、在一些实例中,所述从数据ram读取每颗星点的累加结果,包括:

16、按星点序号从1至mark-1的顺序,从数据ram中逐一读出每颗星点的row_sum、col_sum、pix_num,分别送入除法器除以pix_num得到星点行中心坐标和列中心坐标,计算结果按序存入fifo,全部星点计算完成后发送完成信号供外部系统读取。

17、在一些实例中,所述分别送入除法器除以pix_num得到星点行中心坐标和列中心坐标,包括:

18、基于星点能量分布满足二维高斯模型的特性,利用最大似然估计法求解星点中心坐标,其解析解为行坐标均值和列坐标均值,即分别将row_sum和col_sum送入除法器除以pix_num,得到星点行中心坐标和列中心坐标。

19、在一些实例中,所述数据ram分为上单元ram和下单元ram两个独立单元,两个单元具有相同的写使能、写地址和写数据,均由情形三触发同步写入;读使能和读地址分单元独立控制,上单元ram用于情形三中new_tag=0时读出已有累加值以完成段合并,下单元ram在帧结束后以输出坐标计算结果;行坐标和、列坐标和、像素点个数各对应一组独立的数据ram。

20、在一些实例中,全局驱动时钟为单倍像素时钟,无需倍频;全部处理逻辑在单颗fpga片内实现,无需外部dsp或外部存储器;以片内ram替代寄存器数组存储星点序号及累加数据,兼容intel altera与amd xilinx系列fpga产品。

21、总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有益效果:

22、以“段”为处理粒度将计算任务从像素级提升至段级,段起始、延续、结束的判断与累加均在单拍内完成,段结束时写ram与写序号0并行执行,无需额外时钟周期,避免了因单像素周期内需完成判断、标注、累加和ram读写等一系列操作而被迫倍频的问题,以单倍像素时钟稳定驱动全流程,消除了高频时钟下的时序违例和功耗剧增风险;全部检测、标注、累加、存储及坐标计算逻辑在单颗fpga片内完成,仅使用片内ram和fifo,无需dsp、dpram或sdram等外部器件,消除了片间传输延迟,有利于轻小型化和低功耗设计;所有判断均为组合逻辑或单周期同步操作,处理时间与星图内容无关,每帧处理时钟周期数严格等于帧像素总数,保证帧时序稳定可预测;以片内ram替代寄存器数组存储星点序号和累加数据,将大量存储需求从查找表和触发器转移至ram资源,大幅降低逻辑资源占用,可部署于中低端fpga器件;数据通路设计仅使用标准ram和fifo,不依赖厂商专用ip核的特殊工作模式,兼容intel altera与amd xilinx等主流厂商全系列产品,可移植性强。