BP神经网络识别绝缘子

首先用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神经网络不具有大小,旋转,灰度不变性,所以后期决定采用仿射不变矩来识别绝缘子,下篇我们再来讲基于仿射不变矩识别绝缘子的原理。

猜你喜欢

转载自blog.csdn.net/liu14lang/article/details/49249061
今日推荐