之前的文章讲述了肺结节CT影像数据特征提取算法及基于MATLAB GUI设计的肺结节CT影像特征提取系统。本文将讲述几个主要部分的代码实现,分别是预处理、灰度特征提取、纹理特征提取、形态特征提取数据。
一.预处理部分代码
1、读取肺结节CT数据和专家标记的mask数据
function [ sData ] = read_dcm_mask( dcmPath,maskPath,Ng )
function [ sData ] = read_dcm_mask( dcmPath,maskPath,Ng )
%read_dcm_mask.m 读取dcm文件和mask文件为矩阵,为后期使用准备
%第一个程序
% DESCRIPTION:
%此函数处理dcm文件和mask文件
%1.设置dcm和mask文件所在路径
%2.执行函数即可
%INPUTS:
%dcmPath:dcm文件所在路径
%maskPath:mask文件所在路径
%Ng:标准化的CT灰度级数
%OUTPUTS:
%sData:保存了volume和mask以及prepareVolume函数所需参数的一个cell结构
nowPath=cd;
mkdir(nowPath,'feature_extraction');%创建文件夹存放数据
dcmList=dir(dcmPath); %获取dcm文件列表
maskList=dir(maskPath); %获取mask文件列表
nDcm=size(dcmList,1); %取得处理数据数目
%nMask=size(maskList,1);
%获取prepareVolume函数需要的参数,创建cell结构的sData,保存volume和para.
dcm1Path=fullfile(dcmPath,dcmList(3).name); %获取第一个dcm文件
info=dicominfo(dcm1Path); %取得dcm文件部分信息用于参数设置
data.volume=[];
data.mask=[];
para.scanType='Other';
para.pixelW=info.PixelSpacing(1);
para.sliceS=info.SliceThickness;
para.R=1;
para.scale=info.PixelSpacing(1);
para.textType='Matrix';
para.quantAlgo='Lloyd';
para.Ng=Ng;
%sData={data,para}
%开始读取数据
for i=1:nDcm-2
dcmName=dcmList(i+2).name;
dcmP=fullfile(dcmPath,dcmName);
maskName=maskList(i+2).name;
maskP=fullfile(maskPath,maskName);
volume=dicomread(dcmP);
data(i).volume=volume;
mask1=imread(maskP);%医生标记的ROI区域
mask=im2bw(mask1);
data(i).mask=mask;
end
%
disp('数据读取完毕!');
sData={data,para};
save sData.mat sData;
save info.mat info;
% file=fullfile(nowPath,'feature_extraction');
% movefile('sData.mat',file);
2.获取ROI区域数据
function [ROIdata] = getROI( sDataPath )
function [ROIdata] = getROI( sDataPath )
%function getROI.m 获得ROI区域
% 第二个函数
%DESCRIPTION:
%读取sData数据ÿ