APP下载

基于C语言和MATLAB的混合编程在医学图像处理课程中的应用

2018-11-17赵若晗

软件 2018年10期
关键词:牡丹江C语言医学影像

韩 婷,刘 畅,赵若晗,董 默,刘 欣



基于C语言和MATLAB的混合编程在医学图像处理课程中的应用

韩 婷,刘 畅*,赵若晗,董 默,刘 欣

(牡丹江医学院,黑龙江 牡丹江 157000)

利用计算机语言编程完成图像处理教学任务是目前国内关于《医学图像处理》课程的主要的教学方法,而应用计算机语言混合编程完成课程学习对学生学好这门课程乃至今后的就业及工作有着重要的意义。本文针对学生学习医学图像处理本科教学内容提出了一种新的混合编程教学方法,针对不同专业不同教学内容采用以C语言和MATLAB混合编程的方式进行图像处理实践教学,收到了良好的效果。

医学图像处理;MATLAB;软件实践教学;C语言

0 引言

医学图像处理是一门综合了数学、计算机科学和医学影像学等学科的交叉科学[1]。其在医学院校中尤其针对影像、影技、生物医学工程专业属于重点学习内容,是必修的专业课之一,学习本课程对学生今后就业从事工作打下一定的基础。除此之外随着计算机技术不断的发展进步,医学成像及图像处理在生命科学研究、医学诊断及临床治疗等方面起着越来越重要的作用。医学影像图片的质量高低直接影响着医生对疾病的诊断能力[6]。医学图像处理技术已在现代医学中占有了举足轻重的地位[1]。

我校目前招收医学影像学、医学影像技术及生物医学工程专业的学生,以上三个专业学生均在大学三年级学习《医学图像处理》课程,由于医学图像处理课程需要一定的数学基础,因此学生在学习的过程中会出现“跟不上,听不懂,学不会”的情况,由于医学院校中针对5年制医学影像学专业数学学习内容较潜,因此在理论课学习中在图像处理的算法方面并未做重点讲解,而作为工科的生物医学工程和理科专业医学影像技术专业数学学习深入,因此如何区分的针对不同专业开展医学图像处理课程一直是一个难点,在以往的教学经验中,针对不同专业我院采用,不同学时、不同授课内容、不同实验操作及不同考核内容的“四不同”原则进行,但由于授课老师均为同一批教师,因此在讲课中难免会出现对不同专业讲课出现重复甚至超出讲课范围的现象。除此受限数学基础之外,医学图像处理课程还要求学生有一定的计算机基础,包括计算机语言和操作,医学影像学、医学影像技术专业在C语言学习中较比生物医学工程专业学习计算机语言内容较少,这又是一个如何区专业而合理安排授课内容的一大难点。在2017年下半年,我院以2015级学生展开试点教学,针对医学影像学、医学影像技术及生物医学工程专业的医学图像处理课程采用了新的教学模式,即联合C语言及MATLAB语言的混合编程方式,将其在医学图像处理实践课程中加以应用,同时结合图像处理实验箱,以软硬件相结合的方式完成医学图像处理实践教学环节,本篇文章将以实完成教学改革内容的介绍。

1 教学环节介绍

1.1 计算机语言的学习

(1)C语言的学习

在试点教学改革中,学生在大二上学期完成C语言的学习任务,尤其针对医学影像学专业,要求学生以VC++6.0或者QT为学习平台,由于C语言语法繁琐,学习困难,要求学生以看懂代码为主要学习目标,无需编程技巧。

(2)MATLAB学习

在试点教学改革中,学生在大二下学期完成MATLAB语言的学习任务,其中生物医学工程专业和医学影像技术专业以30学时的必修课课程学习作为基础,医学影像学专业学生以20学时选修课课程学习作为基础,无论课时多少,一定要保证学生对MATLAB软件操作熟悉,能够使用MATLAB完成简单的编程及功能实现,不同于C语言的学习,要求所有学生均可实现简单编程。(20学时的学习可以满足此要求)

1.2 医学图像处理理论基础学习

关于医学院校的图像处理与工科院校的图像处理课程最大的区别在于,第一,医学图像处理不过分要求学生掌握算法技巧,往往更注重获取图像处理结果及通过操作获取结果的方法;第二,医学图像处理需要学生针对医学图像有一定的了解,大型医疗设备如CT、MRI等获取的图片可以完成基本图像的阅读工作,这样才能完成后续的处理任务。

我院在医学图像处理的理论学习中以以下几个方面进行展开:

(1)医学图像处理基本概念及基础(4学时)

(2)人眼的视觉基础及图像处理前的准备(6学时)

(3)图像处理的基本运算、变换、融合、分割及重建可视化(20学时)

1.3 医学图像处理实践内容学习

学生在有了上述数学、计算机语言及图像处理理论基础的前提下,可以开展本篇文章所涉及的基于C语言和MATLAB混合编程的实践教学方法,首先整理可以使用此种方法的实践教学内容,根据理论学习的内容不同,具体实践内容如表1所示。

表1 不同专业下医学图像处理实验内容编程开展情况

Tab.1 Content programming of medical image processing experiments under different professions

从表1中可以看出,除了较为复杂的三维重建没有使用C语言编程外,其他医学图像处理功能全部使用两种编程语言完成。

2 基于C语言和MATLAB混合编程的实现

下面将针对具体实例完成医学图像的处理,以对比两种处理方式的应用。

针对医学图像的边缘检测(Sobel)我们分别采用两种方式进行处理。

2.1 C语言的医学图像边缘检测

程序核心代码:

for(i=0;i>1;i++)

{

for(j=0;j>1;j++)

{

/*屏幕上奇数行进行处理*/

d1 = (*(Uint8 *)(tempSrcYbuffer + (288+i)*numPixels + (j-1))) +

2*(*(Uint8 *)(tempSrcYbuffer + (288+i)*numPixels + j)) +

(*(Uint8 *)(tempSrcYbuffer + (288+i)*numPixels + (j+1))) -

(*(Uint8 *)(tempSrcYbuffer + (288+i-1)*numPixels + (j-1))) -

2*(*(Uint8 *)(tempSrcYbuffer + (288+i-1)*numPixels + j)) -

(*(Uint8 *)(tempSrcYbuffer + (288+i-1)*numPixels + (j+1)));

d2 = (*(Uint8 *)(tempSrcYbuffer + (288+i)*numPixels + (j+1))) -

(*(Uint8 *)(tempSrcYbuffer + (288+i)*numPixels + (j-1))) +

2*(*(Uint8 *)(tempSrcYbuffer + i*numPixels + (j+1))) -

2*(*(Uint8 *)(tempSrcYbuffer + i*numPixels + (j-1))) +

(*(Uint8 *)(tempSrcYbuffer + (288+i-1)*numPixels + (j+1))) -

(*(Uint8 *)(tempSrcYbuffer + (288+i-1)*numPixels + (j-1)));

intTemp = d1>d2?d1:d2;

if(intTemp<0)

{

intTemp = 0;

}

if(intTemp>255)

{

intTemp = 255;

}

//屏幕上奇数行进行处理

*(Uint8 *)(tempDisYbuffer + i*numPixels + j) = intTemp;

/*屏幕上偶数行进行处理*/

d1 = (*(Uint8 *)(tempSrcYbuffer + (i+1)*numPixels + (j-1))) +

2*(*(Uint8 *)(tempSrcYbuffer + (i+1)*numPixels + j)) +

(*(Uint8 *)(tempSrcYbuffer + (i+1)*numPixels + (j+1))) -

(*(Uint8 *)(tempSrcYbuffer + i*numPixels + (j-1))) -

2*(*(Uint8 *)(tempSrcYbuffer + i*numPixels + j)) -

(*(Uint8 *)(tempSrcYbuffer + i*numPixels + (j+1)));

d2 = (*(Uint8 *)(tempSrcYbuffer + (i+1)*numPixels + (j+1))) -

(*(Uint8 *)(tempSrcYbuffer + (i+1)*numPixels + (j-1))) +

2*(*(Uint8 *)(tempSrcYbuffer + (i+288)*numPixels + (j+1))) -

2*(*(Uint8 *)(tempSrcYbuffer + (i+288)*numPixels + (j-1))) +

(*(Uint8 *)(tempSrcYbuffer + i*numPixels + (j+1))) -

(*(Uint8 *)(tempSrcYbuffer + i*numPixels + (j-1)));

intTemp = d1>d2?d1:d2;

if(intTemp<0)

{

intTemp = 0;

}

if(intTemp>255)

{

intTemp = 255;

}

//屏幕上偶数行进行处理

*(Uint8 *)(tempDisYbuffer + (i+288)*numPixels + j) = intTemp;

}

}

处理效果如图1所示。

2.2 MATLAB的医学图像边缘检测

程序核心代码:

I=imread('CT.png');

BW1 = edge(I,'sobel');

Figure;

imshow(BW1);

处理效果如图2所示。

图2 MATLAB处理效果

2.3 两种方式的对比说明

从代码的复杂程度上看C语言远超出MATLAB语言,这也是预期的效果,MATLAB作为高级语言及集成的环境很好的将代码简化,从实际处理的效果看并没有太大的区别。但是,在C语言的处理过程中,学生充分的掌握了Sobel算子下的边缘检测是通过何种方式实现的,结合理论知识可以更好的掌握该种图像处理方法,而MATLAB是无法实现的,只能查看处理结果。

3 结论

本文对比了MATLAB和C语言在医学图像处理实践中的应用,目前为止采用C语言和MATLAB结合的实践教学方式已经针对一届学生全面展开,此种混合编程的方式主要有以下优点:

(1)可以根据图像处理的需求采用不同的方式处理,若只关注处理结果我们可以使用MATLAB,其编程简单高效,处理图像速度较快,更容易使学生接受;若需要了解处理过程的详细内容,应使用C语言的处理方式,C代码更复杂且详细概况了处理内部的实际方式,可以让学生透彻的了解图像处理原理,更深刻的学透处理方法。

(2)根据课程安排内容可以看出,不同专业不同实验内容采用的方式是不同的,我们可以根据学生学习的实际情况做调整,这种方式可以更灵活的为不同层次的学生提供最好的学习方式。

在一学期的实验教学过程中,通过课堂演示及学生上机实验情况来看,使用混合编程的教学方式不仅极大的增加对医学图像处理课程学习产生了兴趣,同时也对计算机、数学等相关学科有了更深入的学习,为学生就业考研提供了更深层次的基础。

在接下来的教学改革中,我们将继续使用新的软件配合C语言和MATLAB,目前的研究中正在探索使用医学图像处理专用软件Mimics,这也是未来我们针对医学图像处理教学改革的主要方向。结合多种语言和软件混合编程的方式多样化,立体化,具有较强的实用和推广价值。

[1] 董默, 苏奎, 周志尊等. 生物医学工程专业《医学图像处理》实践教学的改革[J]. 软件, 2017, 38(2): 37-41.

[2] 邓华. 浅谈Matlab在数字图像处理中的应用[J]. 科技资讯. 2006(8): 128-129.

[3] 周志尊, 孙璐等. CT与MRI融合技术的颅内肿瘤应用研究[J]. 软件, 2017, 38(5): 34-38.

[4] 陈广新等. 股骨3D模型构建在股骨头置换手术中的应用研究[J]. 软件, 2017, 38(12): 75-80.

[5] 康晓东. 医学影像图像处理[M]. 北京:人民卫生出版社, 2009.

[6] 聂东升、邱剑锋、郑建立. 医学图像处理[M]. 上海:复旦大学出版社, 2014.

[7] 章毓晋. 图像处理和分析[M]. 北京:清华大学出版社, 2001.

[8] 高向军, 田联房, 王立非等. 利用MATLAB实现医学图像处理与分析[J]. 计算机应用, 2008, 25(6): 1.

[9] 董默, 韩婷等. MATLAB在数字图像处理中的应用[J]. 科技创新导报, 2016, (12): 75/115.

[10] 董默, 赵若晗等. 医学图像三维重建系统设计与应用[J]. 软件, 2018, 39(1): 87-90.

Application of Mixed Programming Based on C Language and MATLAB in Medical Image Processing Course

HANG Ting, LIU Chang*, ZHAO Ruo-han, DONG Mo, LIU Xin

(Mudanjiang Medical University, Mudanjiang City, Heilongjiang 157000, China)

Using computer language programming to complete the teaching task of image processing is the main teaching method of medical image processing. The application of computer language mixed programming to complete the course of learning has great significance for students to learn this course and even for future employment and work.In this paper, a new mixed programming teaching method is proposed for the undergraduate course of medical image processing.According to the different teaching contents of different majors, the image processing practice teaching is carried out by using the mixed programming method of C language and MATLAB which has recieved good results.

Medical image processing; MATLAB; Software practice teaching; C language

G434

A

10.3969/j.issn.1003-6970.2018.10.006

2017年牡丹江医学院教育教学改革研究项目(编号:MYYB20170007);2016年牡丹江医学院教育教学改革研究项目(编号:JY2016051);黑龙江省省属高等学校基本科研业务费科研项目(编号:2017-KYYWF-0632);2018黑龙江省大学生创新创业训练计划项目(编号:201810229025);牡丹江医学院第八届大学生科研立项(编号:201802)

韩婷(1983-),女,牡丹江医学院现代教育技术中心,计算机技术工程硕士,讲师,主要研究方向:计算机编程与网络信息安全;赵若晗(1990-),女,牡丹江医学院,第一临床医学院;刘欣(1997-),女,牡丹江医学院,医学影像学院,本科在读学生。

刘畅(1982-),女,牡丹江医学院现代教育技术中心,计算机专业硕士,讲师,主要研究方向:计算机编程与多媒体设计。

韩婷,刘畅,赵若晗,等. 基于C语言和MATLAB的混合编程在医学图像处理课程中的应用[J]. 软件,2018,39(10):26-29

猜你喜欢

牡丹江C语言医学影像
论迟子建小说的人文情怀
医学影像技术在医学影像诊断中的合理运用
《当代医学影像误诊学》出版
《当代医学影像误诊学》正式出版
基于Visual Studio Code的C语言程序设计实践教学探索
贡献更多“牡丹江力量” 书写更精彩的“牡丹江篇章”
基于C语言的计算机软件编程
牡丹江流域自然地理敏感区划分研究
高职高专院校C语言程序设计教学改革探索
论子函数在C语言数据格式输出中的应用