FPGA也叫做现场可编程门阵列,目前在通讯领域中发展迅速,各种通讯算法使用FPGA加速,可节约成本和资源,提高通讯质量和稳定性。随着信息科技的发展发展,嵌入式系统设计技术已成为当今信息产业非常流行的技术、应用市场在航空航天、医疗、通信、网络通信、安全、广播、汽车电子、工业、消费市场、测试和测量等领域。随着技术的进步和发展,向越来越多的应用领域扩展。越来越多的设计已经开始从ASIC转向FPGA,FPGA在以各种电子产品的形式进入了我们日常生活中。
1.3 FPGA在医疗领域中的应用
图像处理应用于各大领域中,尤其是在医疗仪器领域中尤为重要,在医疗领域中的对心电图的处理,内窥镜采集图形处理,随着电子科技的迅速的发展,FPGA逐渐在图像处理领域发挥着越来越重要的作用,其并行处理机制加快算法的实时处理,各种算法的实现基本上是流水算法,更加快了整个系统的实时处理速度,实时帧速保证在每秒25帧以上,甚至可达到每秒60帧左右的帧速。另外,FPGA不仅可以应用于图像处理,在通信领域也很强大,早期,FPGA最先应用于通信领域,基带编码、调制解调等算法实现,随着FPGA的进一步发展,逐渐应用于图像领域,医疗仪器的发展离不开图像技术和通信技术。因此,FPGA将在医疗领域将发挥着越来越重要的作用。
本设计是对心脏手术模拟器所用的导管头进行定位,旨在抓取导管头的坐标并显示供医生观察,方便医生观察心脏手术内部的情况,还有导管头所处的位置信息。而且在此基础上可扩展为多目摄像头,根据采集到的位置信息自动切换场景,定位导管头的空间坐标。
二、FPGA相关介绍
2.1 FPGA工作原理
基于FPGA特殊的电路结构,FPGA能实现电路可编程主要体现在以下三个方面:
a. 可编程逻辑块
b. 可编程IO
c. 可编程布局布线
其基本结构由某种存储器(SRAM、 FLASH等)制成的4输入或6输入1输出的“真值表”加上一个D触发器构成。任何一个4输入1输出组合逻辑电路,都有一张对应的“真值表”,同样的如果用这么一个存储器制成的4输入1输出的“真值表”,只需要修改其“真值表”内部值就可以等效出任意4输入1输出的组合逻辑。这些“真值表”内部值是什么?就是那些01编码而已。如果要实现时序逻辑电路怎么办?这不有D触发器嘛,任何的时序逻辑都可以转换为组合逻辑+D触发器来完成。但这毕竟只实现了4输入1输出的逻辑电路而已,通常逻辑电路的规模那是相当的大哦。那怎么办呢?这个时候就需要用到可编程连线了。在这些连线上有很多用存储器控制的链接点,通过改写对应存储器的值就可以确定哪些线是连上的而哪些线是断开的。这就可以把很多可编程逻辑单元组合起来形成大型的逻辑电路。最后就是可编程的IO,这其实是FPGA作为芯片级使用必须要注意的。任何芯片都必然有输入引脚和输出引脚。有可编程的IO可以任意的定义某个非专用引脚(FPGA中有专门的非用户可使用的测试、下载用引脚)为输入还是输出,还可以对IO的电平标准进行设置。
2.2 FPGA设计流程
下面将介绍一些常用的FPGA开发工具、仿真工具以及综合工具。
a. 设计输入工具
目前设计输入工具有原理图输入、硬件描述语言输入、IP核输入等,其中原理图输入比较直观,但是不够灵活,不适合大型系统设计,因此硬件描述语言输入弥补了这一缺点。
b. 综合工具
目前有三种主流的综合工具,分别是Synopsys公司的Synplify/Synplify Pro、Leonardo Spectrum以及Xilinx自身的XST等。当然,Altera公司的Quartus II中拥有自带的综合工具。
Synplify/Synplify Pro由于其先进的时序驱动和行为最好算法引擎,具有占地面积小、合成速度快,大型集成工具的优点,使其得到了广泛使用。逻辑的合成主要是将硬件描述语言转换为电路且优化。
c. 仿真工具
目前最为人所熟悉和使用的仿真工具是ModelSim。仿真速度快、仿真精度高是ModelSim的主要特点。此外,还有一些颇具影响力的仿真工具,例如Cadence Verilog-XL和Synopsys VCS。ActiveHDL也是一款很有特色的仿真工具,它可以利用状态机分析视图进行状态机调试。
d. 布局布线工具
实现工具综合后的开发环境主要是ISE、Quartus II自己的映射和布局布线。
一般会有静态时序分析,主要报告关键路径和最大时钟频率。配置下载主要是基于不同的工具来生成一个流文件,并下载到FPGA中。
关于FPGA的设计流程主要有以下几个方面分别是功能定义/设备选型、设计输入、功能仿真、综合优化、综合后仿真、实现、布局布线后仿真、板级仿真和芯片的编程与调试步骤,如图2.1所示。
图2.1 FPGA设计基本流程图
三、系统设计
3.1 设计任务
本文设计是在摄像头的视觉中,可抓取到运动物体的位置,根据医学设备导管的特点,导管整根导管从显示屏边缘进入到摄像头视觉中,不论从那个方向进入,本文旨在抓取导管头端的位置,其他部分不需要。本设计基于FPGA实现,逻辑宏单元不能高于80%。
3.2 方案论证
备选方案:
方案一:基于颜色的摄像头定位系统设计
方案二:基于帧差法的摄像头定位系统设计
方案三:基于背景差法的摄像头定位系统设计
论证方案:
方案一:基于颜色抓取导管头,是抓取特定的颜色分量或者是某个范围内的颜色空间来分割前景和背景,此方法需要在导管头上涂上特定的颜色,摄像头通过识别颜色来获取导管头的位置,此方案需要外部处理导管头,而且对背景要求比较高,故而舍去此方案。
方案二:帧间差分法是一系列连续的图像中,相邻的两帧图像做差分来确定目标轮廓的算法。对于目标处于复杂背景下也可很好的提取出目标轮廓的一种算法。具体做法是当视频场景中出现动态物体时,相邻两帧图像相减,然后去相减结果的绝对值,最后在二值化处理,即可得到运动图像的轮廓。如果场景中没有运动的物体处理结果中没有任何目标轮廓。这种方法类似于高通滤波器,高频动态部分突显,低频抑制,获取目标轮廓。但是也是由于这种方法对高频噪声比较敏感,所以在处理之前一般要去噪声处理。
帧间差分法的优点是由于帧间差分法是针对于运动物体变化来获取轮廓的,所以光线,背景等环境对这种算法的影响不大,处理结果比较稳定。缺点是由于帧间差分法是每隔一段时间将相邻两帧的结果帧差,两帧之间的时间的选择对结果的影响较大,在不同的应用场合中选择不同时间间隔,如果时间间隔较小而运动物体比较快,会导致形成两个目标物体,因为两个目标没有重复的部分。如果时间间隔较大而运动物体较慢,会导致检测不到目标物体,因为相邻两帧图像几乎没有重叠。
基于帧差法抓取导管头,通过导管头的动态变化来获取导管头的位置,此方案无需对导管头进行处理,而且对背景复杂度要求较低。然而,获取的目标二值图像主要体现边缘,中间空缺,需要做帧缓冲,在基于FPGA实现上,实现难度也略大。
方案三:背景差分法是非常经典且实用简单的算法,原理非常简单,就是处理带有目标的图像之前,预先存储一张未带有目标的图像,即背景图像,将其存储起来,等到实时处理时,将实时图像与背景图像相减,即可得到目标图像的轮廓。但是这种方法有一个致命的缺点,即当背景发生变化时,实时图像与背景图像相减的结果就不一定是目标轮廓了,因此这种算法会受到背景环境变化的影响,导致误判目标。要解决环境变化的影响,需要对背景的存储实时更新,即要实现背景更新算法,背景更新算法有很多,而且需要做多帧图像的缓冲,常用的背景更新算法有均值法、中值法、卡尔曼滤波法、高斯滤波法等。
基于背景差法抓取导管头,通过抓取的实时图像减去背景图像从而获得目标图像导管头的位置,此方案也不需要外部处理导管头,而且对背景复杂度要求较低,获取的目标二值图像饱和。然而,由于环境的可变性,导致结果定位不准确。因此,需要对背景图像实时更新。此方法的最大的难点就是在基于FPGA硬件算法上,背景更新算法实现难度比较大,背景更新算法的不同效果也有差异,根据实现的环境和难度,均值法、中值法、卡尔曼滤波法等算法相对适合FPGA实现。
根据上述方案的论证,总结出表一方案特点。
表3.1 方案特点
论证结果:综合上述三种方案的论证,结合方案在本设计实现特点和难易度,选择方案二来实现本次设计。
3.3 关键问题
1. 图像帧缓冲问题;
2. 图像预处理;
3. 帧差处理问题;
4. 乒乓操作问题;
5. 格式转换问题;
6. 二值图像投影问题;
7. 判断正确的目标坐标问题。
3.4 解决关键问题的方法
图像帧缓冲:关于本方案的设计,图像的帧缓冲是技术重点也是技术难点,本方案需要至少三个端口同时访问sdram,第一个是camera写入到sdram 不同两个的存储区,第二个和第三个是将两个存储区的数据同时输出,所以为了达到这一点要求需要做sdram双缓冲,sdram写一端接了两个fifo,读一端接了两个fifo,这样就可以满足上面的方案需求。
图像预处理:图像预处理是通过形态学算法处理的,有腐蚀算法和膨胀算法,其中腐蚀算法可去除孤立噪点,而膨胀算法可扩充目标像素点数。
帧差处理:帧差就是两帧图像相减得到的值,到底是前一帧减去后一帧还是后一帧减去前一帧,理论上来说都可以,这本项目中,我使用两帧相减的绝对值来输出,所以,不管是谁减谁都无所谓了。
乒乓操作:乒乓操作问题是很多通信、图像项目中都会用到的技术手法,原理就是写操作是当采集到的第一帧图像来到时,将这帧图像存储到第一个缓冲区中,当第二帧图像来到时,将这帧图像存储到第二个缓冲区中;当第三帧图像来到时,将这帧图像存储到第一个缓冲区中,当第四帧图像来到时,将这帧图像存储到第二个缓冲区中,...,以此类推;读操作同理。关于缓冲区的切换是一个易错的问题,如果使用采集模块或输出模块的完成信号来切换缓冲区,会造成数据堆积在fifo中被复位信号清除,导致部分数据丢失。所以我采用sdram内部发出完成信号来作为乒乓操作缓冲区的切换信号。
格式转换:在格式转换中,需要把YUV422转成YUV444,再把YUV444转成RGB888,最后把RGB888转成RGB565,其中YUV444转成RGB888采用查找表的方式。
二值图像投影:二值图像投影分为水平方向投影和垂直方向投影,水平方向投影就是把x轴方向各个地址对应的数据加在一块,垂直方向投影就是把y轴方向各个地址对应的数据加在一块。最终存储起来就得到二值图像的投影。
判断正确的目标坐标:投影的结果可以算出四条边界线,可确定目标所在区域范围。通过边界线可得到具体的端点坐标,示意图如图3.1所示。示意图图3.2为图3.1可放大区的放大图像,通过横轴的边界线可以获取到端点5和端点6,然后计算出他们的中心端点7,接着用右边界线减去端点7的纵坐标得到的结果和用端点7的纵坐标减去左边界线的结果相比较,可确定导管头摆放的方向,然后判断处在边界上的点为非目标点,未处在边界上的点为目标点,最后将目标点输出,即为导管头端坐标。
图3.1 二值投影示意图
图3.2二值投影放大示意图
3.5 总体设计