您的位置:首页 > 理论基础 > 计算机网络

BP神经网络识别绝缘子

2015-10-19 13:32 344 查看
首先用xlsread()函数将excel表中数据读取出来,然后对其直方图均衡化,均衡化的作用就是将一幅图像的灰度均匀分布,使得使得图像更加清晰,BP神经网络实际上就是从我们找的正负样本中让机器认识正样本与负样本,然后我们输入待识别图像,然后让机器自动识别正样本(一般为我们要是别的东西),首先我们得找正负样本,正样本的要求就是样本只能含有绝缘子样本,负样本绝不能含有绝缘子。比如正样本:



然后我们通过找到的正负样本来训练BP神经网络,最后得到的权值矩阵通过
save theta theta1 theta2
来保存。具体训练函数BPMain(XALL,yALL,hidden_layer_number,maxIter,Lambda,threshold);

XALL与YAll我们通过以下操作得到,XAll相当于B,YALL相当于C。

clear;clc;
tic;
c=25*25;
B=ones(2585,c);
C=zeros(2585,1);
C(1:1618,1)=1;
for i=1:1618
image_toRead_name=strcat('C:\Users\lenovo-\Desktop\绝缘子神经网络\标准清晰截图(正)\test (',num2str(i));
image_toRead_name=strcat(image_toRead_name,').png');
A=imread(image_toRead_name);
A=imresize(A,[25 25]);
B(i,:)=reshape(A,1,c);
end
for i=967
image_toRead_name=strcat('C:\Users\lenovo-\Desktop\绝缘子神经网络\标准清晰截图(负)\test (',num2str(i));
image_toRead_name=strcat(image_toRead_name,').png');
A=imread(image_toRead_name);
A=imresize(A,[25 25]);
B(1618+i,:)=reshape(A,1,c);
end
toc;


BPMain(XALL,yALL,hidden_layer_number,maxIter,Lambda,threshold)中hidden_layer_number代表隐含神经元的个数,maxIter代表迭代次数,Lambda代表正则化系数,threshold表示阈值。

然后我们就可以通过滑窗,在每一个滑到的窗口上利用PredictNewData();函数来表示其与正样本的差别程度,最后通过设定阈值来排除不是绝缘子的部分。最后发现利用两次滑窗的效果更佳,因为我们所识别的部分相对于整幅图太小,所以我们先用大框画,然后用小框滑。但缺点就是BP神经网络不具有大小,旋转,灰度不变性,所以后期决定采用仿射不变矩来识别绝缘子,下篇我们再来讲基于仿射不变矩识别绝缘子的原理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: