picture-processing/README.md

143 lines
9.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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