在一些姿态检测的实际应用中,需要在被测对象上安装激光探测器[1],利用CCD相机捕捉激光光斑来检测观测对象的实际情况,光斑图像质心坐标的提取是图像处理技术中常见的问题,激光的瞬时和高速性是激光光斑图像的重要特征[2]。为了实时准确地获取激光光斑质心的坐标,相机要求以300帧每秒的速度进行采集。原设备原始应用场景为工业高清相机通过专用Camera Link电缆连接图像采集卡,图像采集卡插入计算机内部,计算机接收图像数据后进行信号处理运算,质心算法的实现在计算机上完成[3]。本文通过对原设备的结构进行优化,将算法部分移植到硬件环境中形成相机控制器,使得摄像机与计算机可以远距离部署,一台计算机可以控制和接收多台相机数据并同时进行信号处理,并且对计算机的配置要求较低,有灵活的扩展性。在质心算法研究方面,将计算机软件实现的算法用硬件描述语言Verilog设计实现,获取激光光斑的实时质心坐标。
激光探测器形成的激光光斑在CCD表面的光强分布可以看作以中心对称的高斯分布[4],所以在激光光斑质心坐标算法中,可以用光斑光亮的最强点作为激光光斑的质心坐标,对于CCD数字视频信号来说就是灰度值最大的那一点的坐标值[5]。具体算法如下:
第一步:噪声采集。假设图像x方向与y方向分别有m与n个像素点。在无激光照射CCD情况下采集N幅图(N理论上越多越好,实际N值手动可设即可),databuffa[m][n]为第a幅图的数据。对N幅图进行求均方根,即可得到噪声数据。
第二步:去噪声。此时开始进行激光光斑的采集,CCD所采集的每幅图数据为h[m][n],进行去噪声处理,将CCD所采集的数据与采集算好的噪声相减。如果低于最小灰度值0则为0;如果高于最大灰度值255则为255。
第三步:去一定比例的最大灰度值,比例系数为p。此时经过去噪声的图像数据h[i][j]还具有一定的干扰,采用阈值去掉干扰,阈值为最大灰度值的比例数。首先寻找图像的最大灰度值,然后进行去掉阈值。
第四步:进行质心计算。CCD所采集图像质心即图像灰度的重心,i与j分别为两个方向的坐标,g[i][j]为像素点(i,j)坐标的灰度值,则图像质心位置坐标为:
式中x、y即为图像质心的坐标。
FPGA的特点是数字逻辑的思维与并行的处理方式。FPGA的并行处理能力使得它有着更高的处理速度,让人们更青睐于这种可编程逻辑方式去实现所需要的算法。本文的目的是将CCD采集图像质心算法用可编程逻辑Verilog语言去实现所需算法,为了实现上述算法,需要对算法进行必要的改造。
第一步:噪声均方根的采集实现。对于数字逻辑中只有0和1之分,灰度图像的颜色由8位二进制来表示,故灰度颜色由0~255这256个数据来表示。故这里不需对根号内数据进行开方,而是直接根据根号下的数据即可算出均方根的结果,因为这里的结果都是四舍五入后的整数。
第二步:去噪声的实现。此算法可直接用可编程逻辑实现,与原算法一致。
第三步:去一定比例的最大灰度值中比例数p是一个0~1之间的小数,在实际应用中小数可以通过浮点数的方法来表示,浮点数的表示有32位与64位的表示方法。所以本文的设计方法是将0~1的数与0~100的数字一一对应,在后续再转换缩回比例,求出数据。例如0.16对应整数16,这样只需要7位二进制数即可表示,节省了寄存器占用的空间,利于算法的实现。
第四步:质心计算的实现。第三步中的质心计算的算法方式由于求矩阵过程复杂,运算量大,不适用于可编程逻辑方式,为此将此算法进行了转换。一种基于函数转换的快速搜素质心算法,利用目标质心与目标上所有各点间距离之和值最小的原理,快速求出质心。此算法适用于灰度图像,对灰度图像求质心具有广泛的用途与实际的意义。应用此算法后,n个乘法转换成了1个乘法,便于Verilog语言去实现。
将改进后的算法应用到可编程逻辑Verilog语言中后,实现了光斑质心算法的功能并能够实时求出质心的坐标。通过上位机选择需要算出的N幅图得到的噪声系数,将求出的噪声系数存入RAM中,当激光照射后读出RAM中存储的噪声系数值即可。本设计包括噪声系数模块,去噪声模块与质心坐标算法3个模块。图1为光斑质心算法的总体架构图。
噪声系数模块:初始化后检测ready信号,ready拉高表示外部输入已经准备好可以接收数据,可保证在一帧图像数据内的连续性。在准备好后等待pulse_in信号的到来,pulse_in为脉冲信号,当接收到此信号时表示通知模块需要计算噪声系数。pixel_num为像素值选择, frame_num为帧数选择,范围是0~131 072。data_in为输入的图像数据8位灰度值,noise_req为噪声系数输入数据请求信号,当此信号拉高后,输入信号data_in在下一拍输入数据。noise_done为噪声系数计算完成信号,当计算结束并没有接收到重新计算信号pulse_in时,noise_done一直拉高来表示噪声系数模块处理完成。在noise_done高电平期间,输入来自去噪声模块的地址信号addr_in,即可读出RAN中对应地址的数据databuffnoise。
去噪声模块:在noise_done高电平期间可启动去噪声模块。read_en为脉冲信号,一个脉冲可接收一帧图像数据。proportion信号是上位机发来的比例系数,范围在0~100之间,表示0~1之间的数。在接收到read_en脉冲信号后,发出数据请求信号data_req,data_req拉高后输入dec_in数据信号,由于需要求出一帧图像的最大图像数据,所以会有一帧图像的延迟,当输出图像数据有效data_valid信号拉高时,输出去噪后有效的pixel_data数据,在data_valid信号拉高后输出的pixel_data数据会传到质心算法模块中进行计算。图2为去噪模块仿真结果。
质心坐标算法模块:输入的request_in信号是去噪声模块的输出信号data_valid,在request_in信号有效时,输入的数据gravity_in信号有效,与去噪模块的输出数据信号pixel_data线性连接。在信号请求输出req_out高脉冲同时输出质心坐标xy_pos信号,输出的x、y坐标都是10位二进制数表示,根据需求以32位xy_pos信号输出,高25~16位填充x坐标,9~0位填充y坐标,其他填充0。通过各个模块的验证可看出算法符合基本要求, 最后得到如图3所示的3个模块整体的顶层模块仿真结果图。
将此算法用C++在VS2012上运行并验证质心坐标是否正确,输入相同输入数据,验证结果如图4所示。
通过分析和仿真验证了设计的正确性,CCD图像质心算法被很好地应用到可编程逻辑语言中,FPGA的高速并行优点使得算法可以达到流水线高速运行,由于相机的图像采集速度可达到每秒300帧,为了符合这样的高速采集能力,本文采用了流水线算法可实时算出质心坐标供上位机采集和使用。
本文所设计的光斑质心定位算法是基于实际应用的激光探测器相机控制器的算法实现部分,该算法的实现使得摄像机与计算机可以远距离部署,将复杂算法的运算量交给控制器去处理,减轻了计算机的工作量去处理更重要的事情。该方法适用于有一定存储空间的FPGA芯片去实现,注重高速与实时性,对工业高清相机这种高精度要求的应用有一定的实用价值。
全部0条评论
快来发表一下你的评论吧 !