




已阅读5页,还剩51页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单位代码 学 号 10101038 1分类号 TP311.1 毕业设计(论文)C形臂X光成像系统的软件开发学院名称生物与医学工程学院专业名称生物医学工程学生姓名张文卓指导教师张弛2014年 6月C形臂X光成像系统的软件开发张文卓北京航空航天大学 北京航空航天大学本科毕业设计(论文)任务书、毕业设计(论文)题目:C形臂X光成像系统的软件开发 、毕业设计(论文)使用的原始资料(数据)及设计技术要求:原始资料包括:驰马特公司现有版本的C形臂X光成像软件系统及其技术文档; C形臂相关的专利资料;图像处理算法资料等。设计技术要求:(1)完善现有软件的结构;(2)完善相机采集图像功能,增加软件适用范围;(3)完成病例报告生成、DICOM图像传输等功能;(4)完成软件测试,提高系统的可靠性。 、毕业设计(论文)工作内容:1、 研究驰马特公司的现有软件,明确现有软件的结构和功能。对软件结构进行优化设计,分层处理。 2、 调研Basler Pylon CCD相机和Thales平板探测器的功能和应用,在此基础上,分别开发基于影像增强器和Basler相机的,以及基于平板探测器的X光成像系统软件。 3、 集成软件功能,主要是集成DICOM图像传输功能,提高软件的可靠性。 4、 对软件进行测试,提高软件的可靠性和稳定性。 、主要参考资料:1 曾佳兴. C 臂 X 光机在骨科手术中的应用J. 中国临床新医学, 2012, 5(11). 2 R. B. Spratt. Automatic X-ray exposure control system and method of use: U.S. Patent 5,617,462P. 1997-4-1. 3 段煅. C 语言编程技巧在 C 语言学习中的应用J. 电脑编程技巧与维护, 2010 (20): 150-151. 4 杜高鹏, 翟正军, 徐隽. C+ Builder 与 Matlab 混合编程的两种方法J. 科学技术与工程, 2006, 6(7): 886-889. 生物与医学工程学院 院(系)生物医学工程 专业类 101012 班学生 张文卓毕业设计(论文)时间: 自 年 月 日至 年 月 日答辩时间: 年 月 日 成绩 指导教师: 兼职教师或答疑教师(并指出所负责部分): 教研室 主任 北京航空航天大学毕业设计(论文) 第 VI 页 本人声明我声明,本论文及其研究工作是由本人在导师指导下独立完成的,在完成论文时所利用的一切资料均已在参考文献中列出。 作者:张文卓签字:时间:2014年 6 月C形臂X光成像系统的软件开发学 生:张文卓指导教师:张 弛摘 要自X光被发现以来,X光技术已在医学上得到广泛的应用。C形臂X光成像系统是目前广泛使用的医学影像设备,它凭借成像角度灵活、实时成像和便于数字剪影等优势,用于各种手术中的成像和造像。国内C形臂X光成像系统在软硬件方面都与国外存在较大差距。本毕业设计与驰马特公司合作,旨在对其C形臂X光成像系统的软件进行开发和改进。本文研究了现有软件的结构和功能,优化了软件结构。在此基础上,扩展了相机驱动,包括Basler相机和平板探测器,使本软件可适用于驰马特公司两个系列的X光成像系统。软件集成了DICOM图像传输功能,实现了X光成像系统与医院PACS系统的交互。软件通过测试,性能可靠稳定。 本毕业设计的C形臂X光成像软件与原软件相比,可靠性更强,采集图像的质量和效率更高,并实现了软硬件的交互升级。本论文对于提升了X光成像系统的整体性能具有重要价值。关键词:C形臂X光成像系统,CCD 相机,平板探测器,DICOM,软件测试the Development of C-arm X-ray Imaging SoftwareAuthor : ZHANG Wen-zhuoTutor : ZHANG ChiAbstractSince X-ray was discovered, it has been widely used in medical science. As medical imaging equipment, C-arm X-ray imaging system is now widely used for a variety of radiography and photography in surgery, with its flexible imaging angle, real-time digital imaging, easier digital silhouette and other advantages. There is a big gap between domestic C-arm X-ray imaging system and foreign C-arm X-ray imaging system in terms of software and hardware. This graduation design which is in collaboration with Smart Medical Group, is aimed at developing and improving C-arm X-ray imaging software. In this paper, after the structure and function of existing software been investigated, improvement has been made in software structural optimization, camera driver extension, function integration and software testing. Camera driver extension including Basler Pylon CCD camera and flat-panel detector, makes the software applied to two series of X-ray imaging system. The function integration for DICOM image transferring achieves the communication between X-ray imaging system and hospital PACS system. And software testing proves that the software is reliable and stable. The quality and the efficiency about image acquisition of the new software is higher than the old software. And the new software makes the interacted upgrade between hardware and software easier. This paper has important value in promoting the performance of C-arm X-ray imaging software.Key words: C-arm X-ray imaging system, CCD camera, Flat-panel detector, DICOM, Software testing目 录1 绪论11.1 课题背景及目的11.2 国内外研究现状21.3 课题研究方法31.4 论文构成及研究内容32 总体设计42.1 现有软件系统分析42.2 新软件系统总体设计63 物理层软件设计73.1 软件结构优化73.2 软件物理层需求分析93.3 Basler相机驱动更换113.3.1 Basler相机介绍113.3.2 Basler相机打开并初始化153.3.3 Basler相机参数设置153.3.4 Basler相机采集图像163.3.5 Basler相机函数封装193.4 平板探测器驱动更换203.4.1 采集平板介绍203.4.2 平板探测器驱动介绍213.4.3 平板初始化及校准223.4.4 平板图像采集224 DICOM图像传输244.1 DICOM简介244.2 DICOM图像格式转换244.2.1 格式转换分析244.2.2 RAW转换BMP254.2.3 BMP转换DICOM274.3 DICOM图像传输285 软件测试30结论31致谢32参考文献33附录34附录A MyPylonC.c代码34附录B RAW格式转BMP部分代码38附录C DICOM图像传输部分代码42 北京航空航天大学毕业设计(论文) 第 46 页 1 绪论1.1 课题背景及目的十九世纪末,物理学家伦琴在探索阴极射线本性的研究中,意外地发现了X光1。随后不久X光就在物理学、农业、工业和医学上得到广泛的应用,特别是在医学上,X光技术已经成为对疾病进行诊断和治疗的专门学科,在医疗保健事业中占有重要的地位,尤其给骨科手术的深入发展创造了良好的条件2。随着工业的进一步发展,从最原始的X光机到C形臂X光机,各类型的X光成像系统已被广泛地应用到临床医学当中。目前C形臂X光成像系统是广泛使用的医学影像设备,它集光、机、图像处理技术为一体,由C形状的机架,产生X光的球管,采集图像的影像增强器和CCD相机,以及处理图像的工作站组成。C形臂X光成像系统的工作原理大致如下:球管与影像增强器集成在C形臂的两端,球管发射X光穿过人体组织后被影像增强器接收,在C形臂的另一端CCD相机中生成图像。因为人体不同部位的组织密度不同,所以X光穿过人体不同部位就会产生不同的衰减,从而会产生可以显示人体内部组织的图像3。图像再经过加工处理,最终显示到显示屏上供医生参考。C形臂X光成像系统凭借成像角度灵活、实时成像和便于数字剪影等优势,用于各种手术中的成像和造像,尤其在骨科手术、血管和消化道介入治疗中具有重要的临床应用价值。从目前国际发展水平来看,C形臂X光成像系统的发展趋势是向着更高的图像分辨率、更灵活的成像角度、更低的辐射剂量发展。这种发展趋势对其软硬件提出了越来越高的要求。目前,国内C形臂系列的产品在软硬件方面都与国外同类型产品存在较大差距,国外采取技术垄断,严重制约了国内C形臂系列产品在临床上的应用。因此,开发并完善国产C形臂X光成像系统很有必要。从C形臂X光成像系统的软件方面来看,与国际知名品牌相比,国内品牌还存在较大差距,主要体现在:X光图像采集方式落后,图像质量不高,软件可靠性差,软件功能单一和人机交互性不强。这些缺陷严重制约了国内C形臂系列产品在临床上的应用。针对目前国内产品软件的不足,对C形臂X光成像系统的软件功能进行开发和完善,能够有效增强国内C形臂系列产品的市场竞争力。本课题与国内知名C形臂企业驰马特公司合作,旨在对该公司的C形臂X光成像的软件系统进行开发和改进,切合临床需求,完善软件功能,构建一套功能完善、系统可靠、满足临床需求、符合医生使用习惯的C形臂X光成像软件系统。该课题对于提高临床医生的手术效率具有一定会的临床应用价值。1.2 国内外研究现状国外C形臂X光成像系统的发展起步早,而且因为国外工业科技比较发达,所以C形臂X光成像系统已经有了很好的发展。知名C形臂企业主要有飞利浦、西门子和GE等。这些企业可以生产多种型号的C形臂产品,而且产品质量高,可靠性强,功能丰富。国外的C形臂X光成像系统已在国内一些医院投入使用,口碑很好。但是进口产品价格昂贵,加上每年的高额维修检测费用,一般医院根本承担不起。国外对国内采取技术垄断,所以为了我国医疗事业的发展,必须独立自主研究并生产国产的C形臂X光成像系统。国内品牌诸如驰马特、大恒等公司在C形臂X光成像系统的研发上已经做了很多年,它们标志着国内X光医疗设备的领先水平。但与国外的产品相比,还是存在较大差距,从软件方面上看,国内C形臂产品X光图像采集方式落后,图像质量不高,软件可靠性差,软件功能单一和人机交互性不强。这些缺陷严重制约了国内C形臂系列产品在临床上的应用,降低了国内C形臂系列产品的市场竞争力。目前,我院与驰马特公司展开合作。该公司产品已经可以实现术中X光图像采集、图像处理及测量、病人信息及图像管理、病例报告生成、DICOM图像传输及打印等功能。但是其软件部分还存在较多问题,使得其产品在售后服务中处于较被动的地位。医院在使用其产品后,对其软件可靠性、软件使用是否符合医生习惯、图像采集模式是否能够满足医生手术需要等方面提出了更高的要求。经过一段时间的调查和总结,了解到其软件系统的不足主要包括:软件结构不合理,导致软硬件交互升级困难;相机驱动范围太窄,导致无法使用最新相机和平板探测器;软件系统的集成度不高,分散成很多小软件工程,导致软件可靠性差和使用不方便。总的来说,目前国内的C形臂X光成像系统与国外的相比还是有差距的。本课题的研究重点侧重于C形臂X光成像系统的软件方面,研究目标是对驰马特公司的软件系统进行开发和改进,切合临床需求,完善软件功能,构建一套功能完善、系统可靠、满足临床需求、符合医生使用习惯的C形臂X光成像软件系统。1.3 课题研究方法本课题的研究方法是查阅相关资料,分析驰马特公司现有的C形臂X光成像软件系统,从结构、功能、代码层面上找出该软件不合理的地方,然后进行新软件的设计,重点是修改不合理的地方和增加新的功能,以达到开发改进的目的。本课题的编程方法采用C+语言,编译平台选择C+ Builder,版本是6.0。C+语言简便灵活,尽量的兼容了C语言,支持面向对象,而且运算符和数据结构丰富,程序执行效率高,同时具有高级语言与汇编语言的特征4。C+ Builder是Borland公司推出的一款Windows下可视化集成开发工具,它具有快速可视化开发环境5:只要简单地把控件拖到窗体上,定义一下它的属性,设置一下它的外观,再写一些事件程序,就可以快速地建立应用程序界面。1.4 论文构成及研究内容本课题基于C+Builder平台,研究内容主要包括: (1)主要研究了现有软件系统以及新软件系统的总体设计。(2)实现了软件结构优化和相机驱动的扩展,主要扩展了Basler相机和平板探测器的使用。(3)实现了DICOM图像格式转换和DICOM图像传输。(4)完成了软件测试。2 总体设计2.1 现有软件系统分析驰马特公司现有的C形臂X光成像产品的系统结构如图2.1所示。脚闸控制球管发射X光,同时也提示下位机开始采集图像。球管发射的X光通过影像增强器被CCD相机接收,形成X光图像,最终CCD相机将采集到的图像数据传递给下位机。所以发射X光和CCD相机采集图像都受脚闸的控制。图2.1 基于影像增强器的系统结构示意图驰马特公司现有软件包括了一个主体软件和多个分散的小软件工程。主体软件是在C+Builder开发平台上开发的,其他多个小软件工程包括病例报告生成打印和DICOM图像传输功能,分别是在C+Builder和VB上开发的。该软件系统主界面如图2.2所示,采集图像的功能界面如图2.3所示。图2.2 软件系统主界面图2.3 采集图像功能界面现有软件系统的采集模式有四种:1、末帧保持,即采集完毕后只保留最后一幅图像;2、连续采集,即球管连续发射X光,相机连续采集并保存图像;3、脉冲采集,即球管发射脉冲X光,每次发射都会产生触发信号,触发相机采集并保存图像;4、数字点片,和脉冲采集一样,但最后需要求出图像的平均值。其中脉冲采集可以降低辐射剂量,在临床上被广泛使用,是目前最为先进的X光图像采集方式。连续采集和脉冲采集都要求软件可以一边采集图像一边保存图像,因此软件需要实现多线程处理。现有软件系统可以实现手术中X光图像采集、图像处理及测量、病人信息及图像管理、病例报告生成、DICOM图像传输及打印等功能,基本可以满足临床需求。但是该软件系统还是存在一些不合理的地方:a) 软件结构不合理。每一次硬件更新换代,特别是更换相机时,都需要对软件做出较大调整,使得软件的后期维护困难,且成本高昂。b) 现有的软件系统是基于显约相机开发的,其驱动程序兼容性差,在每一次硬件升级之后都要对软件驱动部分进行调整。另外,显约相机的可靠性较差,目前已有用户反馈相机容易在长期采集后出现BUG。目前国外的X光成像系统的成像元件已逐步从影像增强器向平板探测器过度。与传统的影响增强器相比,平板探测器具有成像分辨率高、采集速度快、便于数字化处理、成像质量稳定、图像视野更大等优势。但是目前国内X光成像系统中,平板探测器的使用非常少,仍处于试验阶段。但是从影像增强器向平板探测器的过度是这一领域的发展趋势。目前驰马特公司已开始着手开发基于平板探测器的成像系统,但是需要对原有的软件系统做出较大调整,需要能够处理更大分辨率的图像、能够响应更快速的采集、需要实现更高效的图像处理及存储,才能够满足平板探测器采集图像的需求。因此,现有软件在这些方面还难以适应平板探测器的采集需求。c) 软件集成度不高,有分散的独立小软件工程,这就造成软件的可靠性差,容易出现错误,使用时也很不方便。这三个问题是比较重要的问题,除了这三个问题,软件还有一些缺点,比如不够美观,软件的功能代码没有注释。2.2 新软件系统总体设计本课题的目标是与驰马特公司合作,在C+Builder平台上,对现有C形臂X光成像软件系统进行开发和改进,构建一套功能完善、系统可靠、满足临床需求、符合医生使用习惯的C形臂X光成像软件系统。现有软件出现诸多问题,比如结构不合理,软件没有集成等等,本课题的研究为解决这些问题,主要分为两个部分:一个是软硬件的模块设计,主要包括软件结构优化、硬件Basler相机驱动和平板探测器驱动更换,其中结构优化,可以增强系统可靠性,实现软硬件的交互升级,硬件驱动更换,可以扩展系统的使用范围,提高系统的性能;另一个是软件的集成,主要是将DICOM图像传输的功能集成到主体软件上,即需要对DICOM图像传输功能重新设计编写。将分散的小软件工程集成到主体软件上而形成独立唯一的软件,可以提高软件的可靠性,同时也方便了使用。3 物理层软件设计3.1 软件结构优化驰马特现有的C形臂X光成像软件系统包含了多个窗体和代码单元,其中比较重要的是frmPatientDlg,frmMain,frmIOHandle这三个窗体。frmPatientDlg窗体如图3.1所示,该窗体是唯一的自动创建窗体,是程序运行后会自动弹出的主界面。在该主界面上点击按钮或者图标,可以创建其他相应的窗体,比如预约病人窗体、编辑病人窗体、采集图像窗体和刻录光盘窗体,之后就可以在新创建的窗体上进行操作。frmPatientDlg窗体的主要作用是新建病人或者查找病人,并将病人的相关信息包括病例号、姓名、性别、出生日期、预约日期、手术医生等信息存储到数据库中。图3.1 frmPatientDlg窗体frmMain窗体如图3.2所示,该窗体是接收探访的窗体,即需要通过点击主界面的采集图像按钮才能够被创建。该窗体的作用不是采集图像,而是对采集到的图像进行图像处理和图像显示。图像处理主要包括图像的平移、翻转、对称,图像增强以及灰度、长度、角度测量。图像显示可以显示一张图像,也可以显示连续几幅图像。图3.2 frmMain窗体frmIOHandle窗体如图3.3所示,该窗体也是接收探访的窗体,即需要通过点击主界面的采集图像按钮才能够被创建。该窗体被创建时,默认不会显示,只有在需要更改参数的时候输入密码才能显示在屏幕上。该窗体的作用是采集图像以及设置相机参数,比如曝光时间、光圈、增益和工作模式。该窗体是连接软件和硬件的通道。图3.3 frmIOHandle窗体综上,现有软件系统大致分为以上三个窗体,其中frmPatientDlg窗体和frmMain窗体主要负责病人信息管理和图像处理,与硬件相机没有关系,但是它们的代码中却含有相机的调用;frmIOHandle窗体包含了相机调用,而且是直接调用相机函数。这就造成硬件相机牵扯了多个窗体,结构混乱,一旦相机进行升级,牵扯的这些窗体都需要进行修改。修改的代码量可能较少,但是必须仔细查询一遍软件整体,这就浪费了人力物力,导致了软硬件交互升级困难。所以必须对软件结构进行优化设计,使其一方面能够维持软件的稳定性和可靠性,一方面又能够方便后期维护和产品升级。基于需求,将软件结构设计为三层:a) 物理层,这一层直接与系统的硬件驱动相关。当硬件更新时,这一层也跟着更新。物理层主要包括图像采集硬件相关函数;b) 应用层,这一层实现与医生交互的功能,与硬件没有直接关联。当硬件更新时,这一层应维持不变,实现软件功能的稳定。应用层主要包括病人信息管理和图像采集处理功能;c) 中间层,这一层连接物理层和应用层,主要作用是传递两者之间的信息。结构优化设计分成三层,上述frmPatientDlg窗体和frmMain窗体属于应用层,frmIOHandle窗体属于中间层,而物理层就是硬件的相关函数配置文件。进行结构优化,就要去除frmPatientDlg窗体和frmMain窗体中不必要的相机调用,使得应用层不受相机牵连。其次对使用到的硬件相机函数包括相机打开初始化、相机参数设置、相机采集等函数进行封装,封装到一个C文件中。这个C文件就是物理层,它包含了硬件相关函数配置文件。添加该C文件到工程中,frmIOHandle窗体调用里面定义的函数,就可以对相机进行操作。frmIOHandle窗体使用该C文件里定义的函数对硬件相机进行操控,获取图像信息传给其他窗体进行图像显示及处理。如果硬件升级,只需要更改一下驱动,对该C文件进行修改即可,其他程序可以保持不变;如果软件升级,增加新的功能,只需添加新的窗体,调用从frmIOHandle窗体获得的图像即可。这样整个软件系统的结构就变的很清晰,保证了软件的稳定性和可靠性,也方便了后期维护和产品升级。3.2 软件物理层需求分析软件物理层封装了相机函数配置文件,其中主要包括相机初始化、相机采集和相机参数设置,这些封装的内容就是物理层的需求。只有清楚了解物理层需求什么,才可以进行相机更换。了解物理层需求,得研究分析现有C形臂X光成像系统的硬件相机。该相机是显约SG系列数字摄像机,简称显约相机或SV相机。它支持硬件和软件外触发,自动白平衡,自动增益、曝光控制,支持二次开发,分辨率是1000*1000。它的背面有两个接口,一个是标准的RJ45插座,用来通过网线和主机进行数据交换;另一个是HR插座,是相机的I/O和电源接口,如图3.4所示。相机通过HR插座和RJ45插座建立了与主机的通信。图3.4 12针HR插座示意图在相机与主机硬件相连后,第一步要做的是安装相机驱动。查阅显约相机的开发文档SDK,该SDK使用指南里写了驱动程序安装和二次开发编程说明,并指出运行环境为WindowsXp。在安装显约相机的驱动时,相关的KDC_API.dll、SelectPath.dll和CommPublic.dll库文件也被安装到主机系统system32目录下。在相机与主机硬件连接并安装相机驱动之后,就可以进行二次开发。进行二次开发,只需要在工程中包含几个头文件,并将KDC_API.lib加入工程中,就可以调用相应的API函数对相机进行操作了。现有软件和相机相关联的是frmIOHandle窗体,该窗体对相机的操作主要包括相机打开,相机关闭,相机采集,相机参数设置,相关函数的详细解释可以在显约相机SDK中查询。相机连接后,相机会有自己的设备序号,默认为0。如果连接了多个相机,则会对应多个序号。使用两个函数KDC_OpenDcvice() 和KDC_CloseDcvice()实现相机打开和关闭,参数是设备序号。使用KDC_SetParameter(DWORD CardNo, KDC_PARAMTER Oper, DWORD Val)函数可以进行相机参数设置,其中CardNo表示设备序号,Oper表示操作参数标志,Val表示具体设置的参数值。Oper参数标志定义在KDC_PARAMTER枚举变量中,其中参数达到200多个,需要用到的参数有工作模式、曝光时间、增益、光圈、图像大小、像素深度和最大图像存储数量等等。利用SetParameter函数可以对序号相对应的相机进行相应的参数设置,比如工作模式设置,Val值设置成0,则相机的工作模式就是连续的;Val值设置成1,则工作模式就是外触发的,需要引脚接收触发信号才会采集图像。其他参数设置类似。使用函数KDC_GetParameter(DWORD CardNo,KDC_PARAMTER Oper) 可以从显约相机获取相应参数的具体值Val。frmIOHandle窗体调用相机函数的流程如下:查询相机个数,打开相机,设置相机各个重要的参数,开始采集,停止采集,关闭相机。每成功采集一张图像,就会自动调用相机回调函数,发消息给frmIOHandle窗体,消息携带了消息号和指向图像数据缓存地址的指针。frmIOHandle窗体代码中编写了消息处理事件,即收到Message消息后,会核对消息号,如果符合,就会将指针指向的缓存数据存储并显示出来。使用回调函数和消息处理机制,使得相机采集图像和主程序并行运行。如果更换现有显约相机,就需要重新编写程序来完成新相机的打开关闭、采集、参数设置和图像数据保存。这些内容就是物理层的需求。3.3 Basler相机驱动更换3.3.1 Basler相机介绍现有C形臂X光成像系统使用的相机是国产的显约相机。虽然该相机的性能勉强能达到手术要求,但是硬件的每次升级,都会导致驱动变化很多,而且相机的兼容性比较差。Basler Pylon CCD相机是德国生产的。该相机全部在德国制造,从原材料采购到产品工艺设计,从产品测试到出厂,Basler有着非常严格的管理体系,每台Basler相机在出厂前也都经过了严格的光学和机械测试。Basler相机性能强大,具备显约相机的大部分功能,比如支持硬件和软件外触发,自动白平衡,自动增益、曝光控制,支持二次开发,分辨率为1600*1600。更重要的是,Basler相机与其它CCD相机相比,具有更好的兼容性,即在不同的操作系统环境下,不同的相机型号,可以使用同样的驱动工作。因此,更换成Basler相机后,会提高软件系统的稳定性,便于软件的后期维护,并降低维护成本。更换Basler相机首先要做的是硬件连接,驱动安装。如图3.5所示的是实验用到的Basler相机,该相机和显约相机类似,背面也有两个接口,一个是标准的RJ45插座,用来通过网线和主机进行数据交换;另一个是HR插座,是相机的I/O和电源接口。将这两个接口与主机连接,就完成了硬件连接。(a) 相机正面 (b) 相机反面图3.5 Basler相机的正面与反面Basler相机与主机完成硬件连接后,必须安装驱动才能够被使用。双击驱动安装包,选择安装路径进行安装。驱动安装完成后会出现三个图标,打开pylon IP Configurator,进行IP地址和子网掩码的设置。如图3.6所示,IP地址为192.168.2.55,子网掩码为255.255.255.0,状态Status显示OK表明检测到了相连的Basler相机,就可以进行二次开发。图3.6 pylon IP Configurator界面进行二次开发,首先需要在工程中添加相应的头文件PylonC.h和lib文件PylonC_MD_BCC55.lib,之后就可以调用Basler相机的函数配置文件。更换相机来采集图像,就要编写相机的打开,初始化,参数设置,采集图像和关闭等相对应的代码,即满足上述软件物理层的需求。查阅Basler相机的开发文档SDK,找出相关的API函数。表3.1列出了本文提到的Basler相机API函数进行说明。表3.1 Basler相机API函数说明1PylonInitialize()Pylon初始化,激活Basler Pylon2PylonTerminate()与PylonInitialize()对应,终止Basler Pylon3PylonEnumerateDevices(&numDevices)查询当前连接到的相机数量,并赋值给numDevices4PylonCreateDeviceByIndex(0,&hDev)将相机句柄hDev连接到第一个被发现的相机5PylonDeviceOpen(hDev,MODE)以MODE的打开方式来打开hDev对应的相机6PylonDeviceSetIntegerFeature(hDev,GevSCPSPacketSize,3000)设置hDev对应相机的整型特征可变换很多整型特征,这里设置传送的数据包大小为3000字节7PylonDeviceGetNumStreamGrabberChannels(hDev,&nStreams)查询hDev对应相机传输层可支持的数据流通道数量8PylonDeviceGetStreamGrabber(hDev,0,&hGrabber)为hDev对应相机的第一个数据流通道创建一个数据流抓取器hGrabber9PylonStreamGrabberOpen(hGrabber)打开数据流抓取器hGrabber10PylonStreamGrabberGetWaitObject(hGrabber,&hWait)对数据流抓取器hGrabber创建等待抓取,句柄为hWait11PylonStreamGrabberSetMaxNumBuffer(hGrabber,NUM_BUFFERS)设置抓取图像的缓冲区最大数目12PylonStreamGrabberSetMaxBufferSize(hGrabber,payloadSize)设置抓取图像的缓冲区大小为payloadSize13PylonStreamGrabberPrepareGrab(hGrabber)hGrabber数据流抓取器准备完成14PylonStreamGrabberRegisterBuffer(hGrabber,buffers,payloadSize,&bufHandles)在数据流抓取器hGrabber上注册缓存15PylonStreamGrabberQueueBuffer(hGrabber,bufHandlesi,(void*)i)形成数据流缓存队列16PylonDeviceExecuteCommandFeature(hDev,AcquisitionStart)开始采集17PylonWaitObjectWait( hWait, 100, &isReady )等待抓取100微秒,isReady返回是否抓取到信息18PylonStreamGrabberRetrieveResult( hGrabber, &grabResult, &isReady )重新获取数据,isReady返回是否重新获取成功19PylonStreamGrabberQueueBuffer(hGrabber,grabResult.hBuffer,bufferIndex )重新排列数据流缓存队列20PylonDeviceExecuteCommandFeature( hDev, AcquisitionStop)停止采集21PylonStreamGrabberCancelGrab( hGrabber )停止数据流抓取器hGrabber采集22PylonStreamGrabberDeregisterBuffer( hGrabber, bufHandlesi )释放用于抓取图像缓存23PylonStreamGrabberClose( hGrabber )关闭数据流抓取器hGrabber24PylonDeviceClose( hDev )关闭hDev对应的相机25PylonDeviceFeatureIsAvailable(hDev, EnumEntry_PixelFormat_Mono8)检测相机某一特征是否可用可变换很多特征,这里是检测hDev对应的相机是否支持Mono8像素类型26PylonDeviceFeatureFromString(hDev, TriggerMode, On)将某字符串String的值赋给相机的某一特征可变换很多特征,这里设置hDev的触发模式为On3.3.2 Basler相机打开并初始化首先第一步需要做的是在frmIOHandle窗体被创建时,初始化pylon,即在frmIOHandle窗体构造函数中使用函数PylonInitialize()。这个初始化的意思是该窗体一旦被建立,Basler Pylon的函数就可以使用了。同样在frmIOHandle窗体的析构函数中,必须使用PylonTerminate()来终止Basler Pylon。这样就保证了在frmIOHandle窗体存在的时候,Basler Pylon一直处于激活状态,也就表明相机的函数配置文件可以被使用。Basler Pylon激活后,就可以打开相机并初始化相机。先使用函数PylonEnumerateDevices查询当前连接到的相机数量,如果为0,就弹出对话框“没有发现相机”;如果不为0,就将第一个查询到的相机关联到事先定义好的句柄hDev。句柄是用来标识应用程序中不同对象和同类对象中不同实例的,比如一个窗口,按钮,滚动条等等。对句柄hDev进行某些操作,就相当于对相对应的相机进行操作。比如打开相机,函数为PylonDeviceOpen(hDev, MODE),其中hDev表明了打开哪个相机,MODE表示打开的方式,有很多值可供选择。相机打开后就要对相机进行一些初始化。比如设置图像像素深度,设置图像大小,设置传递数据包大小等等,其中最重要的是创建打开数据流和分配缓存。为了能连续抓取多张图像,就得创建一个数据流抓取器。Basler相机支持多通道数据流方式,使用这种方法抓取图像比较简单。数据流抓取器不能单靠应用程序直接建立,它必须对应相机,也就是句柄。PylonDeviceGetStreamGrabber( hDev, 0, &hGrabber )建立了hDev的第一个数据流抓取器,而hGrabber就是该数据流抓取器的句柄。PylonStreamGrabberOpen( hGrabber )就是将创建好的数据流抓取器hGrabber打开。分配缓存用到了函数malloc(),该函数可以动态分配内存,每一块缓存设置成图像大小,创建多块缓存就可以缓冲多个图像,最后还需要注册一下这些缓存区,将这些缓存区和数据流抓取器hGrabber联系起来,形成一个数据流缓存队列。这样当相机开始采集图像后,图像数据就会源源不断地存到预先设置好的数据流缓存队列中。3.3.3 Basler相机参数设置在Basler相机打开并初始化完毕后,就可以对相机进行参数设置,相机未打开的情况下是不可以对相机进行任何设置的。首先是读取相机默认设置的图像宽和高还有像素类型,用来设置软件内部参数,这样可以及早确定图像大小,从而在显示图像时节约内存。相机参数设置的重点是工作模式设置,这个设置必须在采集图像前完成,因为没有确定工作模式,采集图像将无法进行。工作模式有两种,第一种是连续模式,即相机开始采集后就会一直连续采集图像,直到停止采集;第二种是硬件外触发模式,即相机开始采集后通过引脚传递触发信号来触发相机采集图像,该引脚与C形臂上的X光发射器相连接,所以触发信号就是X光的发射信号,这样就保证了每次发射X光相机都会采集图像。Basler相机通过设置触发选择器来控制工作模式。如果设置连续工作模式,就选择所有的触发选择器并将其触发模式设置为Off。这些触发选择器包括了AcquisitionStart,FrameBurstStart和FrameStart。如果设置硬件外触发工作模式,就需要选择一个相对应的触发选择器,设置触发模式为On,并设置触发源,比如函数PylonDeviceFeatureFromString(hDev, TriggerSelector, FrameStart)选择触发选择器为FramStart,函数PylonDeviceFeatureFromString(hDev, TriggerMode, On)将触发模式设置为On,函数PylonDeviceFeatureFromString( hDev, TriggerSource, Action1)设置触发源为Action1信号源。Basler相机还可以设置增益和曝光时间等相机参数,这些具体的参数在打开相机时会给出默认值,不同的工作模式下默认值不同。如果需要修改,在frmIOHandle窗体的对应文本框中输入具体值,就可以完成对相机参数的修改。3.3.4 Basler相机采集图像完成Basler相机的打开及初始化和相机参数设置后,就可以采集图像了。采集图像涉及的函数包括开始采集、等待抓取、释放缓存队列和停止采集。显约相机采集图像采取相机自带的回调函数和消息处理机制,如图3.7所示。图3.7 显约相机采集图像流程图每成功采集一张图像,就会调用显约相机自带的回调函数,在回调函数里使用函数PostMessage(Handle,CAPTURE_EVENT,0,m_FrameInfo.lBufPtr)发送消息给frmIOHandle窗体,其中Handle是frmIOHandle窗体的句柄,CAPTURE_EVENT是消息名称,0是WParam值,m_FrameInfo.lBufPtr是LParam值,是指向图像数据的指针。当停止采集时,也会PostMessage发出CAPTURE_EVENT消息给窗体,WParam值却为1。该窗体对此编写了CaptureEvent事件,用于处理接收到的消息:如果消息的WParam值为0,意味着收到了图像采集成功的消息,那么就将LParam值指向的图像数据进行保存显示;如果消息的WParam值为1,意味着采集停止,那么就将之前采集到的图像保存成文件形式。这种机制可以使相机采集和主程序同时进行,相机不断采集图像,同时也不断调用回调函数发消息进行图像的保存显示。Basler相机没有自带的回调函数,因此无法像显约相机一样进行类似的采集图像过程。设置先采集图像后保存图像的流程,不符合连续采集和脉冲采集模式的要求,会对手术不利,尤其会对实时减影的功能造成影响。所以必须使用多线程处理的方式,才可以实现软件一边采集一边保存图像。在一个程序中,独立运行的程序片段就是线程,利用它编程就叫作多线程处理,正在系统上运行的每个程序都是一个进程,一个进程至少有一个主线程,它由系统创建,用户可以在进程中创建线程,一个进程中的所有线程都在该进程的虚拟地址空间中,它们可以实现并行处理,共同使用这些虚拟地址空间、全局变量和系统资源,所以线程间的通讯
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 财务分析的意义和内容说课稿-2025-2026学年中职专业课-财务管理-财经类-财经商贸大类
- unit 7 Today is Monday教学设计-2025-2026学年小学英语四年级下册北师大版(一起)
- 第1课 寻根之旅教学设计-2025-2026学年初中艺术·美术人教版2024七年级下册-人教版2024
- 幼儿的社会行为与道德发展说课稿-2025-2026学年中职专业课-幼儿心理学-学前教育类-教育与体育大类
- 外研版八年级上册英语全册教学设计(配2025年秋改版教材)
- 跳动的琴弦(欣赏 阳光照耀着塔什库尔)教学设计-2025-2026学年小学音乐西师大版五年级上册-西师大版
- 蓄电池知识培训内容课件
- 2025年天津市红桥区中考三模物理试题(解析版)
- 2025年四川省资阳市中考英语试卷(含答案与解析)
- 第1章 生命的世界说课稿-2025-2026学年初中生物学北师大版七年级上册-北师大版
- 调相机工程施工质量验收规程-第4部分-仪表与控制系统
- 四渡赤水(课件)
- 2024年浙江绍兴杭绍临空示范区开发集团有限公司招聘笔试真题
- 部编版五年级语文上册各单元作文范文
- 贵州省贵阳市(2024年-2025年小学五年级语文)统编版小升初真题(上学期)试卷及答案
- 2024-2025学年青岛版七年级数学上册第一次单元过关检测 (前两章)
- 苏少版七年级上册综合实践活动教案
- 院前急救技能竞赛(驾驶员)理论考试题库大全-上(选择题)
- 锁骨骨折的护理查房
- 部编人教版六年级上册语文全册教学课件+单元复习课件
- 《消费心理学》课程教学大纲
评论
0/150
提交评论