2021-10-19 00:58:41 +00:00
|
|
|
|
# 基于Java语言实现的医学图像的处理
|
2021-10-19 00:59:46 +00:00
|
|
|
|
|
2021-10-19 00:58:41 +00:00
|
|
|
|
# 摘 要
|
|
|
|
|
|
|
|
|
|
随着计算机技术的迅速发展,数字图像处理技术在医学领域的研究和应用日益深入和广泛。现代医学已越来越离不开医学图像处理技术。医学图像处理技术在临床诊断、教学科研等方面发挥了重要的作用。计算机图像处理技术与影像技术的结合从根本上改变了医务人员进行诊断的传统方式。充分地利用这些技术可以提高诊断的正确性和准确性,提高诊断效率,降低医疗成本,可以更加充分地发挥各种医疗设备的功能。而且,随着数字化、智能化进程的深人,图像处理技术在医疗卫生领域将会有更加广阔的应用前景。
|
|
|
|
|
|
|
|
|
|
Java是Sun公司推出的一种面向对象编程语言。Java非常适合于企业网络和Internet环境,现已成为Internet中最受欢迎、最有影响的编程语言之一。目前国内使用Java语言开发的图像处理系统比较少,这也增加了这方面的研究价值。
|
|
|
|
|
|
|
|
|
|
本文首先对图像增强和图像分割中的几种算法进行了介绍,包括线性灰度变换,伪彩色处理,平滑处理,中值滤波,阈值分割,边缘检测等。然后用Java语言对上述各算法编程实现,并设计Java GUI(图形用户界面)用来显示图像处理的结果,以及创建一个数据库用于存储医学图像。
|
|
|
|
|
|
|
|
|
|
**关键词:**医学图像;图像增强;图像分割;面向对象
|
|
|
|
|
|
|
|
|
|
# 1 医学图像处理概述
|
|
|
|
|
|
|
|
|
|
近年来,随着计算机及其相关技术的迅速发展,图像处理技术日益成熟,使得该技术深入到医学领域的方方面面,开创了数字医疗的新时代。
|
|
|
|
|
|
|
|
|
|
借助图像处理技术的有力手段,医学图像的质量和显示方法可以得到极大的改善,从而使得诊断水平可以借助于图像处理与分析手段来得到极大的改善,这不仅可以基于现有的医学图像设备来极大地提高医学临床诊断水平,而且能为医学培训、医学研究与教学、计算机辅助临床外科手术等提供电子实现手段,为医学的研究与发展提供坚实的基础,具有无可估量的价值。
|
|
|
|
|
|
|
|
|
|
# 2 Java语言实现图像处理
|
|
|
|
|
|
|
|
|
|
## 2.1 图像增强技术
|
|
|
|
|
|
|
|
|
|
数字图像的增强是图像处理中的一个重要研究内容之一,是图像处理的一项基本技术。图像增强是指按特定的需要突出一幅图像的某些信息,同时,削弱或除去某些不需要的信息的处理方法。
|
|
|
|
|
|
|
|
|
|
图像增强在人眼对图像的识别中很重要。人眼有这样一视觉特性:由人眼的视觉和人的心理特性可知,变化幅度较大,细节丰富的区域容易引起人眼的注意,而变化平坦的区域则不容易注意。在人们对视觉的研究中,进行过如下实验,将两幅图同时放在测试者的视野中,其中一幅有黑色线条,另一幅全部都为白色,用仪器分别记录下眼睛注视两幅图的时间,结果表明了人眼有70%的时间在注视带线条的那一幅,这说明变化剧烈的图像更吸引人的注意力,对灰度图像而言,人眼会将注意力集中在灰度值变化大的区域。根据人眼的这一视觉特性,图像处理中对灰度图像的增强就是为了解决这一视觉上的障碍。
|
|
|
|
|
|
|
|
|
|
图像增强的方法分为两大类:空间域方法和频率域方法。
|
|
|
|
|
|
|
|
|
|
空间域增强是指增强构成图像的像素。空间域方法是直接对这些像素操作的过程。空间域处理可由下式定义:
|
|
|
|
|
|
2021-10-19 08:18:54 +00:00
|
|
|
|
![](http://www.writebug.com/myres/static/uploads/2021/10/19/9fd4562c42978085a372319e1561877a.writebug)
|
2021-10-19 00:58:41 +00:00
|
|
|
|
|
|
|
|
|
其中f(x,y)是增强处理前的图像函数,g(x,y)是增强处理后的图像函数,T是对f的一种操作,其定义在(x,y)的邻域。
|
|
|
|
|
|
|
|
|
|
频率域方法是在图像的某种变换域内对图像的变换值进行运算,如f(x,y)表示增强处理前的图像函数,h(x,y)表示空间运算函数,增强处理后的图像函数g(x,y)是由f(x,y)和h(x,y)的卷积的,即
|
|
|
|
|
|
2021-10-19 08:18:54 +00:00
|
|
|
|
![](http://www.writebug.com/myres/static/uploads/2021/10/19/75984e727886aa3fa40fe4c11f3e8f92.writebug)
|
2021-10-19 00:58:41 +00:00
|
|
|
|
|
|
|
|
|
根据卷积理论,在频域中有下面的变换关系
|
|
|
|
|
|
2021-10-19 08:18:54 +00:00
|
|
|
|
![](http://www.writebug.com/myres/static/uploads/2021/10/19/dc8a8909d020d009c198d337c504d8e4.writebug)
|
2021-10-19 00:58:41 +00:00
|
|
|
|
|
|
|
|
|
这里G、H和F分别表示g、h和f的傅立叶变换,H(u,v)称为传递函数。
|
|
|
|
|
|
|
|
|
|
在实际应用中,可根据需要先对图像函数进行傅立叶变换,并选定传递函数H(u,v),然后由计算出G(u,v),最后通过傅立叶反变换得出增强处理后的图像函数,即
|
|
|
|
|
|
2021-10-19 08:18:54 +00:00
|
|
|
|
![](http://www.writebug.com/myres/static/uploads/2021/10/19/04964b6d579988d0345fd6e8f706824e.writebug)
|
2021-10-19 00:58:41 +00:00
|
|
|
|
|
|
|
|
|
### 2.1.1 灰度变换
|
|
|
|
|
|
|
|
|
|
如果一幅图像灰度的对比度差,图像的质量就不好。为了改善图像灰度的对比度,可以对图像中样点的灰度进行刻度尺方面的改变。假设f(x,y)和g(x,y)分别表示原始图像及增强处理后图像像素的灰度。这样使原始图像的像素灰度f(x,y)转换成增强后图像对应像素的灰度g(x,y)转换关系的一般表达式为
|
|
|
|
|
|
2021-10-19 08:18:54 +00:00
|
|
|
|
![](http://www.writebug.com/myres/static/uploads/2021/10/19/7ee57cd406d44cbc9e7d66130e67519e.writebug)
|
2021-10-19 00:58:41 +00:00
|
|
|
|
|
|
|
|
|
线性灰度变换的一般表达式
|
|
|
|
|
|
2021-10-19 08:18:54 +00:00
|
|
|
|
![](http://www.writebug.com/myres/static/uploads/2021/10/19/e9c9747989585fb3314140ba7c5022a4.writebug)
|
2021-10-19 00:58:41 +00:00
|
|
|
|
|
|
|
|
|
其中:a为图像的对比度,如果a>1,对比度增强,如果a<1,对比度减弱。
|
|
|
|
|
|
|
|
|
|
b为图像的亮度,如果b>0,亮度增强,如果b<0,亮度降低。
|
|
|
|
|
|
|
|
|
|
下面来看一下线性灰度变换的Java代码实现,如下只列出如何实现算法的代码。
|
|
|
|
|
|
|
|
|
|
```java
|
|
|
|
|
red=(int)(a * red + b);
|
|
|
|
|
green=(int)(a * green + b);
|
|
|
|
|
blue=(int)(a * blue + b);
|
|
|
|
|
if(red>=255)
|
|
|
|
|
{
|
|
|
|
|
red=255;
|
|
|
|
|
}
|
|
|
|
|
if(green>=255)
|
|
|
|
|
{
|
|
|
|
|
green=255;
|
|
|
|
|
}
|
|
|
|
|
if(blue>=255)
|
|
|
|
|
{
|
|
|
|
|
blue=255;
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
a是调整图像对比度的变量,b是调整图像亮度的变量。由于R、G、B分量空间范围是0~255,所以需设置一个限定条件,防止越界。
|
|
|
|
|
|
|
|
|
|
从下图中可以清晰的对比出经线性变换后的图像更容易观察出病灶,进而减少误诊率。左图为原始图像,右图为经线性灰度变换后图像。
|
|
|
|
|
|
2021-10-19 08:18:54 +00:00
|
|
|
|
![](http://www.writebug.com/myres/static/uploads/2021/10/19/90272cad7d70b3a892904e94a840c0da.writebug)
|
2021-10-19 00:58:41 +00:00
|
|
|
|
|
|
|
|
|
上述所讨论的线性变换为正比变换,下面简要说明一下反比变换,在某些情况下,反比变换得到的图像更容易观察出病变。
|
|
|
|
|
|
|
|
|
|
灰度级范围为[0,L-1]的图像反转变换的表达式为:
|
|
|
|
|
|
2021-10-19 08:18:54 +00:00
|
|
|
|
![](http://www.writebug.com/myres/static/uploads/2021/10/19/2c0dfd8f6b072bdf13226aea9f4f0da8.writebug)
|
2021-10-19 00:58:41 +00:00
|
|
|
|
|
|
|
|
|
其中:s和r分别表示处理前后的像素值。
|
|
|
|
|
|
|
|
|
|
用这种方式倒转图像的强度产生图像反转的对等图像。这种处理尤其适用于增强嵌入于图像暗色区域的白色或灰色细节,特别是当黑色面积占主导地位时。一个例子示于下图,原始图像为一乳房的数字X照片,可看到有一小块病变。尽管事实上两幅图在视觉内容上都一样,但注意,在这种特殊情况下,分析乳房组织结构时反转图像要容易得多。
|
|
|
|
|
|
2021-10-19 08:18:54 +00:00
|
|
|
|
![](http://www.writebug.com/myres/static/uploads/2021/10/19/b638d5b85417b1d0ac734ae5172ccb7c.writebug)
|
2021-10-19 00:58:41 +00:00
|
|
|
|
|
|
|
|
|
下面来看一下反比变换的Java代码实现,如下只列出了某一像素点反比变换代码。
|
|
|
|
|
|
|
|
|
|
```java
|
|
|
|
|
int red=255-cm.getRed(pixels[i*iw+j]);
|
|
|
|
|
int green=255-cm.getGreen(pixels[i*iw+j]);
|
|
|
|
|
int blue=255-cm.getBlue(pixels[i*iw+j]);
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 2.1.2 伪彩色处理
|
|
|
|
|
|
|
|
|
|
伪彩色处理是用彩色来代替像素灰度值的一种技术。由于人眼对彩色的分辨率远高于对灰度差的分辨率,所以这种技术可用来识别灰度差较小的像素。这是一种视觉效果明显而技术又不是很复杂的图像增强技术。灰度图像中,如果相邻像素点的灰度相差不大,人眼将无法从图像中提取相应的信息,因为人眼分辨灰度的能力很差,一般只有几十个数量级,但是人眼对彩色信号的分辨率却很强,这样将黑白图像转换为彩色图像后,人眼可以提取更多的信息量。在转换过程中,对灰度图像中的每一个像素点,取得该点的灰度值并送入红、绿、蓝三个通道实施不同的变换,产生相应的红、绿、蓝的亮度值。
|
|
|
|
|
|
|
|
|
|
# 3 设计流程
|
|
|
|
|
|
|
|
|
|
## 3.1 主流程图
|
|
|
|
|
|
|
|
|
|
本系统的总体设计流程图如图所示
|
|
|
|
|
|
2021-10-19 08:18:54 +00:00
|
|
|
|
![](http://www.writebug.com/myres/static/uploads/2021/10/19/c8d17e700129ed3ed61da83770493eb2.writebug)
|
2021-10-19 00:58:41 +00:00
|
|
|
|
|
|
|
|
|
程序设计流程图大体介绍:
|
|
|
|
|
|
|
|
|
|
首先设计Java GUI即Java用户图形界面,对其中的按钮,菜单添加事件监听器,以便能够当用户触发事件做出相应的响应,然后添加了文件选择器以及连接数据库并实现了数据库查询、插入功能,使用户可以从本地磁盘或从数据库中查询图像。将图像显示在GUI后就可以通过相应的按钮对图像进行处理。
|
|
|
|
|
|
|
|
|
|
具体模块的实现将在以下几节中详细介绍。
|
|
|
|
|
|
|
|
|
|
## 3.2 图像处理界面
|
|
|
|
|
|
|
|
|
|
本设计的图形用户界面如图所示。
|
|
|
|
|
|
2021-10-19 08:18:54 +00:00
|
|
|
|
![](http://www.writebug.com/myres/static/uploads/2021/10/19/98fa68eaf4e986a73fe6bc54aa1f34c5.writebug)
|
2021-10-19 00:58:41 +00:00
|
|
|
|
|
|
|
|
|
在这个界面中,无论是按钮还是菜单选项,都添加了监听器用来监听是否有事件发生,并且都有一个相应的事件处理器。当用户单击其中任何一个都会触发相应的事件,然后将事件发送到事件处理器中进行处理。界面的左侧用于显示载入的图像,即原始图像,右侧用于显示处理后图像,以便对处理前后的图像进行对比。
|
|
|
|
|
|
|
|
|
|
# 参考文献
|
|
|
|
|
|
|
|
|
|
[1] 刘榴娣,刘明奇.《实用数字图像处理》.第一版.北京理工大学出版社
|
|
|
|
|
|
|
|
|
|
[2] 章梳晋.《图像处理和分析》.第一版.清华大学出版社
|
|
|
|
|
|
|
|
|
|
[3] 陈浩,李本富.《医学图像处理技术新进展》.第四军医大学学报
|
|
|
|
|
|
|
|
|
|
[4] 林信良.《Java JDK 5.0学习笔记》.清华大学出版社
|