基于Python的医学图像处理课程教学改革探索

2023-12-26 02:50娄梦莹黄忠浩宋朝晖
科技风 2023年33期
关键词:库中直方图图像处理

娄梦莹 于 璐 黄忠浩 宋朝晖 袁 虎

齐鲁医药学院医学影像学院 山东淄博 255213

1 概述

随着医学成像技术的不断革新,医学图像处理技术已成为医学影像领域的重要组成部分,在医学研究与临床诊断中发挥着重要的作用,在医学类教育中具有很高的理论性和实用性,因此,医学图像处理这门课程在相关高校课程中的地位也越来越重要[1]。

医学图像处理是一门理、工、医相结合的多学科交叉课程,是利用数学方法和计算机技术对医学图像进行具有临床目的与意义的处理的技术。该课程以医学成像原理、数字信号处理及图像分析方法为理论基础[2],不仅要求学生掌握常用医学影像成像技术的原理、图像质量的影响因素,同时要求学生有较好的程序语言编程能力,学会使用复杂的算法快速实现并得到处理结果,从而提高图像的质量。通常在大学开设该课程都包含理论与实验两部分,多数高校教师采用传统的MATLAB编程工具进行实验教学。MATLAB中有较多的工具箱,例如小波工具箱、数字信号处理工具箱等,可以通过调用相关函数完成经典的图像处理功能。谭超[3]等人主要利用MATLAB进行图像处理工作,主要应用有图像处理的基本运算、图像的变换域处理、图像的形态学处理等。此外,MATLAB中的GUI(Graphical User Interface)工具为虚拟实验软件的开发提供了高集成度的环境,可有效提高效率。魏宁宁[4]等人运用MATLAB GUIDE结合M文件进行程序编写,以实现医学图像处理中各个实验项目。

近年来,随着人工智能技术的不断发展和进步,各种新的编程工具应运而生。Python作为一种功能强大的开源编程语言,随着深度学习网络的深入发展,在各个领域应用越来越广泛,同时也越来越受广大师生和科研人员的喜爱。针对医学图像处理领域,一方面,Python具有功能强大的扩展库,包含多种现有的图像处理函数,能够简单便捷地实现传统的医学图像处理方法;另一方面,Python在深度学习网络模型开发中具有一定的优势,能够利用多种新型的网络模型完成不同的医学图像处理操作。

目前,Python在医学图像处理领域的应用越来越普遍,Python语言不仅作为高校师生的科研工具更融入高校的课程中,且已经在一些高校的相关课程的实验教学中得到应用[5]。

2 Python与医学图像处理课程融合优势

医学图像处理课程不仅要求学生掌握其理论知识,理解相关算法基础,更要求学生能够通过实验操作得到相应的图像处理效果,编程实现各种理论算法。因此,需要科学合理地安排相关实验,加强理论与实践的有机结合。

在当代高校教学中,学科融合作为一种新的教学理念已经逐步渗透各个领域。学科融合有利于形成知识体系,提升学生的学习质量和效率,有利于培养学生独立思考、创造性思维,促进多元化思维的发展,能激发学生学习兴趣,使学生积极主动学习。

目前,Python程序设计课程已经引入医学影像技术专业教学内容中,将Python编程与医学图像处理课程实验内容相结合,实现学科融合,能够发挥更好的教学效果。Python程序设计课程的引入为医学图像处理实验提供了编程基础,而医学图像处理课程为Python程序设计提供了应用平台,二者相辅相成,加强理论与实践的有机结合能够更好地实现学生的综合能力培养,更专注于应用型人才的培养,更符合新时代对青年学生的要求。

将Python语言引入医学图像处理课程,根据理论知识合理安排调整实验环节是本次课程改革研究的重点。在Python的扩展库中,有大量可以用来进行医学图像处理的函数工具库,例如Numpy、Matplotlib、Pillow、Skimage、OpenCV等。这些扩展库能极大地简化算法编程过程,以更简便的形式帮助学生理解和完成医学图像处理的相关操作。因此,将Python应用在医学图像处理课程中能更好地让学生掌握该门课程的精髓。

3 Python在医学图像处理课程中的实践应用

医学图像处理主要是把数字化的二维图像看作二维矩阵进行运算,而Python中的Numpy函数能够实现数字图像到矩阵的转换,即Numpy数组表示图像数据,可通过对Numpy数组的操作完成对图像的相关处理。Python中的Pillow、OpenCV、Scipy、Matplotlib、Skimage等工具库也都支持Numpy数组模块。

在医学图像处理课程的理论学习中,其主要内容包括医学图像的基本处理基础、医学图像的变换方法、医学图像的增强方法、医学图像的分割方法、医学图像加权融合方法等。合理安排相应的实验内容,旨在用实际操作完成医学图像处理过程,实现理论方法与实践操作相结合,真正完成医学图像处理全过程。

3.1 用Python实现医学图像的基本处理

医学图像处理课程的基本内容包括图像信息的读取、格式转换及保存、彩色图像与灰度图像之间的相互转换、灰度直方图的绘制以及基础的算术运算、几何变换等。

在实验过程中,利用Pillow工具库中Image模块的相关函数能够实现各种基本图像处理操作。其中,利用open()函数能够将图像赋值给变量,再利用size函数、format函数、filename函数读取图像的尺寸信息,获取图像的分辨率、文件名及文件格式类型,还可通过save()函数实现各种图像格式的转换和保存,通过convert()函数实现彩色图像与灰度图像之间的转换。在绘制图像的灰度直方图时,主要用到Matplotlib工具库中的hist()函数。此外,利用Matplotlib工具库中的imshow()、show()函数,能够显示图像,并能够通过title()、xlabel()、ylabel()、axis()函数等为图像添加相关的标题、标签及坐标等标注信息。基础的算术运算可以通过Numpy工具中的array()函数进行矩阵的加、减、乘、除计算。几何变换可以通过Pillow工具库中Image模块的resize()函数、rotate()函数、transpose()函数分别实现图像的缩放、旋转、镜像处理。

3.2 用Python实现医学图像变换

医学图像处理课程中主要的图像变换有三种,分别是傅里叶变换、离散余弦变换、小波变换。

在实验过程中,利用Numpy工具库中的fft函数计算一维和多维离散傅里叶变换;利用Scipy工具库中的fftpack子工具库中rfft()、irfft()、fft2()等各类傅里叶变换函数,实现更多种类的傅里叶变换方法;利用PyWavelets工具库中的wavedec函数进行小波变换;利用OpenCV工具库中的dct、idct函数进行离散余弦变换。

3.3 用Python实现医学图像的增强

医学图像增强是医学图像处理课程中的重点内容,指根据图像特点、存在的问题或应用目的等,所采取的改善图像质量、加强图像某些特征的措施,主要包含灰度变换增强算法、直方图均衡化算法及各种滤波器增强算法。

在实验过程中,实现医学图像的灰度变换增强一般采用简单的算术运算按照灰度变换公式直接对图像矩阵进行处理,即直接对图像数据所对应的Numpy中的array()数组进行运算。

直方图均衡化是医学图像处理中最常用的图像预处理方法,用简单的编程操作实现医学图像的直方图均衡化增强,获得较好的图像处理效果是该课程重点教学内容之一。在Python中,OpenCV、Skimage及Pillow工具库中都有相关的内置函数可以用来实现图像的直方图均衡化处理;在Pillow工具库中,ImageOps模块中的equalize()函数可实现直方图均衡化;在Skimage工具库中,exposure模块中的equalize_hist()函数可以实现直方图均衡化;在OpenCV工具箱中,equalizeHist()函数可以实现直方图均衡化。

医学图像的滤波增强从滤波原理上大致分为空域滤波器和频域滤波器两大类;从处理效果上大致分为图像平滑滤波器和图像锐化滤波器两种。其中,图像平滑处理主要功能是去除噪声、增强细节信息,常用中值滤波和均值滤波算法;图像锐化处理主要功能是增强边缘轮廓信息,常用边缘锐化和边缘检测算法。在Python中,利用Pillow工具库的ImageFilter模块中的filter()函数能够实现各种图像滤波处理。其中,用于图像平滑增强处理的函数有SMOOTH平滑滤波器、MedianFilter中值滤波器、MinFilter最小值滤波器等;用于图像锐化增强处理的函数有SHARPEN锐化滤波器、EDGE_ENHANCE边缘增强滤波器、CONTOUR边缘轮廓滤波器等。另外,Skimage工具库的filters模块、restoration模块以及OpenCV工具库提供了大量的函数,也可以用于进行医学图像的空域滤波增强处理,例如,均值滤波、双边滤波、维纳滤波等。

3.4 用Python实现医学图像的分割

医学图像分割是将感兴趣区域从背景中分离并提取出来,主要内容包括基于阈值的图像分割算法、基于边缘检测的图像分割算法、基于形态学的图像分割算法、基于分水岭的图像分割算法以及基于模式识别的图像分割算法。

在实验教学中,主要实践内容为基于阈值的医学图像分割方法的实现,典型的分割算法为图像二值化处理,即基于单阈值的医学图像分割算法。在Python中,利用Numpy中的array()将图像转换为数字矩阵,然后通过Numpy中的where()函数将矩阵中的每一个元素值与阈值进行大小比较(关系运算),以此将数字图像分割成感兴趣区域和背景区域两部分,实现图像二值化分割处理。在此过程中,可以采用灰度直方图hist()函数进行双峰法选阈值,也可以对矩阵运算取均值为阈值。其次,Skimage工具库的segmentation模块可以实现基于分水岭的医学图像分割;filters模块可以实现基于边缘检测算子的医学图像分割和基于阈值的医学图像分割。

此外,用Python可以搭建深度学习网络模型进行医学图像分割。先利用Pillow库读取图像文件,并将其转换为Numpy数组,然后利用Tensorflow、Pytorch等模块构建图像分割网络模型,例如典型的U-Net图像分割模型。Python中有大量开源的深度学习网络模型可提供使用,能够简化编程过程,方便操作演示,更利于学生理解和自主学习。

3.5 用Python实现医学图像的融合

图像融合是用特定的算法将两幅或多幅图像综合成一幅新的图像。对于医学影像相关领域而言,医学图像融合主要是将解剖结构图像和功能图像相融合,使融合后的图像同时具有解剖学和功能学特点,主要方法有基于空域的图像融合和基于变换域的图像融合。常用的医学图像空域融合算法包括像素灰度极大(小)值融合、像素灰度值加权融合;变换域图像融合方法主要是小波变换算法。

像素灰度值加权融合是医学图像融合中最常用的方法,也是实教学的重点实验项目。在Python中,将图像转化为Numpy数组后,设置合理的权重模板,对多幅图像的数组添加权重参数,然后直接对多个数组进行运算,即采用多数组之间的算术运算可实现图像的加权融合。也可以利用Pillow工具库的ImageChops模块中的内置函数进行图像的融合,例如,相加函数add()、减法函数subtract()、叠加函数multiply()等。

4 总结

基于Python的医学图像处理课程教学改革旨在提高学生的操作能力,培养学生对本门课程的学习兴趣,培养学生解决实际问题的能力,具有较强的创新性和实用性。经过近三年的改革探索,用Python语言进行医学图像处理实验教学取得了较好的教学效果。

首先,融入课程融合理念,Python程序设计为医学图像处理打下了坚实的编程基础,反之,本课程也让Python程序设计得到了实践应用。用Python语言进行实验设计更容易被学生接受和理解,实验操作执行更顺畅,学生学习兴趣浓厚。

其次,注重实践教学,革新实验教学手段,优化实验教学内容。教学过程中,注重理论方法与实践操作的有机结合,突出课程的实用性,加强对实践能力的引导和培养。用Python代替传统的MATLAB进行实验教学,旨在通过简单的Python编程实现医学图像处理课程教学中的主要图像处理方法。在实验过程中,Python免费开源、语法简单,能高效地进行数值计算,在图像处理方面也有相应的功能强大的内置函数库,且在深度学习领域发展迅速,能够利用Python中的现有函数完成对医学图像的各种不同的处理操作,来满足临床检查中对不同图像的需求,提供高质量的医学图像来服务医学诊断。

此外,Python作为当今人工智能领域重要的编程语言,受到各个研究机构及企业的青睐,学生掌握一定的Python编程能力有助于今后的工作就业。

猜你喜欢
库中直方图图像处理
符合差分隐私的流数据统计直方图发布
动物城堡
动物城堡
用直方图控制画面影调
基于图像处理的机器人精确抓取的设计与实现
机器学习在图像处理中的应用
智能盘库在自动化立体库中的探索和应用
基于空间变换和直方图均衡的彩色图像增强方法
基于图像处理的定位器坡度计算
基于直方图平移和互补嵌入的可逆水印方案