收藏 分销(赏)

常规心电图像格式化输出程序设计论文.doc

上传人:仙人****88 文档编号:9450874 上传时间:2025-03-26 格式:DOC 页数:36 大小:2.75MB 下载积分:10 金币
下载 相关 举报
常规心电图像格式化输出程序设计论文.doc_第1页
第1页 / 共36页
常规心电图像格式化输出程序设计论文.doc_第2页
第2页 / 共36页


点击查看更多>>
资源描述
摘要 论文主要探讨常规心电图像格式化输出程序的设计和开发。完成了对常规心电图像格式化输出程序的需求分析,总体架构的设计。基于.net平台设计实现了系统原型的开发,并且测试。 论文从需求分析到整体架构设计,以及模块的实现和最终的测试,并按照软件开发的全过程,重点论述了常规心电图像格式化输出程序的实现。文中对图像处理等核心模块的设计思想和开发过程,进行详细的分析论述,并且对最终的参数设置程序的开发进行了简单的论述。本文以通过对心电图像输出程序的开发为实例,论述了程序设计开发的基本设计模式。 论文最后论述了该系统在医院信息化、数字化过程中的深远意义和应用前景,以及对本次设计任务作了全面细致的总结。 关键词:心电图,动态链接库,面向对象,模式-视图-控制器,插值 ABSTRACT Thesis focus on design and development process of conventional ECG output formatting and completed the demand analysis procedures and the overall structure of the design of conventional ECG output formatting. Design and achieve the prototype system development and testing Based on the .net platform. Thesis from demand analysis to the overall structure design, achieve of modules and test at last in the software development process, focusing on the conventional ECG output formatting procedures as well. The text about core modules of image processing design and development process have detailed analysis and discuss and the final program for setting parameters also has a simple introduce. Based on the ECG output formatting as a practical case, discuss the basic design patterns and procedures of the design and development of programs. Finally, the thesis discusses the application of information systems in hospitals and digital process of far-reaching significance and prospects, and the design of this comprehensive and detailed summary. Keywords: ECG, DLL, Object-Oriented, Model-View-Controller, Interpolation 目 录 摘要 I ABSTRACT II 第1章 绪论 1 1.1 引言 1 1.2 相关技术 1 1.2.1 面向对象程序设计方法 2 1.2.2 D L L技术 3 1.2.3 X M L 技术 4 1.3 设计任务 5 第2章 系统需求 6 2.1 引言 6 2.2 用户需求 6 2.3 功能需求 7 2.4 可行性分析 8 2.4.1 系统开发技术 8 2.4.2 资源利用 8 2.5 系统配置 9 2.6 系统综合要求 9 2.7 本章小结 10 第3章 系统构建 11 3.1 引言 11 3.2 概要设计 11 3.2.1 系统介绍 11 3.2.2 系统流程图 11 3.2.3 需求模块划分 12 3.2.4 数据输入流图 13 3.2.5 参数设置流图 14 3.2.6 输出流图 15 3.3 详细设计 16 3.3.1 主要类图 16 3.3.2 MVC模式 17 3.3.3 静态指针 18 3.4 编写代码 18 3.5 上层程序 19 3.6 构建综述 21 3.7 本章小结 21 第4章 图像处理 22 4.1 引言 22 4.2 图像预处理 22 4.2.1 图像处理流程图 23 4.2.2 平滑滤波算法 23 4.3 图像输出处理 24 4.3.1 插值公式 25 4.3.2 插值优化 27 4.3.3 实例对比 28 4.4 本章小结 29 第5章 总 结 30 致 谢 31 参考文献 32 - IV - 第1章 绪论 1.1 引言 心电图是目前在临床应用中极为普遍的心脏疾病诊断方法之一。常规十二导心电图是最传统、最经典的心电图记录方式。通过十二导心电图,医生可以对心脏的电活动有一个全面的了解,并通过对P波、QRS波群、S-T段、T波的形态和幅度的识别,诊断心脏的各种疾病。多导联心电同步记录技术,可同时在多个通道给出同一心动周期的心电图信号,可同步整体观察及测量多个导联同一心动周期的波形,提高了参数测量的准确性,避免了单导测量的误差,对心律失常、期前收缩、预激综合症的分型定位诊断提供了条件,并为建立心电图基本参数的标准化提供手段。 在医院临床诊断中,ECG (electrocardiogram, 心电图) 信号通常被记录在格子纸上,这样效率低下且容易出错。因此,若能将数据转换成标准数据并存储进计算机必定能大大提高临床诊断的效率。软件友好的用户视图界面,大大方便了医疗人员与计算机交互[1]。临床试验表明,计算机心电诊断系统确实能够一定程度上提高临床诊断效率,并且为大型协同诊断工作提供必要的硬件支持[2]。 心电图在心脏疾病的临床诊断中具有重要价值,能为心脏疾病的正确分析、诊断、治疗和监护提供客观指标[3]。它不但广泛应用于心血管疾病的常规检查,而且还应用于对运动员、航空航天飞行人员等特殊专业人员的体质检测和临床医学研究上,具有十分重要的社会价值和经济价值,在现代医学中得到了十分广泛的应用。当前心电信号的处理仍然是生物医学工程领域重大研究课题之一[4]。 通过测试应用,本文研制的常规心电图像格式化输出程序完全达到医用心电诊断系统的各项指标,并且操作简单,具有广阔应用前景。 1.2 相关技术 从软件业的发展历程来看,程序设计方法经历了多次变革,从最初的功能分解法,到结构化的程序设计方法,再到至今仍在广泛使用的面向对象程序设计方法,人们对程序设计方法的选择取决于软件设计方法对应用软件的适应性。 1.2.1 面向对象程序设计方法 在计算机软件领域,每当一种程序设计方法不能适应应用软件发展需要时,人们总会找到一种新的程序设计方法来解决这种“软件危机”。可以说,面向对象程序设计方法就是在这样的情况下发展起来的。结构化程序设计方法着眼于局部的程序结构,难以用发展的眼光指导应用程序的设计;面向对象程序设计方法能够从问题本身来把握应用系统的整体设计,并且有效地把应用发展过程中易变部分与稳定部分隔开。面向对象程序设计方法与面向对象分析、面向对象实现紧密结合起来,构成了软件生存周期的主体。 从软件生存周期的全过程来看,重用性是一个很重要的特性,也是软件产业发展的基础,但提供什么样的重用机制或者在哪个层次上提供重用,对于软件发展有不同的意义,因此我们可以把重用性作为衡量程序设计方法的一个重要指标。 很长一段时间内,软件重用仅限于程序代码的重用,但是这仅仅是一种较低层次的重用,由于对代码理解的困难、标准的不一致以及传统程序设计语言本身对重用的支持力度不足等方面的原因,软件重用率并不高。随着软件工程技术的发展,人们认识到软件生命周期并不局限于代码编写和测试,而是一个从需求分析、设计到实现、测试、运行、维护的全过程。理论和实践都表明,在软件生命周期中,需求、设计阶段是软件开发活动的关键。因此,软件重用的概念也随之扩展到对软件开发过程中各阶段产品和文档的重用,其中最重要的是对需求和设计的重用。 在现实世界和作为其映射的软件系统中,“过程”和“操作”是多变和不稳定的,而“对象”和“数据结构”是相对稳定的,因此以过程为中心来设计开发软件系统的结果就是软件的可重用性较差;而以对象或者数据结构为中心来设计开发的软件系统的可重用性就比较好。 面向对象程序设计方法强调把问题域的概念直接映射到对象以及对象之间的接口[5],这种方式比较符合人们通常的思维方法,从而减少了传统开发方法从问题域到分析阶段再到设计和实现阶段的偏差. 面向对象方法使得在客观世界以及作为其映射的软件系统中,实体的结构相对稳定。面向对象方法把属性和服务封装在对象中,当外部功能发生变化时,这种封装可以保持对象结构的相对稳定,使得改动仅局限于一个对象的内部,减少了因改动而引起的系统波动效应.因此,面向对象方法开发的软件具有易扩充、修改和维护的特点。 差不多每一种面向对象程序设计方法都使用统一的模型来表达每个阶段的结果,包括分析、设计、编码实现等阶段,因此,从整个软件生存周期来看,后一阶段可以直接重用前一阶段的工作成果,弥补了传统软件开发方式从数据流图到模块结构图转化的鸿沟,既避免了重复劳动,又消除了转换过程带来的误差。 面向对象方法具有的继承性和封装性也支持软件重用,并易于扩充,能较好地适应复杂大型系统不断发展变化的要求。 但是,面向对象设计方法也不是十全十美。首先面向对象程序设计方法在处理大型软件系统时,它的粒度粗细难以有效控制。其次,现实世界中的许多问题领域包括影响多个对象的全局性处理,可以由若干个并行或者串行执行的步骤组成。这种全局处理的概念不从属于任何单一对象,与面向对象的思想不统一,并且缺乏有效的表示方法。另外一点,虽然面向对象程序设计方法强调重用性,但实际重用的效果并不理想。 1.2.2 D L L技术 DLL(Dynamic Link Libraries动态链接库),提供了一种共享数据和代码的方便途径,由于多个应用程序可以共享同一个DLL中的函数,因此使用DLL可以显著的节省磁盘空间。尤其对于Windows应用程序,有很多操作都是标准化的,如果使用传统的静态链接方式,每一个需要完成这些操作的应用程序都必须在自己的执行文件中包括相同的代码,这不但使应用程序必须加载的时间变得更长,也浪费了磁盘空间。多个应用程序还可以同时共享DLL在内存中的同一份拷贝,这就有效地节省了应用程序所占用的内存资源,避免了频繁的内存交换,从而提高了应用程序的执行效率。由于DLL是独立于可执行文件的,因此,如果需要向DLL中增加新的函数或是增强现有函数的功能,只要原有函数的参数和返回值等属性不变,那么所有使用该DLL的应用程序都不需要重新编译。 DLL除了包括函数的执行代码以外,还可以包括诸如图标、位图、字符串和对话框之类的资源,因此可以把应用程序所使用的资源独立出来做成DLL。对于一些常用的资源,把其做到DLL中后,就可以为多个应用程序所共享。 使用DLL还可以方便地建立支持多语种的应用程序。我们可以把多语种应用程序中所使用的语种相关的函数做到DLL中,只要不同语种的应用程序所调用的函数都具有相同的接口,就可以通过简单的更换DLL来实现多语种支持。 1.2.3 X M L 技术 XML技术特点和优势: XML(eXtensible Markup Language,可扩展的标记语言)是由W3C组织于1998年发布的一种标准。它有如下三个重要特点: ¨ XML是一种结构化的语言: XML以一种开放的自我描述方式定义了数据结构,在描述数据内容的同时能突出对结构的描述,从而体现出数据之间的关系。 ¨ XML是可扩展的: 从本质上来讲,XML是一种元语言(Meta Language),即可以定义其它语言的语言,也就是说,这种语言能够根据需要进行扩展,以满足特定情况的需求,这意味着在创建XML文档时,不会局限于一套预先定义的标签,可以为特定应用程序创建所需要的任何标签,同时,XML标准提供了一套与这些细节相关的规则,来规定诸如如何创建标签、XML文档如何结构化等问题。 ¨ XML保持数据存储与数据显示相分离 XML文档中的数据存储,对于数据的显示没有任何约束,文档中仅仅包含结构化的数据,而不关心其逻辑结构的定义和如何进行显示。如果数据使用XML规范存储,就可以确保对数据的显示已经没有任何限制。 XML采用标记的文本方式记录数据信息,对于计算机和用户来说都具有很强的可读性。XML具有可扩展性、灵活性、平台无关性等诸多特点,它的出现,使得计算机之间的数据交换变得简单。目前,XML在数据和信息管理、数据交换、Web应用、电子商务等诸多领域有着重要用途,如图1-1所示。 图1-1 XML的用途 由于XML的灵活性和平台无关性,特别是永久可读性,它能够在医学诊断系统研究发展中起到重要的作用,因此研究XML在医学领域中的应用也已经越来越得到人们的关注,国内外已经有医疗研究机构对XML在医学诊断系统的应用进行探索、研究和实验。 1.3 设计任务 常规心电图像格式化输出程序设计是一项庞大复杂的工程。它不仅要涉及数学、医学、图形学等方面的理论知识,还要用到软件工程、编程技术、等方面的应用知识[6]。要开发出一个成熟稳定、操作方便、功能完善的系统,需要投入大量的人力物力,经过较长的开发周期,才能完成。 本次设计任务主要包括以下内容: 1. 应用面向对象的思想对常规心电图像格式化输出程序进行分析、设计。 2. 利用Visual C++开发环境的MFC框架开发常规心电图像格式化输出程序的DLL原型,主要完成工作如下: ¨ 解析心电数据源文件及提取波形和相关信息。 ¨ 心电信号波形图像处理的研究,包括信号的预处理,滤波优化算法的实现。 3. 利用Visual Basic.Net开发上层程序,主要功能为设置各项心电参数以及输出选项,同时测试DLL跨语言通用性。 第2章 系统需求 2.1 引言 需求的定义包括从用户角度(系统的外部行为),以及从开发者角度(一些内部特性)来阐述需求。在软件工程中,所有的风险承担者都感兴趣的就是需求分析阶段。这些风险承担者包括客户、用户、业务以及需求分析员(负责收集客户需求并编写文档,以及负责客户与开发机构之间联系沟通的人)、开发人员、测试人员、用户文档编写者、项目管理者和客户管理者。这部分工作若处理得好,能开发出很出色的产品,同时会使客户感到满意,开发者也倍感满足、充实。若处理不好,则会导致误解、挫折、障碍以及潜在质量和业务价值上的威胁。因为需求分析奠定了软件工程和项目管理的基础,所以所有风险承担者最好是采用有效的需求分析过程。 2.2 用户需求 常规心电图像格式化输出程序作为医院数字信息化的一个子系统,主要用于完成心电格式化输出任务。医生可以通过计算机输出一系列不同的诊断动作图片,以提高其效率。根据医生平时诊断习惯以及必要诊断过程进行分析,如图2-1所示: 图2-1 诊断分析 ¨ 显示病人信息: 包括姓名、性别、年龄、病史、曾经用药等诊断中必要的信息。以文本格式在输出图片中显示,方便医生查阅。 ¨ 单一波形显示: 作为心电诊断系统的核心功能,该功能提供多种波形输出方式(3*2模式、12*1模式、6*1模式、全波形显示等)。医生可以通过设置切换输出查看各种波形,包况四肢、胸部波形,节奏波形等。 ¨ 比较波形显示: 一种波形显示方式,提供同一病人在不同时间段的波形比较,方便诊断。 ¨ 图像参数设定: 提供用户对图像显示的一些接口操作。用户可以控制图像处理几种方式,以及根据个人习惯定义各个显示波形的颜色,以提高用户诊断过程的效率。 ¨ 显示切换: 提供用户对图像切换的一些接口操作。用户可以对波形的显示方式,以及对感度、频率、速度等一些心电参数进行设置。 2.3 功能需求 提供一个DLL即Windows动态链接库的解决方案。向上层提供接口。根据用户需求可将功能需求概括如下: ¨ ECG数据处理: ECG数据是一种标准的心电数据格式,它包括波形信息和病人检查信息。本功能包括ECG文件解析和读取以及XML文件的解析。其中XML文件的格式如图2-2所示,主要用于打开指定序列文件。 ¨ 图像处理: 解析二进制的波形序列文件以后,需要经过一定的优化然后将其在屏幕上显示,以达到最佳的显示效果。图像处理过程包括:去噪、平滑、滤波。图像显示是将整理得到的合理采样点序列在指定区域以像素为单位打点,形成心电波形输出。 ¨ 参数设定: 系统提供图像参数设定的应用程序,用户可以通过该程序设定一系列的输出参数。 本文设计的是一个简化的软件原型,涉及的功能有限,如:打印、编辑功能都没有添加进本次设计。本节的功能需求可作为下文模块划分的依据。 2.4 可行性分析 2.4.1 系统开发技术 常规心电图像格式化输出程序开发运用了二维图像处理技术、Windows编程技术,面向对象的模块化开发技术等,为此使用的软件开发平台除WindowsXP(日文版)外,还采用了Visual Studio .Net 集成开发平台。 本系统是一系统标准化、系列化以及可移植性、扩展性决定了系统研究开发的可持续性,系统的升级换代是新设备、新理论、新技术、新需求的必然结果。系统处于原型阶段,提供给用户的是心电诊断中最基本的功能,是开发综合诊断系统的最基本的前期工作。因此,原型阶段,是根据系统需求提出的具体实施目标,参照开发DLL的经验,在短时间内设计出初步的总体结构方案并且实施、调试。 2.4.2 资源利用 可重用性是基于好的设计的一个主要目标。功能需求中提及的XML文件解析工具有已经编译好的动态链接库:XMLParse.dll,导入使用即可。 心电图形是简单的二维波形图像,经过科学家长期研究实践,有一整套完备、成熟的图像处理算法。因此,本次设计中的图像处理部分只需要对已有的算法进行编码实现即可。当然,为了显示优化的考虑,对平滑算法需要做一些特定的修改,以满足波形图像的显示要求。 2.5 系统配置 1) 硬件环境 n CPU Pentium Ⅲ 或 Celeron 800以上 n RAM 256M以上 n 硬盘 10G以上 2) 软件环境 n 操作系统 Windows XP service pack 2 n 开发环境 Visual S 2003,C++语言,VB.net [7~9] 2.6 系统综合要求 ¨ 准确显示波形 对于重现输出的波形图像要求没有任何偏差和失真,否则影响诊断,后果不堪设想,所以准确显示波形是衡量本系统最为关键的性能指标。任何后期优化处理都是以真实无失真地显示原始波形为前提。 ¨ 系列化、扩展性强 本文在前面一直提及一个协同诊断的概念,因为未来的医院信息化过程中各类诊断辅助软件将会越来完善,开发综合的大型诊断软件系统是大势所趋,那么,在此之前开发功能完备的单一诊断模块(以不同的表现形式存在包括:动态链接库等)是为今后的工作做积淀。在单一模块的开发中,需要充分考虑到今后的需求为此提前最好一定的功能积累。 ¨ 稳定可靠、可控性强: 系统稳定也是医用软件最基本的要素之一,本系统应该充分考虑到计算机系统各种异常,做好必要、完备的异常处理,保证任何状况下,该系统运行通畅无误。 ¨ 可移植性强: 本系统作为一个DLL,系统的上层程序可以用多种语言实现(VB、C#、Java等),以及上层程序可以进行多控件联合操作,那么需要充分考虑本系统的接口通用性,以及数据结构设置合理,并合理节约控件运行过程中对操作系统的资源占用量。系统组件化使各模块之间的可以通用和互换,有利于节省研制费用,缩短研制周期,还有利于后期维护、升级。 2.7 本章小结 本章对常规心电图像格式化程序的需求分别从用户,功能方面进行了分析,并对本系统的设计环境和要求做了进一步的阐述。 第3章 系统构建 3.1 引言 在软件开发过程中,主架构设计是承接于需求分析的。主架构是保证面向对象的软件项目成功的一个至关重要的要素,它的主要作用是让开发团队汇聚思想,化解各人需求的冲突,从而保持软件开发的一致性。尤其是基于模块的软件系统,各模块的设计人员对于模块将派上用场的整体环境的基本假设和想象如果不能统一,就非常难以将之组装成为一个完美的整体,由此我们可以知道,主架构的稳定和灵活是保证软件项目成功的关键。 所谓的主架构是指将各模块元素以某种理想的合作模式组织起来,以达成系统的基本功能和限制。所以主架构的叙述必须说明各模块的特性;以什么方式结合在一起,共同支持系统的功能;并说明有关的条件或限制。 3.2 概要设计 3.2.1 系统介绍 常规心电图像格式化输出程序是从文件中解析并得到心电图的采样点数据——Raw Data数据,再根据这些采样点绘制出心电波形,但是此时绘出的波形图像失真比较严重,因为由体表电极 (胸导联或肢导联 )检测到的ECG心电信号常有不同的干扰 ,为了得到不失真的原始心电信号 ,在诊断分析前要进行必要的预处理,包括低通(Low Pass),去噪(Delete Noise),平滑(Smooth),等一些特殊处理,同时心电数据又有规格的区别,一般常规心电图都为十二导联,这样经过滤波和规格的调整,再把绘制出的波形转换成位图格式,这里的输出部分所采用的是ImageOutput模块。该模块主要负责位图的格式转换和大小缩放,根据用户的选择格式化输出心电图像。 3.2.2 系统流程图 如图3-1是本系统的流程图: 图3-1 系统流程图 3.2.3 需求模块划分 图 3-2 EcgtoImage.dll模块示意图 外层模块(ECGtoImage.dll): 如图3-2,该模块是本系统的外层模块,负责与上层应用程序的交互,它的功能是转换 ECG/MFER 文件成图像文件(包括 BMP,JPEG,PNG),然后输出到指定文件路径。 ECGtoImage.dll还包含其它一系列组件进行运作(见图3-3),可以把它理解为统一对外的接口层。 图3-3 EcgToImage.dll与其它组件 ¨ 控制模块(ECGDIB.dll): 该模块是控制模块,负责调度其它模块运作。 ¨ 处理模块(ECGProcess.dll): 该模块是主处理模块,包括ECG文件的读取解析,参数的设置,以及绘制波形等主要操作。 ¨ 输出模块(ImageOutput.dll): 该模块是输出模块,负责图片格式的转换和输出。 下面按照系统流程,把该系统设计分成三个主要部分,分别为数据输入流,参数设置流,输出流。 3.2.4 数据输入流图 如图3-4即为数据输入流的序列图,本系统是参照MVC模式设计(详见3.3.2节),由控制层(CECGController)去控制模型层(CECGModule),模型层再调用数据类(ECGData)的一些操作对文件进行解析。 图3-4读入数据流(Data flow) 3.2.5 参数设置流图 其实在数据输入解析之前,要先进行参数设置,同样,由控制层(CECGController)去控制模型层(CECGModule),再由模型层调用参数类(CECGParameter)对参数进行设置。该系统所涉及到的参数有许多,例如心电波形的颜色(Color),感度 (Sense),速度(Speed)等等,但参数的设置流程基本一致,因此在图3-5中只列出其中一种参数。 图3-5 设置参数流(Parameter flow) 3.2.6 输出流图 参数设置以及数据输入解析流程完成之后,ECG数据以及各项参数都已设入系统,接下去便是控制处理输出流了,如图3-6,包括:读取参数,绘图模块(CDrawMethod)绘制背景网格,绘制波形,然后交给输出模块(CECGImage)去做图片格式转换及缩放处理,并存为图片。 至此,整个系统流程已经结束。 图3-6 输出流(Output flow) 3.3 详细设计 3.3.1 主要类图 如图3-7,是本系统各主要模块构成及相互关系类图,其中CECGController,CECGOutputParent,CRestViewOutput等主控模块放于ECGDIB.dll中,而图中其余模块都放于ECGProcess.dll中,主要负责数据的处理,而3.2.3节中提到的ImageOutput.dll相对独立,并没有添加进类图,而是用CECGImage类对ImageOutput.dll中的导出类CImageObject做了一层封装,主系统的交互全都通过了CECGImage类。 这样设计的好处在于,由于ImageOutput.dll模块提供了一系列图像转换及缩放等操作,它几乎是一个完整的图像处理模块,也可以为其它需要图像转换等功能的系统所用,它的接口并不是专门为本系统设计,因此, CECGImage类过滤了一些ImageOutput.dll模块多余的接口,它作为一个本系统的间接图像输出接口,更好的整合了系统模块。 图3-7 Class View类图 3.3.2 MVC模式 MVC模式是"Model-View-Controller"的缩写,中文翻译为"模式-视图-控制器"。MVC应用程序总是由这三个部分组成。 本系统借鉴MVC模式进行设计,把原本复杂的一系列操作,如波形参数设置,数据读取解析,以及绘制波形等进行拆分 如类图3-7, ECGController 即 Controller,控制ECGModule 即Model的运作,以及管理ECGOutputParent即View,由于本系统着重于输出图片,并没有提供在屏幕上输出图像,因此MVC中的View部分即指ECGOutputParent这部分类结构。 波形的参数都经由ECGController,及ECGModule设置或取得,并存储在ECGParameter中,而数据的解析也是由ECGModule进行,并把当前数据读入DataList中,有了相应的数据和参数设置,就可以绘制波形了,DrawMethod就是设计用来绘制波形的,其中有各种绘制波形的方法,包括一些提高波形精度的滤波算法,绘画期间所用到的数据取自ECGParameter以及DataList,总之,一切有关于波形绘制的工作都由它完成。不难看出,以上的所有操作都是由ECGController引起,因此如何设计好该模块以达到各模块间良好的运作成了关键。 3.3.3 静态指针 如3.3.1节所述,对操作都进行拆分后,虽然从宏观角度可以发现层次分明,由此拆分出的各模块也分工明确,但是,一旦开始编码,就会出现对象实例多份的问题,以参数类ECGParameter为例,它不仅在ECGModule中要使用来设置参数,同时在DrawMethod中也需要用到该对象,并且应该是同一份数据,这就意味着自始至终都应该只存一份ECGParameter对象实例就可以了,否则会造成数据冗余(参照数据库中的同名概念),对软件后期的维护尤其不利。 为了各模块都使用同一份对象实例,本系统在设计时便引入了类成员静态指针的方法,该成员指针指向该类,在该类被构造的时候,它就应该被赋值并指向该类当前实例,外部可以由另外一个静态成员函数间接取得该指针,从而用其所指的实例进行操作。 同时,为了保证这些类只被构造唯一一个实例,就由ECGController去创造这些对象的实例,因为ECGController只有一份,所以该方法可以有效的实现MVC,并且减少数据冗余的产生,减轻了代码量,更提高了程序的执行效率。 3.4 编写代码 首先,运用测试驱动开发的思想,根据详细设计阶段定制的各个类以及其函数设计出单元测试用例。 如图3-8,该图为测试用例在CppUnit中形成的树状结构: 图3-8树状测试用例图 (Test case tree view) 只是有了测试用例当然不行,必须还要有实现代码。有了测试用例的好处就在于可以根据它逐步完成各模块功能,以后如果对某个模块有改动,也只需要运行一遍测试用例,就知道改动是否成功或对其它模块是否有影响,一目了然。 因此,当你通过了所有测试用例时,也就意味着该阶段的工作已经完成了。 3.5 上层程序 由于该系统本身为一个DLL,无法单独运行,但是其提供了接口,可供上层调用。 上层程序由VB.net完成,共有两个应用程序,分别是: 1. 参数编辑设置程序(ECGToImageEditor)。 2. 主程序上层演示程序(ECGToImageDemo)。 ECGToImageEditor是有关于ECGToImage进行图片输出的各项参数设置的程序,如图3-9: 图3-9 Parameter Setting程序界面图 ECGToImageDemo是本系统DLL的一个实现程序,该程序接受五个参数,分别是ECG文件路径,三个XML文件路径,和一个输出文件路径,而其中第三个XML文件,如图3-10,即SettingFileName该项就是由ECGToImageEditor编辑并生成的包括各项参数设置的XML文件。 该应用程序同时也支持命令行参数设置,从而使用户可以不用在界面中设置各路径参数,使用命令行就可以实现自动化输出了。 图3-10 EcgToImage.dll Demo程序界面图 3.6 构建综述 高质量的设计具有很多常见的特征,而有时这些目标之间有时会相互抵触,但这也正式设计中的挑战所在——如何在一系列相互竞争的目标之中做出一套最好的折中方案。最小的复杂度,易于维护,减少耦合,可重用性,可移植性,层次性等等,这些都是设计范畴内的特征[10],软件的首要技术使命就是管理复杂度,应该首选以简单性作为努力目标的设计方案,在对本系统进行构建时,也是从多角度综合了多种特性,在层次性和可重用性,以及复杂度等特性上进行取舍,从而设计出一套适合于本系统的方案。 3.7 本章小结 本章是常规心电图像格式化输出程序设计的构建阶段,该系统的构建阶段包括概要分析,详细分析,以及代码的编写和功能测试,该阶段同需求分析一样,是软件工程中不可或缺的阶段,至此,本系统已基本上按照了软件工程的流程进行了设计与开发。 第4章 图像处理 4.1 引言 常规心电图像格式化输出程序是从文件中解析并得到心电图的采样点数据,经过解析的数据可以得到图像序列文件,其中详细记录了每一个采样点的具体位置,系统通过图像处理以后可以将其描绘在内存位图中,但是此时绘出的波形图像失真比较严重,因为由体表电极 (胸导联或肢导联 )检测到的ECG心电信号常有不同的干扰 ,为了得到不失真的原始心电信号 ,在诊断分析前要进行必要的预处理,包括低通(LowPass)滤波,去噪(DeleteNoise),平滑(Smooth),等一些特殊处理。 结合第3章的系统设计模块,图像预处理被封装在ECGProcess.dll模块内,图像的转换和输出处理则封装在ImageOutput.dll模块内。 该部分涉及到的图像处理知识主要有:位图文件格式,图像的平滑算法,图像的滤波算法,以及插值算法等[11]。 本章将基于以上这些算法的理论基础,并结合本系统自身的特点,进行图像算法的研究与设计,最终通过编码实现。 4.2 图像预处理 本节将对图像预处理部分作简要的分析和设计。 针对心电波形的特殊性,其波峰波谷间隔较大,使用普通的图像处理方法,图像容易出现锯齿失真,影响观察效果,因此,考虑针对心电波形波峰波谷间隔较大的特点设计新的算法,以弥补波形图像锯齿失真的不足。本节将简要叙述该算法的实现以及最终的显示的效果。 4.2.1 图像处理流程图 图4-1 图像预处理 4.2.2 平滑滤波算法 ¨ 锯齿失真产生的原因: 当两个采样点垂直距离过大时,系统在打点描绘波形的时候产生锯齿失真,如图4-2所示,图中的方格宽度代表一个像素点宽度。 图4-2 锯齿失真 ¨ 解决方法 当两个采样点垂直距离过大时,系统在打点描绘波形时,经过适当计算后,在点与点连接区域设置一段颜色过度区,该区域的各个像素点依次从波形描绘颜色向背景颜色渐变以达到平滑的效果。最终结果如图4-3所示: 图4-3平滑滤波处理 4.3 图像输出处理 图像预处理是发生于绘制波形阶段,而本节将要叙述的是ImageOutput.dll模块所做的工作——图片格式转换和缩放输出。其中,由于波形是先在内存位图中绘出,因此需要根据用户的要求把位图转换成JPEG,PNG,BMP等格式,并且实现用户所要求大小的缩放处理。格式转换主要用到了开源的JPEG,PNG编解码库(jpeg.lib,png.lib),以及与其相关的压缩库(zlib.lib),所以本节主要分析和研究图像的插值缩放。 4.3.1 插值公式 插值公式根据图像质量和运算速度可以分为好多种,在这里仅介绍在ImageOutput.dll模块中所使用的双线性和立方插值公式。 ¨ 双线性插值:   对于一个目的像素,设置坐标通过反向变换得到的浮点坐标为(i+u,j+v),其中i、j均为非负整数,u、v为[0,1)区间的浮点数,则这个像素得值 f(i+u,j+v) 可由原图像中坐标为 (i,j)、(i+1,j)、(i,j+1)、(i+1,j+1)所对应的周围四个像素的值决定,即: (4-1) 其中f(i,j)表示源图像(i,j)处的的像素值,以此类推。 这就是双线性内插值法。双线性内插值法计算量大,但缩放后图像质量高,不会出现像素值不连续的的情况。由于双线性插值具有低通滤波器的性质,使高频分量受损,所以可能会使图像轮廓在一定程度上变得模糊。 ¨ 立方插值: 该方法能够克服以上算法的不足,计算精度高,但计算量大,由于需要考虑一个浮点坐标(i+u,j+v)周围的16个邻点,目的像素值f(i+u,j+v)可由如下插值公式得到: (4-2) 其中[A],[B],[C]矩阵: (4-3) (4-4) (4-5) S(x)是对 Sin(x*Pi)/x 的逼近(Pi是圆周率——π) S(x)其实也就是一个滤波器,由于它的不同,形成的公式也就不同,现在用得比较多的有以下几种: 普通立方插值公式(The General cubic): (4-6) B-样条函数逼近公式(The B-spline cubic): (4-7) The Catmull-Rom cubic: (4-8) Mit-Net双参数公式(The Mitchell-Netravali cubic) : (4-9) 公式4-9所示的Mit-Net双参数公式实现放大效果较其它公式清晰,一般国际上公认的取B和C的值分别为(1/3,1/3)比较好[12]。另外公式4-6是最普通的立方插值公式,当a取0.5和1时,一个比较平滑,一个比较锐利,分别适用于放大和缩小图片。 4.3.2 插值优化 插值算法最核心的部分就是插值公式,因为对于目标位图上的每个点都要用到公式来计算,特别是立方插值中每个都
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服