引 言
当前,医用无线内窥镜已有产品问世。以色列GI公司早在2001年5月即推出其M2A无线内窥镜产品,并获得美国FDA认证。GI公司生产的胶囊型内窥镜长为26 mm,直径为11mm,重3.5g;采用微功耗CMOS图像传感器,可观察视角为14O°,可看清0.lmm左右的物体,采集速度为2帧/s。日本RF公司也于2001年底研制出NORIKA3胶囊型内窥镜系统。该产品采用超小型CCD摄像头,含有8个镜头,可观察视角为360°,图像帧率可达30帧/s。“NORIKA3”利用位于药丸内的转子线圈与产生磁场的体外定子线圈形成马达结构来实现药丸系统姿态控制。RF公司在其网站上发布了产品的设计模型。此外,Gong和Park等人电独立发表论文,描述了各自关于无线内窥镜的设计。
目前国内尚无独立制造该产品的能力,而国外的产品价格昂贵,因此,研发具有自主知识产权的无线内窥镜产品具有重要意义。本文介绍无线内窥系统的系统结构,图像压缩标准JPEG-LS在ARM7平台上的实现,以及实现过程中所采用的调试方法、优化方法。
1 系统组成与工作原理
1.1 内窥系统组成结构
如图1所示,无线内窥镜系统主要由主机和从机(无线内窥镜)组成。从机由摄像头采集原始图像,经过压缩处理,通过无线方式把压缩后的图像数据传输给主机;主机通过USB连接蓝牙适配器接收压缩图像,并转发给PC上的管理软件,管理软件将图像解压缩并显示出来。
图1内窥系统结构框图
1.2 无线内窥镜组成结构
如图2所示,无线内窥镜采用CPLD芯片EPM7256-144,实现30万像素CMOS摄像头OV7660的图像采集控制,以及数据和地址总线的切换。利用Atmel公司的ARM7芯片AT91R40008,实现JPEG-LS无损图像压缩与蓝牙无线数据传输,实现温度、压力采集以及可控光源和系统控制。CPLD和ARM7之间的图像数据交换通过8位数据总线实现,ARM7和CPLD之间的握手控制则通过I/O口线实现。由于图像数据量较大,按640×480分辨率、8位图像的格式计算达几十万字节,故本系统外部扩展了2片上作在乒乓方式的512KB的SRAM作数据缓存。
图2无线内窥镜硬件结构框图
1.3 系统工作原理
内窥系统可以实现图像的连续采集以及温度、湿度、照明亮度等的控制。其中图像采集是系统的核心,其工作流程如下:
①默认情况下,系统工作在休眠状态。
②工作人员通过PC管理软件发送命令开始采集图像,软件通过USB接口把命令发送给蓝牙适配器,然后发送给无线内窥镜。
③内窥镜接收到图像采集命令后,ARM控制CPLD开始采集图像数据。
④CPLD把采集到的一帧图像数据写入一块SRAM中,把ARM的总线切换到该SRAM上,并通知ARM进行压缩;同时CPLD往另一块SRAM中继续采集下一帧图像,便于提高系统的吞吐率。
⑤ARM通过蓝牙模块返回响应命令,并返回采集JPEG-LS图像的头信息。
⑥PC管理软件发送命令接收下一行压缩图像,ARM压缩该行原始图像,并发送压缩数据;如果出错,可以重新发送。重复本步骤可以获取整帧压缩图像。
⑦PC软件对压缩图像解码并显示,并提供其他附加功能,如图像处理、保存等。
⑧重复步骤②~⑦,获取下一帧压缩图像。
由上述流程可以看出,JPEG-LS压缩以及无线信道传输决定整个系统的图像传输速率。无线传输采用蓝牙技术,其标称空中速率为1 Mbps,不易提高;因此,系统设计的核心是JPEG-LS的编码效率。
2 ARM与摄像头接口设计
系统采用美国Omni Vision公司(简称为“OV公司”)开发的CMOS彩色图像传感器芯片。该芯片将CMOS光感应核与外围支持电路集成在一起,具有可编程控制与视频模/数混合输出等功能。
(1)SSCB配置
为使芯片正常上作,需要通过SCCB总线来完成配置工作。SCCB总线是OV公司定义的一套串行总线标准,与I2C总线类似。配置时,主要是写OV7660的内部寄存器,使芯片输出格式正确的彩色图像数据。OV7660共有100个左右的寄存器可以配置,其数据手册并未提供可用的配置值。系统调试过程中,通过各种测试,测出以下一系列配置数据,可使OV7660输出颜色丰富的图像,如表l所列。
(2)图像数据访问
AT91R40008不带摄像头接口,因此系统增加了一块CPLD实现CMOS摄像头的时序,如图3所示。ARM只须访问SRAM就可以访问图像数据。CPLD确保ARM的总线每次都只挂接一块有完整图像的SRAM。
图3ARM与CPLD接口设计
3 ARM与蓝牙接口设计
蓝牙是无线数据和语音传输的开放式标准。它将各种通信设备、计算机及其终端设备、各种数字系统,甚至家用电器,采用无线方式连接起来。为了优化系统设计,我们采用性价比高的CSR BC2实现蓝牙无线串口。CSRBC2是一款高度整合的模块级蓝牙芯片,主要包括:基带控制器、2.4~2.5GHz的数字智能无线电和程序数据存储器。通过该模块,系统可以提供无线标准UART接口,支持多种波特率(如9.6 kbps、19.2 kbps、38.4 kbps、57.6kbps、115.2 1kbps、230.4 kbps、460.8 kbps、92l.6 kbps)。本系统经过测试发现,当速率为460.8 kbps时,蓝牙芯片能够正常工作;而在921.6kbps时,会有很高的误码率。蓝牙模块接口电路如图4所示。
4 JPEG-LS图像编码
系统采集的原始图像相关性大、数据量大,需要进行图像压缩。医学图像要求将图像质量放在首位,因此必须采用无损压缩算法。本系统采用静态图像无损压缩技术JPEG-LS,它是目前无损压缩算法中性能较好的一种算法。JPEG-LS是ISO/ITU组织提出的最新的连续静态图像近无损压缩标准。该标准采用LOCO-I(Low Complexity Lossless Compression for Images)核心算法,建立简单的上下文模型,在低复杂度的情况下实现了高压缩率;同时,算法对图像逐行进行压缩,降低了系统对图像缓冲区的要求。
4.1 JPEG-LS工作原理简介
如图5所示,JPEG-LS的编码过程主要包括预测、上下文建模和熵编码。核心算法LOCO-I采用邻域非线性预测和Golomb熵编码。
图5JPEG-LS编码流程
上下文建模是JPEG-LS编码的基础,使用的建模方法是基于对上下文的认识。上下文首先根据图5中a、b、c、d处像素值决定对x处像素足采用常规模式编码还是采用游程模式编码。当从上下文估计的连续像素在近似无失真编码要求的容限内几乎完全相同时,选择游程模式;否则,选择常规模式。
常规模式下首先完成预测。预测器对位于a、b、c等3个邻近像素的重建组值Ra、Rb、Rc进行综合,形成x像素的预测值Px,即:
预测误差是x像索的实际值和预测值的差分。通过一个与上下文有关的项对预测误差进行修正,以补偿预测中的系统偏移。如果采用近无损编码,则要对预测误差进行量化,所允许的最大误差用一个“NEAR"参数表示。对已修正的预测误差进行Golomb编码。Golomb编码相当于几何分布下的Huffman编码。它依赖于上下文,而前面编码的预测误差也是以相同的上下文为基础。
为进一步提高数据压缩效率,JPEG-LS引入了游程模式。此时编码过程直接跳过预测和误差编码程序:编码器从x处开始对像素值和a处像素重建值相同的一系列连续像素进行计数,即统计游程的长度。当遇到一个具有不同值的像素或当前行的行尾时,游程终止。该游程长度经过一个专门的性能更好、更适用的Golomb编码扩展程序来编码。
4.2 JPEG-LS的移植问题
本系统使用HP实验室提供的开源JPEG-LS开发包。完整的JPEG-LS开发包支持多种颜色模型,如多平面压缩、逐行或者逐点等压缩方式。本系统考虑到ARM系统资源的限制,只裁减了其中的逐行单文件压缩方式。原始开发包运行在Linux或者Windows平台上,移植过程最主要的工作包括3点。
①裁减不必要的功能,如原始开发包中对多图像编码的支持。
②针对系统设计移植后的接口,如本模块移植后,只提供以下几个接口:
jls_global_init,全局初始化函数,计算查询表等,只需要启动时调用一次;
jls_image_init,每帧图像开始压缩时都要调用一次的初始化;
jls_encode_one_line,压缩一行图像。
③对原开发包中使用的动态内存分配需要移植,解决的方案有2个:
开发一个简单的内存管理模块;
手动分配内存。
考虑到源码包中使用的动态内存不多,系统采用第2种方案。在移植过程中,建议先在PC上分配好一大块内存,然后,给开发包中需要分配的地方手动分配。在PC上调试通过之后,就可以直接在ARM上面使用了。
5 调试及优化方法
5.1调试方法
嵌入式系统的调试是一个很繁琐而复杂的过程。在调试之前划分好模块,可以大大提高调试效率;另外为了调试,还需要添加一些计划项目之外的调试工具。
本系统的调试工作分为3个部分。
(1)蓝牙无线链路层调试
蓝牙无线链路层的调试可以直接借助PC上很多现有的串口工具来实现。
(2)CMOS摄像头调试
CMOS摄像头的调试有两个部分:SCCB配置时序、RGB图像数据时序。
一般的处理器都不带SCCB接口,因此要用处理器的口线模拟SCCB时序。此时的调试一般都是通过示波器观察模拟的时序,看足否符合芯片手册上的要求。为了验证是否正确,一般可先读一个指定的寄存器(这些寄存器都有出厂默认值);然后写一个数据,读取出来验证是否吻合。
RGB图像数据时序由CPLD产生,此时的调试需要ARM来配合。本系统在调试时,在PC上编写了一个简单的串口接收程序,ARM把SRAM中的图像数据通过串口发送给该PC,PC上的程序把这些原始的RGB数据插值并显示出来,从而可以得知CPLD的时序是否正确。当然,调试时序时,示波器仍然是必不可少的工具。
(3)JPEG-LS算法调试
JPEG-LS算法的调试分为两个步骤:PC上的算法验证和目标板上的调试。
PC上的算法验证使用VC6.O模拟目标板上的运行环境,测试目标板上的各个功能接口。本部分的验证代码可供下载。
目标板上调试时,还是要借助串口,把压缩的图像和原始图像通过串口发送至PC。Pc上的JPEG-LS解码程序解码压缩图像,然后与原始图像对比,从而找出算法中的错误。
5.2 优化方法
为提高图像传输的帧率,本系统主要采用了2种优化方法。
(1)硬件优化
硬件优化主要是在CPLD采集数据时,使用双缓冲,使得连续采集下一帧图像和传输上一帧图像可以并行,从而提高系统的吞吐率。
(2)软件优化
软件优化的作用在本系统的调试过程中效果明显;本系统的第一个版本,图像采集速率仅为3 s/帧;通过软件优化后,达到了最终的O.3 s/帧。其优化如下:
①循环外移,避免在循环中重复运算;
②频繁使用的变量申明为寄存器变量;
③把所有的JPEG-LS编码函数代码拷贝到RAM中执行。
默认情况下,所有的代码都存放在Flash中。ARM运行时,从Flash中读取指令并且执行。众所周知,Flash的访问速度相对RAM而言,相差一个数量级,因此,如果把关键代码放在RAM中,执行速率将会大大提高。而AT9lR40008内部自带512 KB的RAM,足够本系统使用,因此,这个方法可行。
解决的方法有两个,一是写一个启动程序,在启动时,把系统所有的代码都拷贝到RAM中,这样系统速度会提高。然而,该方法实现起来较麻烦,且如果程序扩展,可能会超过RAM的512 KB限制。因此,本系统采用另外一个简单方法。采用IAR Embedded Workbench开发环境,通过阅读其编译器手册发现,在函数之前添加一个__ramfunc伪指令,那么链接器在生成启动代码时,会将该函数拷贝到RAM中,从而提高运行效率。其使用例子如下:
ramfunc void encode_oneline(vcrid)
通过使用该方法,系统的运行效率提高了约lO倍。
结语
本系统以ARM为核心,实现了JPEG-LS无损图像压缩算法,并日结合CPLD实现了CMOS摄像头的时序控制。通过蓝牙传输,实现了数字化的无线内窥系统。
本系统具有良好的扩充性,可以使得系统更加微型化。首先,如果采用CSR公司更新的BC3系列芯片,则将融合ARM核以及蓝牙功能,可以更加减小内窥镜的体积。最重要的是,如果发展自主产权的内窥镜芯片,那么以现有的SOPC技术,可以将ARM核、CPLD逻辑门以及蓝牙通信功能集成在一起,形成无线内窥镜的集成解决方案,从而使其产业化成为可能。
本系统在实现过程中,完成了一系列的调试工具,积累了调试以及优化经验。我国现有的医疗设备开发技术相对比较落后,在此分享,希望对同类型的产品设计以及芯片生产能有一些参考价值。