1.案例描述
遗传神经网络在特征分类方面,有着非常广泛的应用。通过先期的学习,能够通过分类得到特定的对象和特征。将其用在图像分割上面,主要对特定类型的一类图像进行分割。如,在一副含有苹果和草莓的图像当中,分割出苹果或者草莓;在一副含有人的图像中,分割出肤色区域。在本例中,主要将其用在医学图像的分割上。
在分割之前要做好两项工作:一是提取前景和背景的特征值;二是用提取好的特征值进行遗传神经网络训练。
(1) 提取特征值 主要通过手工对图像进行分析,确定前景色的范围和背景色的范围,然后把前景色和背景色按顺序存入一个数组中,生成的这个数组就为训练样本数组。然后再建立一个同样大小的数组,来保存样本的特征值。如果为前景则特征值为1,背景色特征值为0。
(2) 遗传神经网络训练 将上一步提取好的样本值和特征值送入遗传神经网络进行训练。遗传神经网络首先在权值、阈值的值空间中,搜索出一组最合适的权值和阈值,将此设置为神经网络的初始权值、阈值。然后再进行训练,直到均方误差收敛到指定值,或者达到最大迭代次数。此时的神经网络是最优的。
(3) 图像分割 可以将图像分割看成一个分类的过程。图像(G)中的每一个像素(Gij)是一个待分类的样本,将这个样本送入遗传神经网络(sim)进行分类,将输出一个特征值Vi,这个特征值决定该样本属于其中一类的概率。可以决定,如果该值大于0.5,那么认为它是前景(F),否则它就是背景(B)。
式中 H 分割后的图像。
2.代码实现
function retstr = gabpdemo()
NNTWARN OFF
retstr=-1;
%
%用于产生样本文件
generatesample('datasample.mat');
%
%遗传神经网络训练示例
gaP = [100 0.00001];
bpP = [500 0.00001];
load('datasample.mat');
gabptrain( gaP,bpP,p,t )
%
%神经网络分割示例
load('datanet.mat');
img = imread('imagea.bmp');
bw = segment( net,img ) ;
figure;
subplot(2,1,1);
imshow(img);
subplot(2,1,2);
imshow(bw);
%
%传统BP训练
%出现的结果,可能收敛不到目标值,或者收敛步数太长(356步)
epochs = 2000;
goal = 0.00001 ;
net = newcf([0 255],[6 1],{'tansig' 'purelin'});
net.trainParam.epochs = epochs;
net.trainParam.goal = goal ;
load('datasample.mat');
net = train(net,p,t);
%
%遗传BP训练
%遗传算法寻找最优权值、阈值会用一些时间
%bp的训练还是非常快,38步就收敛到的目标值
gaP = [100 0.00001];
bpP = [500 0.00001];
gabptrain( gaP,bpP,p,t );
3.程序运行
程序在MATLAB7.0下运行,同时要求将遗传算法工具箱加入到MATLAB的搜索路径中,在MATLAB命令窗口中直接运行gabpdemo.m文件即可。主要界面分别如下图所示。
传统BP神经网络训练过程误差
遗传算法适应值计算
结合遗传算法的神经网络训练过程误差
图像分割结果