医学图像处理系统平台的研究与开发 第9页
医学图像处理平台的设计与实现
MATLAB是由MathWork公司开发的一种主要用于数值计算及可视化图形图像处理的工程语言。它数值分析、矩阵计算、图形图像处理、信号处理和仿真等诸多强大的功能集成在较易使用的交互式计算机环境之中,为科学研究、工程应用提供了一种功能强大、效率高的编程工具。
5.1基于MATLAB的系统平台总体设计
5.1.1MATLAB简介
MATLAB是美国的Math Works 公司推出的一个科技应用软件,主要是面向科学计算, 可视化以及交互式程序设计的高技术计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境之中, 为科学研究、工程设计以及必须进行有效数值计算的众多学科领域提供了一种简捷、高效的编程工具。借助于这种编程环境, 任何复杂计算问题及其解的描述均十分符合人们的逻辑思维方式和数学表达习惯, 并在很大程度上摆脱了传统非交互式程序设计语言(如C、For2tran) 的编程模式,为自然科学和工程设计诸多领域。
MATLAB强大的功能越来越被人们所接受,而且应用领域也在不断地扩大。
MATLAB产品主要应用领域为:
● 仿真和建模
● 实时仿真
● 自动控制
● 信号处理与通信
● 数据分析与科学计算
● 算法开发
● 图像处理
● 独立应用与开发
● 其他领域
5.1.2MATLAB在图像处理中的应用
图像处理中往往把数字化的二维图像作为二维矩阵来研究,基于矩阵运算MATLAB可以很自然地扩展到图像处理应用领域。MATLAB7中推出了功能更强大的适应于图像处理的工具箱,常用的有图像处理工具箱、小波工具箱及数字信号处理工具箱。利用如此多的工具,我们可以方便地从各个方面对图像的性质进行深入的研究.图像处理工具箱几乎包括了经典图像处理的所有方面,从基本的图像增强到图像分割,MATLAB都提供了简便的函数调用来实现许多经典图像处理方法,同时,MATLAB还提供了对多种图像文件格式(如tif, bmp, jpg, pcx等)读写和显示的支持,这使得MATLAB的集成环境中进行图像处理的实验模拟非常方便。下面就MATLAB在图像处理中各方面的应用分别进行介绍。
(1)图像处理的基本类型与运算
MATLAB中图像的最基本的数据结构是数组。在MATLAB中大多数图像用二维数组double(64位)浮点型、或uint(8位无符号整数) 、uint16(16位无符号整数)存储的,以减少图你的储存量。MATLAB支持五种图像类型(索引图像、灰度图像、二值图像、RGB图像和多帧图像) 。
MATLAB也提供了图像的和、差等线性运算,以及卷积、相关、滤波等非线性运算。例如,covZ(a,b)实现a,b两幅图像的卷积。
(2)图像的时域分析
这里包括了图像统计特征的计算;图像增强工具,包括Gamma较正、直方图均衡、中值滤波、自适应滤波等:边缘检测算子,如log算子、canny算子、sobel算子、prewltt算子等。
例如:
imhist (a )显示图像a的直方图;
B=edge (a,’log’,[],1)计算 =1时图像a的log算子边缘;
imshow (B)显示图像B。
也如,图像的边缘检测,有具体的两条标准:
a.灰度值的导数的绝对值是否大于给定的的阈值;
b.二阶导数是否为0(zero crossing) 。
Edge函数的调用格式;
BW=edge(I,method,thresh)
这里I是输入的灰度图像,BW返回的是与I相同大小的二值图像,I表示边缘,0表示其他。Edge函数支持6种寻找边缘的方法,分别是Sobel方法、Roberts方法等。
(3)图像的变换域处理
MATLAB提供了一维和二维离散傅立叶变换(DFT),快速傅立叶变换(FFT),离散余弦变换(DCT),及其反变换函数:以及连续小波变换(CWT),离散小波变换(DWT)及反变换函数[12]。例如,B=dct(a); C=idct(b);这两条语句实现了图像矩阵a的离散余弦变换及反变换.
(4)图像的数学函数处理
MATLAB在图像处理中的应用都是由相应的MATLAB函数来实现,使用时只需按照函数的调用语法正确输入参数即可,具体的用法可参考MATLAB丰富的帮助文档。对于MATLAB内部函数不能实现的问题,需要另外编程或修改有关的内部函数。
5.2图形用户界面(GUI)
图形用户界面(GUI)是提供人机交互的工具和方法。GUI是图形对像—GUI控件,如:按钮、文本、滑块和菜单等组成的用户界面[13]。一个设计优秀的GUI界面能够非常直观地让用户知道如何操作MATLAB界面。如:只要简单移动一下滑块,一个变量的值就能够随着发生变化;当点击OK按钮时,我们的设置得到应用并且对话框关闭。更令人兴奋的是.绝大多数使用GUI的计算机用户都知道如何应用GUI的标准控件。这也为GUI设计提供了广阔的前景。MATLAB的GUI为开发者提供了一个不脱离MATLAB的开发环境,更有益于MATLAB程序的GUI集成。为一般用户提供了极大的方便。
通过用户与底层的程序代码建界面,用户可以不了解程序命令行而去操作应用程序。因此,应用程序比直接运行命令更容易学习和使用。特别是使用MATLAB计算软件的绝大用户,并不关心GUI的开发,而重点关注于MATLAB巨大的数值计算、工程分析等。但是开发者拥有了工程开发成果时,面向的不是自己,而是客户(使用者),很不幸的是,客户对MATLAB一无所知或根本不想去了解那么多令人费解的代码,这时GUI设计显得特别重要。GUI成为高质量的程序与其用户交流的平台。
本章将介绍如何使用MATLAB的图形用户界面(GUI)技术设计医学图像处理平台界面。基于这个系统平台,用户可以对不同的医学图像进行降噪、边缘检测、分割算法、编码压缩等处理。这样用户可以看出每种算法的处理的效果,以便于分析比较。除此之外,因为MATLAB强大的图形图像处理能力,所以演示出的的分割图像非常清晰,效果很不错。
命令窗口不是唯一与MATLAB的交互方式。生成用户图形界面的最常见的理由:
(1)编写一个需多次反复使用的实用函数,菜单、按钮、文本框作为输入方法具有意义;
(2)编写函数或开发应用程序供别人使用;
(3)创建一个过程、技术或分析方法的交互式示例;
(4)认为GUI的简洁,性能良好,并且想实践一下。
假定想实现一个M文件,首先确定是否要编写脚本文件或函数文件。
5.3系统图形界面介绍
基于MATLAB仿真的图像处理显示了此系统模拟仿真的一大特色。用户可以在页面上对不同的图形进行降噪、边缘检测、分割处理(比如bmp,jpg,tif等)和压缩处理,另外用户还可以对同一个图像选择不同的降噪方法、边缘检测算子、分割算法,这样用户可以看出每种算法处理图像的效果,以便于比较和分析。除此之外,因为MATLAB强大的图形图像处理能力,所以演示出来的的分割图像非常的清晰,效果也不错的。
5.3.1GUI界面布局设计
进入GUI设计界面有多种方法,在MATLAB工作间键入guide命令,也可以从file\new\gui。界面如下图5.1所示。
图5.1 开始GUI设计模板界面
Creat new GUI包含了四种变化的设计模块界面:Blank GUI(Default)创建一个新的空白GUI;GUI with Uicontrols 创建一个有控件组件的GUI; GUI with Axes and Menu 创建一个带有轴对象和菜单的GUI;Model Question Dialog 创建一个对话框。Open Existing GUI 打开以前的GUI设计来编辑。打开一个任意的gui,出现以下界面,如下图5.2所示。
图5.2 版面设计工具
本系统设计步骤如下:
图5.3 系统GUI设计步骤
不过在GUI设计程序前,首先要考虑设计对象的结构和开发流程。开发前的思考、开发前的文档编辑对于理清编程者的思路、提高开发效率有十分重要的作用。不同的要求设计出来的GUI也千差万别。一个优秀的界面基本上符合下面的标准:易用性、统一性、规范性和合理性。
5.3.2GUI各功能模块的设计
实验界面分为三个功能区:添加噪声区域,图像处理方法区域,病灶区域面积计算区域。
(1)添加噪声区域
首先在FIG编辑界面建立下拉菜单,然后在M-FILE Editor中使用switch…case格式编写该菜单的CALLBACK程序。调用程序如下:
switch imnoise_type
case { 1 } %加入噪声
im_noised = gaussian_bai(im_original); %加入高斯白噪声
case { 2 }
im_noised = speckle(uint8(im_original));%加入乘性噪声
case { 3 }
im_noised=default(im_original);%原始图像
end
(2)图像处理方法区域
图像处理方法区域包括的方法有图像降噪方法(中值滤波和小波变换降噪)、图像边缘检测方法(canny算子法等)和图像分割方法(迭代式阈值法和分水岭法)。该区域的CALLBACK同样用到了switch…case语句。调用程序如下:
switch method_number
case {1}
im_filtered = medfilter(im_noised);
case {2}
im_filtered = waveletquzao(im_noised);
case {3}
im_filtered = roberts(im_original);
case {4}
im_filtered = sobel(im_original);
case {5}
im_filtered = canny(im_original);
case{6}
im_filtered=zhifangtu(im_original);
case {7}
im_filtered=fenshuiling(im_original);
end
(3)病灶区域面积计算区域
病灶区域面积计算采用目标区域分离法,通过统计病灶区域的像素来计算面积。
统计像素的程序如下:
g=imread('图像名称');
b=im2bw(g);
n=0;N=0;
nk=zeros(2,1);%出现次数
[row,col]=size(b);
for i = 1:row
for j = 1:col
num = double(b(i,j))+1; %获取像素点灰度级
nk(num) = nk(num)+1;%统计nk
end
end
%结果
for i=1:1
n=n+nk(i);%病灶区域像素
end
for i=1:2
N=N+nk(i);%总像素
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... 下一页 >>