脑肿瘤检测基于matlab GUI SOM脑肿瘤检测含Matlab源码 2322期
Posted 海神之光
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了脑肿瘤检测基于matlab GUI SOM脑肿瘤检测含Matlab源码 2322期相关的知识,希望对你有一定的参考价值。
⛄一、脑肿瘤计算机辅助检测方法概述
尽管目前报道的脑肿瘤CAD检测方法有所不同, 但基本都遵循如下四个步骤: (1) MRI脑部图像的预处理。 预处理主要包括图像增强、 去噪、脑实质分割[4]及多模态MRI图像的配准等[5]。 (2) 感兴趣区域提取。为确保整个CAD系统的敏感性, 在提取感兴趣区域时应尽可能地把所有肿瘤都分割出来作为疑似肿瘤[6]。 (3) 特征提取及优化选择。 为进一步区分肿瘤和正常组织, 一定要从图像中提取一定数量和类型的特征, 这些特征将成为对疑似病灶进行分类的基础。 (4) 肿瘤的分类识别。 这一步的主要工作是设计分类器, 利用训练样本对分类器进行训练, 再对候选肿瘤进行分类。
1 图像的预处理
在脑肿瘤CAD系统研究中, 滤波通常是预处理的一个重要环节。 根据MRI图像的成像原理, 图像可能因磁场的不均匀性, 病人在成像过程中的移动等原因形成伪影和噪声[7]。 文献[7]通过中值滤波、均值滤波以及通过傅里叶变换后进行频域滤波等方式将伪影噪声等加以去除。
在医学图像处理中, 通常都要进行图像增强以增加正常组织与非正常组织的对比度, 常用的方法是直方图均衡化[5,7,8,9], 这是典型的空域图像增强算法, 能够较为快速地扩大图像的灰度范围。 但是对于噪声较大, 细节信息较多的医学图像, 直接使用这类方法会导致图像细节信息丢失, 而这些信息对于医学图像来说尤为重要。 文献[10]提出了一种空频域结合的图像增强算法, 先使用方向性滤波器组 (Directional Filter Bank, DFB) 对MRI图像进行分解, 得到四个子带图像, 图像中的细节信息因经过方向滤波而得到增强, 而不带方向分布特性的噪声得不到方向表达。 之后采用对中心像素与领域块内像素均值之差进行加权的方法, 使图像亮点更亮, 暗点更暗。 然后对增强后的各子带进行DFB重建, 最后使用直方图均衡化使图像灰度级均匀分布。 该方法能够较好地提高医学图像的对比度, 同时尽可能多地保留了像素的细节信息。
2 感兴趣区域提取
图像分割问题一直是医学图像处理与分析中的经典难题, 在CAD研究中, 对图像中感兴趣区 (ROI) 的准确分割尤其关键。 要对ROI进行分类识别, 首先要从图像中把ROI精确分割出来[11], 然后从分割出的ROI中提取出相关特征, 最后由分类器根据这些特征对ROI进行分类识别。
目前在MRI脑部CAD中常用的检测和分割方法有基于对称性的分析算法[5,12,13]、基于密度特征的聚类算法[14]、基于概率的马尔科夫随机场算法[9]、基于动态模型的分割[14]。 正常大脑的左右两边具有较高的影像对称性, 对称性分析算法即从待检测的图像中搜索出左右两边的差异来检测异常点, 以此作为区域生长算法等分割算法的种子点, 生长出感兴趣区域。 聚类算法及马尔科夫随机场算法往往将MRI脑部图像分割成除背景外的四类:脑灰质、脑白质、脑脊液及肿瘤, 然后提取出肿瘤类作为感兴趣区域[9]。 基于动态模型的分割算法主要是对已经确诊的脑肿瘤或者通过检测算法的检出结果进行精确分割, 该算法的分割结果相对更加精确, 在临床上更易被接受。
3 特征提取及优化选择
感兴趣区域的特征提取与优化选择也是CAD系统的关键。 近年来研究的脑肿瘤CAD系统选择的特征中最常见的是形状特征、 灰度特征及纹理特征等[4,5]。 各研究者根据自己的算法不同, 也选择了不同的肿瘤特征, 如轮廓特征、熵[7]及三维形状特征等。 目前脑肿瘤CAD系统之所以研究很不成熟, 一个较为主要的原因就是基于单一模态的MRI特征训练不足以反映肿瘤的复杂性。 而弥散张量成像 (Diffusion Tensor Imaging, DTI) 技术是通过水分子的弥散来揭示脑内部功能特征信息, 而这些特征信息主要是通过各向异性 (Fractional Anisotropy, FA) 、表现弥散系数 (Apparent Diffusion Coefficient , ADC) 等参数来度量的, 因此建立基于MRI-T1、DTI等多模态特征相结合的CAD特征集, 将有利于分类器的训练及后续的分类识别。
在特征提取方面近年来比较流行的方法是主成分分析算法 (Principal Component Analysis, PCA) [15], 后该算法由文献[16]受支持向量机中通过核函数实现非线性变换的思想的影响而改进为核主成分分析, 对样本进行非线性变换, 通过在变换空间主成分分析来实现在原空间的非线性主成分分析, 实现感兴趣区域特征维数的降低。 而核主成分分析算法性能受核函数及参数影响很大, 针对最优参数难以选取的问题, 文献[9应用了细菌觅食优化算法对感兴趣区域特征加以优化提取, 其研究中与遗传算法和人工蜂群算法做了比较, 在较大样本下获得了较好的优化效果。
4 肿瘤的分类识别
在脑肿瘤的分类识别中, 较为常用的方法有:线性判别分析, K近邻, 神经网络[9]等, 这些方法同样被应用于检测肺结节等领域[2]。 但是这些方法往往受训练样本数的限制而很难有理想的效果。 支持向量机方法与传统模式识别方法以及人工神经网络方法相比, 其最主要特点是它能够在样本数相对较少, 特征维数高的情况下仍然能取得较好的应用效果。 文献[17]将支持向量机方法与线性判别分析和K近邻法进行了比较, 支持向量机在脑肿瘤分类识别方面表现出了较为良好的性能。
虽然目前脑肿瘤自动诊断系统的研究已经取得了较多成果, 但是距离临床应用还有相当的距离, 假阳性依然较高, 且识别出来的肿瘤很少有区分其是原发性肿瘤还是继发性肿瘤, 在临床中针对不同类型的肿瘤通常需要采用不同的治疗手段。 因此, 需要在后续研究中进一步提高敏感性, 降低假阳性, 以及对肿瘤作更精细的分类, 以达到临床应用需求。
⛄二、部分源代码
function varargout = som(varargin)
% SOM Application M-file for som.fig
% FIG = SOM launch som GUI.
% SOM(‘callback_name’, …) invoke the named callback.
%
if nargin == 0 % LAUNCH GUI
fig = openfig(mfilename,'reuse');
% Use system color scheme for figure:
set(fig,'Color',get(0,'defaultUicontrolBackgroundColor'));
% Generate a structure of handles to pass to callbacks, and store it.
handles = guihandles(fig);
guidata(fig, handles);
if nargout > 0
varargout1 = fig;
end
elseif ischar(varargin1) % INVOKE NAMED SUBFUNCTION OR CALLBACK
try
[varargout1:nargout] = feval(varargin:); % FEVAL switchyard
catch
disp(lasterr);
end
end
%| ABOUT CALLBACKS:
%| GUIDE automatically appends subfunction prototypes to this file, and
%| sets objects’ callback properties to call them through the FEVAL
%| switchyard above. This comment describes that mechanism.
%|
%| Each callback subfunction declaration has the following form:
%| <SUBFUNCTION_NAME>(H, EVENTDATA, HANDLES, VARARGIN)
%|
%| The subfunction name is composed using the object’s Tag and the
%| callback type separated by ‘_’, e.g. ‘slider2_Callback’,
%| ‘figure1_CloseRequestFcn’, ‘axis1_ButtondownFcn’.
%|
%| H is the callback object’s handle (obtained using GCBO).
%|
%| EVENTDATA is empty, but reserved for future use.
%|
%| HANDLES is a structure containing handles of components in GUI using
%| tags as fieldnames, e.g. handles.figure1, handles.slider2. This
%| structure is created at GUI startup using GUIHANDLES and stored in
%| the figure’s application data using GUIDATA. A copy of the structure
%| is passed to each callback. You can store additional information in
%| this structure at GUI startup, and you can change the structure
%| during callbacks. Call guidata(h, handles) after changing your
%| copy to replace the stored original so that subsequent callbacks see
%| the updates. Type “help guihandles” and “help guidata” for more
%| information.
%|
%| VARARGIN contains any extra arguments you have passed to the
%| callback. Specify the extra arguments by editing the callback
%| property in the inspector. By default, GUIDE sets the property to:
%| (‘<SUBFUNCTION_NAME>’, gcbo, [], guidata(gcbo))
%| Add any extra arguments after the last argument, before the final
%| closing parenthesis.
% --------------------------------------------------------------------
function varargout = pushbutton2_Callback(h, eventdata, handles, varargin)
fname=get(handles.edit1,‘string’)
im=imread(fname);
im=im2double(im);
axes(handles.axes1);
set(handles.axes1,‘HandleVisibility’,‘on’,‘Visible’,‘on’,‘Units’,‘pixels’);
imshow (im);
set(handles.axes1,‘HandleVisibility’,‘callback’);
disp(‘pushbutton2 Callback implemented.’)
% --------------------------------------------------------------------
function varargout = pushbutton1_Callback(h, eventdata, handles, varargin)
fname=get(handles.edit1,‘string’)
[im,map]=imread(fname);
im=im2double(im);
[m,n]=size(im);
me(1,1)=mean(mean(im));
me(1,2)=std(std(im));
display(‘som mapping started’);
sm=somcluster1(me);
display(‘som mapping finsihed’);
hc=hcluster1(sm);
display(‘clsuters find’);
c=hc’;
[m,n]=size©;
display(‘knn clustering started’);
[im1,im2,c]=kmean(im,c,n);
[m,n1]=size(im);
im3=zeros(m,n1);
[x,x1]=size©;
for i=1:m
for j=1:n1
if ( im2(i,j)==x1)
im3(i,j)=im(i,j);
end
end
end
axes(handles.axes2);
set(handles.axes2,‘HandleVisibility’,‘on’,‘Visible’,‘on’,‘Units’,‘pixels’);
imshow(im3);
set(handles.axes2,‘HandleVisibility’,‘callback’);
axes(handles.axes3);
set(handles.axes3,‘HandleVisibility’,‘on’,‘Visible’,‘on’,‘Units’,‘pixels’);
imshow(im1);
set(handles.axes3,‘HandleVisibility’,‘callback’);
display(‘knn clustering finished’);
disp(‘pushbutton2 Callback implemented.’)
⛄三、运行结果
⛄四、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1]王晓飞,聂生东,王远军.基于MRI的脑肿瘤计算机辅助检测技术研究进展[J].中国医学物理学杂志. 2014,31(01)
3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除
以上是关于脑肿瘤检测基于matlab GUI SOM脑肿瘤检测含Matlab源码 2322期的主要内容,如果未能解决你的问题,请参考以下文章
肿瘤分割基于matlab聚类乳腺肿瘤图像分割含Matlab源码 1471期
肿瘤分割基于matlab聚类乳腺肿瘤图像分割含Matlab源码 1471期