今天给大侠带来基于FPGA的单目内窥镜定位系统设计,由于篇幅较长,分三篇。今天带来第一篇,上篇,话不多说,上货。
导读
随着现科技的发展和社会的进步,信息科技迅速发展,我们可从互联网、电台等媒体获取大量信息。现代信息的存储、处理和传输变得越来越数字化。在人们的日常生活中,常用的计算机、电视、音响系统、视频记录设备、远程通讯电子设备无一不采用电子系统、数字电路系统。因此,数字技术的应用越来越广泛。尤其在通信系统和视频系统中,数字系统尤为突出。而随着FPGA的出世,数字系统更加受到人们青睐,它为数字系统的设计提供更加便捷的通道,使得数字系统设计可以芯片小型化,电路规模大型化,庞大的逻辑资源,可满足各种数字系统设计。
随着社会的发展,科学技术已经应用于各个领域,尤其是医疗领域尤为突出。而在医疗领域中,心脏电信号模拟器手术辅助仪器发展迅速。为了训练经验少的医生熟悉心脏手术的操作过程,而专门开发心脏信号模拟仪器,让医生迅速掌握心脏手术操作过程,成为一个经验丰富心脏手术医生。
因此,本文将于FPGA平台,以图像处理结合信号采集原理,实现医生在做心脏模拟手术操作导管的过程中,不需要观察心脏内部情况,即可获取导管头在心脏内部信息的功能,采用内窥镜摄像头采集视频和并对导管头进行跟踪定位,信号采集技术可将采集到的导管头在心脏内部触碰区域的信号采集出来送到专业医用仪器,进行心脏3D建模。
本设计的实现对医院培养的经验少的医生尽快掌握心脏手术操作流程很有价值,未来将可以培养更多从事心脏手术工作的医学专业毕业的学生或刚刚从事这个行业的社会医生。
第一篇内容摘要:本篇会介绍绪论,包括国际医疗器械发展趋势和现状概述、FPGA发展现状、FPGA 在医疗领域中的应用,还会有 FPGA 相关介绍,包括FPGA工作原理和FPGA设计流程等相关内容。还会介绍系统的设计,包括设计任务、方案论证、关键问题、解决关键问题的方法、总体设计(电源模块、采集模块、缓冲模块、显示模块)等相关内容。
一、绪论
在医疗器械领域,有助于医疗器械的发展,恢复心脏的功能。它也是最富有成果的领域之一。心血管疾病的治疗手段是医疗器械行业中最重要的产品,无论是在治疗效果方面还是其带动的利益方面,都是一样。心脏辅助装置,无论是在体内还是在体外,电子亦或机械,都变得越来越小,更容易植入。这些设备延长了患者的生命,心血管疾病。在医疗领域中,心脏电生理领域发展迅速。
心脏电生理领域,是以作用于生物体的电作用和生物体所发生的电现象为主要对象的生理学的一个分支领域。因为把随着神经等器官、组织的兴奋所产生的动作电位作为其活动指标是最容易记录的现象,所以常常用记录动作电位来深入研究神经系统等的机能。近代电生理学的发展多借助于细胞内电极和电子管、晶体管等放大技术的发展。由于熟练外科医生的数量较少,当前心脏病患者有机会得到手术治疗的几率只有6%,其中很大一部分患者在等待的过程中贻误时机而去世,绝大部分患者则在高危中带病生存。为解除病患的疾苦,在短时间内培养足量的外科手术医生就显得尤为重要。而当前紧张的医患关系,加之心脏手术自身的复杂性与危险性,使得实习医生通过在真实病患身上做手术从而获得经验的代价太过高昂,从而客观上使得他们成为熟练外科医生的经验积累期非常漫长,这与实际的需求明显相悖。因此着重于发展心脏电生理领域等医疗辅助手段。而这种医疗设备发展离不开图像处理技术。
FPGA也叫做现场可编程门阵列,目前在通讯领域中发展迅速,各种通讯算法使用FPGA加速,可节约成本和资源,提高通讯质量和稳定性。随着信息科技的发展发展,嵌入式系统设计技术已成为当今信息产业非常流行的技术、应用市场在航空航天、医疗、通信、网络通信、安全、广播、汽车电子、工业、消费市场、测试和测量等领域。随着技术的进步和发展,向越来越多的应用领域扩展。越来越多的设计已经开始从ASIC转向FPGA,FPGA在以各种电子产品的形式进入了我们日常生活中。
图像处理应用于各大领域中,尤其是在医疗仪器领域中尤为重要,在医疗领域中的对心电图的处理,内窥镜采集图形处理,随着电子科技的迅速的发展,FPGA逐渐在图像处理领域发挥着越来越重要的作用,其并行处理机制加快算法的实时处理,各种算法的实现基本上是流水算法,更加快了整个系统的实时处理速度,实时帧速保证在每秒25帧以上,甚至可达到每秒60帧左右的帧速。另外,FPGA不仅可以应用于图像处理,在通信领域也很强大,早期,FPGA最先应用于通信领域,基带编码、调制解调等算法实现,随着FPGA的进一步发展,逐渐应用于图像领域,医疗仪器的发展离不开图像技术和通信技术。因此,FPGA将在医疗领域将发挥着越来越重要的作用。
本设计是对心脏手术模拟器所用的导管头进行定位,旨在抓取导管头的坐标并显示供医生观察,方便医生观察心脏手术内部的情况,还有导管头所处的位置信息。而且在此基础上可扩展为多目摄像头,根据采集到的位置信息自动切换场景,定位导管头的空间坐标。
二、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的电平标准进行设置。
下面将介绍一些常用的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设计基本流程图
三、系统设计
本文设计是在摄像头的视觉中,可抓取到运动物体的位置,根据医学设备导管的特点,导管整根导管从显示屏边缘进入到摄像头视觉中,不论从那个方向进入,本文旨在抓取导管头端的位置,其他部分不需要。本设计基于FPGA实现,逻辑宏单元不能高于80%。
备选方案:
方案一:基于颜色的摄像头定位系统设计
方案二:基于帧差法的摄像头定位系统设计
方案三:基于背景差法的摄像头定位系统设计
论证方案:
方案一:基于颜色抓取导管头,是抓取特定的颜色分量或者是某个范围内的颜色空间来分割前景和背景,此方法需要在导管头上涂上特定的颜色,摄像头通过识别颜色来获取导管头的位置,此方案需要外部处理导管头,而且对背景要求比较高,故而舍去此方案。
方案二:帧间差分法是一系列连续的图像中,相邻的两帧图像做差分来确定目标轮廓的算法。对于目标处于复杂背景下也可很好的提取出目标轮廓的一种算法。具体做法是当视频场景中出现动态物体时,相邻两帧图像相减,然后去相减结果的绝对值,最后在二值化处理,即可得到运动图像的轮廓。如果场景中没有运动的物体处理结果中没有任何目标轮廓。这种方法类似于高通滤波器,高频动态部分突显,低频抑制,获取目标轮廓。但是也是由于这种方法对高频噪声比较敏感,所以在处理之前一般要去噪声处理。
帧间差分法的优点是由于帧间差分法是针对于运动物体变化来获取轮廓的,所以光线,背景等环境对这种算法的影响不大,处理结果比较稳定。缺点是由于帧间差分法是每隔一段时间将相邻两帧的结果帧差,两帧之间的时间的选择对结果的影响较大,在不同的应用场合中选择不同时间间隔,如果时间间隔较小而运动物体比较快,会导致形成两个目标物体,因为两个目标没有重复的部分。如果时间间隔较大而运动物体较慢,会导致检测不到目标物体,因为相邻两帧图像几乎没有重叠。
基于帧差法抓取导管头,通过导管头的动态变化来获取导管头的位置,此方案无需对导管头进行处理,而且对背景复杂度要求较低。然而,获取的目标二值图像主要体现边缘,中间空缺,需要做帧缓冲,在基于FPGA实现上,实现难度也略大。
方案三:背景差分法是非常经典且实用简单的算法,原理非常简单,就是处理带有目标的图像之前,预先存储一张未带有目标的图像,即背景图像,将其存储起来,等到实时处理时,将实时图像与背景图像相减,即可得到目标图像的轮廓。但是这种方法有一个致命的缺点,即当背景发生变化时,实时图像与背景图像相减的结果就不一定是目标轮廓了,因此这种算法会受到背景环境变化的影响,导致误判目标。要解决环境变化的影响,需要对背景的存储实时更新,即要实现背景更新算法,背景更新算法有很多,而且需要做多帧图像的缓冲,常用的背景更新算法有均值法、中值法、卡尔曼滤波法、高斯滤波法等。
基于背景差法抓取导管头,通过抓取的实时图像减去背景图像从而获得目标图像导管头的位置,此方案也不需要外部处理导管头,而且对背景复杂度要求较低,获取的目标二值图像饱和。然而,由于环境的可变性,导致结果定位不准确。因此,需要对背景图像实时更新。此方法的最大的难点就是在基于FPGA硬件算法上,背景更新算法实现难度比较大,背景更新算法的不同效果也有差异,根据实现的环境和难度,均值法、中值法、卡尔曼滤波法等算法相对适合FPGA实现。
根据上述方案的论证,总结出表一方案特点。
表3.1 方案特点
论证结果:综合上述三种方案的论证,结合方案在本设计实现特点和难易度,选择方案二来实现本次设计。
1. 图像帧缓冲问题;
2. 图像预处理;
3. 帧差处理问题;
4. 乒乓操作问题;
5. 格式转换问题;
6. 二值图像投影问题;
7. 判断正确的目标坐标问题。
图像帧缓冲:关于本方案的设计,图像的帧缓冲是技术重点也是技术难点,本方案需要至少三个端口同时访问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.3所示。
图3.3系统整体框图
FPGA系统因为有着低功耗和高性能等特点,其设计应用于各大领域中。而其系统级的供电问题对于电源的有效管理也是非常重要的。
在本系统中,各路模块需要供电电压,如VCC(5V)、3.3V、2.8V、2.5V、1.2V,这些电压将采用AMS1117芯片产生。AMS1117是一个正向低压降稳压器,AMS1117有两种:一种为固定输出电压,输出电压值有:1.2V、1.5V、1.8V、2.5V、2.8V、3.0V、3.3V;另一种为可调输出电压。对于AMS1117厂家做了保护系统,防止过热和过流。接一个22uF的电容,使AMS1117更加稳定。
本设计将采用摄像头传感器来作为采集模块,摄像头主要分为数字摄像头和模拟摄像头,也就是市场经常用到的CMOS和CCD摄像头。模拟摄像头也就三根线,RGB,通过AD转换为数字信号,终端接受信号,解码,便能得到视频图像。所有CCD芯片都属于模拟的设备。当图像进入计算机是数字的。如果信号在摄像头、采集卡两部分完成数字化的,这个是模拟摄像头。数字摄像头事实上是由内置于摄像头的数字化设备完成数字化过程,这样可以减少图像噪音。数字摄像头比模拟摄像头信噪比更高,而且更增加摄像头的动态区间、最大化图像灰度区间。
基于开发难度我选择使用OV7670 CMOS摄像头,如图3.4所示,在接口方面大致相同,主要有以下这些:
1) 都有配置寄存器来设置传感器功能参数,其使用SCCB总线和IIC总线协议;
2) 都有XCLK,PCLK,FRAME_VALID,LINE_VALID,DOUT[7..0]信号,主要是Sensor驱动时钟的输入以及采样时钟,帧有效信号,行有效信号,图像数据的输出。为了兼容,摄像头的输出都设置了8位,PCLK是像素时钟的2倍。
3) 另外还有STROBE,STABDBY,或者PWDN,闪灯,以及Sensor的开关,等功能,不同的摄像头可能功能有所不同。
图3.4 OV7670摄像头
SDRAM芯片设计具有价格低廉,缓冲速度快等特点,因此作为本设计首先存储器芯片,Synchronous Dynamic Random Access Memory,同步动态随机存储器,同步是指 Memory工作需要同步时钟,内部的命令的发送与数据的传输都以它为基准;动态是指存储阵列需要不断的刷新来保证数据不丢失;随机是指数据不是线性依次存储,而是自由指定地址进行数据读写。
本设计选用hynix公司生产的型号为H57V2562GTR 256M (16Mx16bit) Hynix SDRAM Memory 可稳定运行到200MHz时钟,4个bank,13位地址宽度,数据宽度为16位,可存储YCbCr(4:2:2)数据流,工作在视频采集环境下,可设置为页写突发,配合突发中断,构成任意突发长度读写,增加缓冲速度,应用于视频实时处理。
本设计选择使用VGA接口作为显示设备如图3.5所示,其通用性比较高,目前各种计算机设备均使用这种接口,VGA是社会上一种比较通用视频传输标准,其分辨率很高、输出频率迅速、色彩丰富多样等诸多好处,在市场上大量应用。不支持热插拔,不支持音频传输。
图3.5 VGA实物图
本篇到此结束,下一篇带来基于FPGA的单目内窥镜定位系统设计(中),介绍硬件设计,包括电源电路、FPGA外围电路、采集电路、缓冲电路、显示电路等相关内容,以及介绍软件设计,包括采集模块、缓冲模块、处理模块、解码模块、显示模块等相关内容。
END
后续会持续更新,带来Vivado、 ISE、Quartus II 、candence等安装相关设计教程,学习资源、项目资源、好文推荐等,希望大侠持续关注。
大侠们,江湖偌大,继续闯荡,愿一切安好,有缘再见!
精彩推荐
毕设:基于FPGA的FIR数字滤波器设计
FPGA零基础学习:SPI 协议驱动设计
在word文档中添加“原汁原味”代码
“FPGA产品设计与研发 ” 零基础入门及就业