基于嵌入式Linux的B超图像打印的实现
引言
B模式扫描超声诊断仪(简称B超)是一种医学影像设备,其扫描结果是一幅多灰度级(通常有256级以上)的图像。 B超图像作为重要的诊断依据,常需输出其硬拷贝,因此任何B超仪都需配备图像打印输出接口。此类接口形式多样,适合于不同的图像打印设备。
近年来由于普及的需要,小型B超越来越多地出现在市场上。这种设备的特点是体积小,售价低,但是功能比较单一,常用于空间限制或者对成本比较敏感的场合。目前多数小型B超基于8位微处理器,限于其处理器的有限处理能力,只配备标准视频(Video)接口作为其图像输出通道,因此只能使用视频打印机(Video Printer)作为图像输出设备。这种配置带来若干缺点,首先视频打印机通常价格昂贵而且必须使用专用打印纸,打印成本较高,这与小型B超的低成本诉求相矛盾;其次数字形式的图像信号必须经过一次D/A转换才能变换成模拟的[1]视频信号,这不仅增加了电路的复杂性而且容易引起图像质量下降。也有一些小型B超仪基于个人计算机(Personal Computer, PC)和Windows平台,在这一平台上使用普通的喷墨或者激光打印机输出超声图像,上述问题得以解决[1][2]。但是这一平台价格高,体积和功耗都较大,而且稳定性不够好,对于小型B超并不是一个理想的选择。
对于小型B超而言,比较理想的方案是在嵌入式平台上实现普通喷墨或者激光打印机图像输出。近年出现的32位[3]及64位嵌入式微处理器集成度高,处理速度快,接口丰富,为这一方案的实现提供了可能。由于32位和64位嵌入式处理器适合使用Linux和Windows CE等操作系统,因此相对8位处理器来说软件开发也比较简单。其中由于Linux是一种开源和免费的系统,因此所受到的支持特别多,资源很丰富,尤其适合于本文所涉及的应用对象。
本文实现了一种基于32位嵌入式微处理器ARM9200的B超图像打印方案,使用嵌入式Linux作为其操作系统,在HP DeskJet和Epson Stylus Photo系列喷墨打印机上成功打印出256灰度级的B超图像。
1、Linux下的打印方案
基于PC的Linux已经有了多种相当完善的打印方案,不仅可以在多种系列的普通喷墨或激光打印机上输出照片质量的彩色和黑白图像,而且支持多打印任务处理和多打印机控制。图1是广泛使用的基于PC Linux的打印方案的一个例子,在这个方案中,CUPS(Common UNIX Printing System)[4]是其核心,多任务管理由CUPS中的“打印管理”模块担任,打印格式转换则由其滤波器(Filter)[5]系统完成。CUPS将Linux传送过来的各种格式的文档通过适当的滤波器转换成PS (PostScript)语言 [6]代码,这一代码可以通过Backend直接输出至支持PS
图1 Linux下的打印方案
语言的打印机,也可以再通过调用GhostScript程序转换成非PS语言打印机所使用的各种页面描述语言(Page Description Language, PDL)[7], 然后经Backend输出。特别要注意的是除了这两种Filters,CUPS还具有不经过GhostScript程序而将图像文件(image)直接转换成非PS打印语言的Filter。由于历史的原因,基于Linux的几乎所有打印方案都支持PS语言,PS打印机接收到这种文件后,利用其内嵌的光栅图像处理器RIP(Raster Image Processor)[8]将PS描述转换成指令驱动打印机工作。由于版权费的问题,近年来支持非PS语言的打印机大量出现,而且渐渐成为普通喷墨和激光打印机的主流。这些非PS语言有HP公司的PCL(Print Control Language)[9],Epson公司的ESC/P[10]等。GhostScript[6]是一种软件RIP,用于将PS文件转换成非PS设备支持的PDL格式。Foomatic是用户统一界面,用户通过它来配置打印机参数与驱动,只需选择打印机型号而无需关心配置的具体过程。
这是一个完备的方案,功能强大,操作简便,支持的打印机丰富,完全满足B超图像输出的要求。但由于嵌入式平台资源有限,难以支持这样一个完备的系统,所以我们根据需要对其进行适当剪裁。
2、基于嵌入式Linux的小型B超仪的打印方案和实现
本文所关心的小型B超仪的硬件平台是一个32位的嵌入式微处理器,操作系统采用嵌入式Linux, 在这个平台上要完成的工作有超声图像的传送,显示,打印,人机界面,整机控制,还有非易失性存贮,如CF卡(Compact Flash Card)、SD卡(Secure Digital Memory Card) 存贮等。如图2所示,打印控制只是其中的一个功能。打印机输出的对象是256256像素,256灰度级的黑白图像。为了重现这些灰度级,图像的每个像素(pixel)需要由1616个墨点(dot)来表达,因此输出图像的横向和纵向的墨点数将是25616=4096dots。如果输出图像的尺寸为10cm10cm(3.94”3.94”),可以算出打印机的分辨率需要达到4096/3.94=1040dpi(dots per inch)。为此,我们选用分辨率为1200dpi的HP DeskJet和1440dpi Epson Photo系列喷墨打印机,这两个系列的打印机使用USB接口,分别支持PCL语言和ESC/P语言。它们性能优良,都可以输出照片质量的图像, 而且便宜实用,有A4幅面的便携式型号可供选用,非常适合小型B超。
图2 基于嵌入式Linux的小型B超仪控制系统
从图1可知,利用CUPS把图像文件转换成所选用打印机支持的页面描述语言有三条转换路径,一条是通过ImagetoPS, PStoRaster和RastertoHP(或RastertoEpson)三个过滤器;第二条是通过ImagetoRaster和RastertoHP(或RastertoEpson)两个过滤器;第三条是先通过Imagetops过滤器把图像文件转换成PS文件,然后再调用GhostScript程序把PS文件转换成PCL或ESC/P文件。在这三条路径中,第一条和第三条都先把图像文件转换成PS格式,然后再作进一步的变换,体现了Linux的传统要求,但是第一条路径用到了三个过滤器,第三条路径需要调用一个庞大的GhostScript程序。相比之下第二条路径最为简捷而节省资源,所以本文选用这一条路径,Backend过滤器选用USB以配合所选打印机的接口。图1中的虚线表示了本文选用的实现路径,而其中的灰色框代表了为本系统用到的过滤器。
由于B超的打印任务单一,通常并没有多任务的要求,而且也不可能需要多台打印机同时工作,所以本文中舍弃了Foomatic和CUPS中的管理模块,将打印管理纳入整机控制中。整机控制的人机界面采用MiniGUI[11],打印控制属于其中的一个功能控件,用来进行打印机和输出文件选择以及启停控制。其程序流程图如图3所示:
图3 本系统程序流程
经过裁减,在编译代码的过程中译出CUPS过滤器系统中的ImagetoRaster、RastertoHP和RastertoEpson以及Backend中的USB传输的可执行代码。在编译的过程可以发现,将整个CUPS,GhostScript和Foomatic源代码编译完成后,需占用的空间有30M之多,而按照本文的方案经裁减编译后,可执行代码总共占用不到600k字节,这就大大地节省了系统的开支。编译后的代码移植到本文所使用的控制器平台后程序运行正常,我们试验了HP DeskJet 450、Epson Stylus Photo RX510等型号的打印机,图像打印效果良好。不仅可以打印本文的B超系统采集的B超图像,而且可以打印载入到本系统中的许多格式的图像,如bmp、jpeg、png格式等。
3、讨论
本文详细地分析了典型的基于PC的Linux下的完备打印方案,并针对本文的具体应用,对其进行适当裁减,实现了嵌入式 Linux下的B超图像的图像打印,有效地解决了小型B超仪使用视频打印机的高成本耗费问题。同时,该方案不仅仅适用于超声设备中,也适合应用于各种基于嵌入式Linux的移动设备。
本文作者创新点:目前多数小型B超基于8位微处理器,限于其有限的处理能力,使得控制系统不够灵活,超声图像的打印输出也只能通过视频打印机。本文采用基于32位处理器的嵌入式Linux系统作为小型B超仪的中央控制系统,显著提高了小型B超仪器的性能,并实现了在该平台上使用普通打印机的医学B超图像高质量打印,解决了必须使用视频打印机的高成本问题。
参考文献:
[1] 孙应娥,符影杰,王刚,江峰. 基于PC机的线阵B超诊断系统的研究与设计[J]. 电子工程师 , 2002,(10) .
[2] 郑政,计建军,李穗,等.一种新型眼科超声生物显微镜[J].上海理工大学学报,2005,(06).
[3] 江俊辉.基于ARM的嵌入式系统硬件设计.微计算机信息[J].2005,7-2:120-122
[4] Michael Sweet. An Overview of the Common UNIX Printing System,Easy Software Products. http://www.cups.org/documentation.php
[5] Kurt Pfeifle.Dissecting The CUPS Filtering System: A Network Postscript RIP For non-PS Printers,Workshop at Linux-Kongress 2002 in Cologne, Germany
[6] 张军,杜鹏.PostScript 技术研究与应用,电子技术[J],2003,(01)
[7] GDI方式与页面描述语言的比较[J]. 微电脑世界 , 2002,(06)
[8] 张占超. RIP是如何工作的[J]. 电子出版 , 2002,(03)
[9] 打印机语言PCL与PostScript的比较[J]. 微电脑世界 , 2001,(24) .
[10] 朱炬. 用ESC/P指令控制EPSON喷墨打印机[J]. 电子工程师 , 2006,(07)
[11] 章晓燕, 马琪. 嵌入式Linux系统的GUI―MiniGUI[J]. 计算机与现代化 , 2005,(01)
linux操作系统文章专题:linux操作系统详解(linux不再难懂)
评论