1.基于MATLAB的BP神经网络在图像处理中的应用
在加工每一针前根据设定轨迹、运动参数、物料材质、当前加工位置等先用BP神经网络得到加工点粗略的变形量,对加工轨迹进行预补偿。
加工时动态采集加工点的局部图像,经数字图像处理得到加工点实际坐标与设定坐标的偏差值,一方面将所得值作为神经网络的输出样本,结合相关参数对神经网络进行在线培训,另一方面将此偏差值与加工点设定坐标之和(即加工点实际坐标)用神经网络的输出进行预补偿,求出其与针头实际位置的差值作为PID控制器的输入,从而提高控制系统的动态特性,实现快速精确绗缝的自动化加工。
2.BP神经网络的Matlab编程
#include<stdio.h> #include<conio.h> #define RUN 1 void swap(int *a, int *b) { int temp; temp = *a; *a = *b; *b = temp; } void change(int *p) { int i; int j; int *pmax = p, *pmin = p; for (i = 0 ; i < 5 ; i++) { for (j = 0 ; j < 5 ; j++) { if (*pmax < *(p + 5*i + j)) { pmax = (p + 5*i + j); } if (*pmin > *(p + 5*i + j)) { pmin = (p + 5*i + j); } } } swap(pmin, p); swap(pmax, (p + 12)); #if RUN printf("%d %d\n", *p, *(p + 12)); #endif pmin = (p + 1); for (i = 0 ; i < 5 ; i++) { for (j = 0 ; j < 5 ; j++) { if (*pmin > *(p + 5*i + j) && (i != 0 || j != 0)) { pmin = (p + 5*i + j); } } } swap(pmin, (p + 4)); #if RUN printf("%d\n", *(p + 4)); #endif pmin = (p + 1); for (i = 0 ; i < 5 ; i++) { for (j = 0 ; j < 5 ; j++) { if (*pmin > *(p + 5*i + j) && (i != 0 || j != 0) && (i != 0 || j != 4)) { pmin = (p + 5*i +j); } } } swap(pmin, (p + 5*4)); #if RUN printf("%d\n", *(p + 20)); #endif pmin = (p + 1); for (i = 0 ; i < 5 ; i++) { for (j = 0 ; j < 5 ; j++) { if (*pmin > *(p + 5*i + j) && (i != 0 || j != 0) && (i != 4 || j != 0) && (i != 0 || j != 4)) { pmin = (p + 5*i + j); } } } swap(pmin, (p + 4*5 + 4)); #if RUN printf("%d\n", *(p + 24)); #endif } main() { int a[5][5]; int *p1 = &a[0][0]; int i, j; printf("input the numbers:\n"); for (i = 0 ; i < 5 ; i++) { for (j = 0 ; j < 5 ; j++) { scanf("%d", &a[i][j]); } } change(p1); printf("the new is:\n"); for (i = 0 ; i < 5 ; i++) { for (j = 0 ; j < 5 ; j++) { printf("%d ", *(p1 + 5*i + j)); } printf("\n"); } getch(); }。
3.1.如何用MATLAB神经网络工具箱创建BP神经网络模型
%人脸识别模型,脸部模型自己找吧。
function mytest() clc; images=[ ]; M_train=3;%表示人脸 N_train=5;%表示方向 sample=[]; pixel_value=[]; sample_number=0; for j=1:N_train for i=1:M_train str=strcat('Images\',num2str(i),'_',num2str(j),'.bmp'); %读取图像,连接字符串形成图像的文件名。 img= imread(str); [rows cols]= size(img);%获得图像的行和列值。
img_edge=edge(img,'Sobel');%由于在分割图片中我们可以看到这个人脸的眼睛部分也就是位于分割后的第二行中,位置变化比较大,而且眼睛边缘检测效果很好 sub_rows=floor(rows/6);%最接近的最小整数,分成6行 sub_cols=floor(cols/8);%最接近的最小整数,分成8列 sample_num=M_train*N_train;%前5个是第一幅人脸的5个角度 sample_number=sample_number+1; for subblock_i=1:8 %因为这还在i,j的循环中,所以不可以用i block_num=subblock_i; pixel_value(sample_number,block_num)=0; for ii=sub_rows:(2*sub_rows) for jj=(subblock_i-1)*sub_cols+1:subblock_i*sub_cols pixel_value(sample_number,block_num)=pixel_value(sample_number,block_num)+img_edge(ii,jj); end end end end end %将特征值转换为小于1的值 max_pixel_value=max(pixel_value); max_pixel_value_1=max(max_pixel_value); for i=1:3 mid_value=10^i; if(((max_pixel_value_1/mid_value)>1)&&((max_pixel_value_1/mid_value)<10)) multiple_num=1/mid_value; pixel_value=pixel_value*multiple_num; break; end end % T 为目标矢量 t=zeros(3,sample_number); %因为有五类,所以至少用3个数表示,5介于2的2次方和2的3次方之间 for i=1:sample_number % if((mod(i,5)==1)||(mod(i,5)==4)||(mod(i,5)==0)) if(i<=3)||((i>9)&&(i<=12))||((i>12)&&(i<=15)) t(1,i)=1; end %if((mod(i,5)==2)||(mod(i,5)==4)) if((i>3)&&(i<=6))||((i>9)&&(i<=12)) t(2,i)=1; end %if((mod(i,5)==3)||(mod(i,5)==0)) if((i>6)&&(i<=9))||((i>12)&&(i<=15)) t(3,i)=1; end end % NEWFF——生成一个新的前向神经网络 % TRAIN——对 BP 神经网络进行训练 % SIM——对 BP 神经网络进行仿真 % 定义训练样本 % P 为输入矢量 P=pixel_value'% T 为目标矢量 T=t size(P) size(T)% size(P)% size(T)% 创建一个新的前向神经网络 net_1=newff(minmax(P),[10,3],{'tansig','purelin'},'traingdm')% 当前输入层权值和阈值 inputWeights=net_1.IW{1,1} inputbias=net_1.b{1} % 当前网络层权值和阈值 layerWeights=net_1.LW{2,1} layerbias=net_1.b{2} % 设置训练参数 net_1.trainParam.show = 50; net_1.trainParam.lr = 0.05; net_1.trainParam.mc = 0.9; net_1.trainParam.epochs = 10000; net_1.trainParam.goal = 1e-3; % 调用 TRAINGDM 算法训练 BP 网络 [net_1,tr]=train(net_1,P,T); % 对 BP 网络进行仿真 A = sim(net_1,P); % 计算仿真误差 E = T - A; MSE=mse(E) x=[0.14 0 1 1 0 1 1 1.2]'; sim(net_1,x)。
4.用Matlab编程BP神经网络进行预测
原理就是:建立网络-数据归一化-训练-预测-数据反归一化。附件是电力负荷预测的例子,可以参考。
BP(Back Propagation)神经网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。它的学习规则是使用最速下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小。BP神经网络模型拓扑结构包括输入层(input)、隐层(hidden layer)和输出层(output layer)。
5.基于时间序列matlab的BP神经网络预测
楼上的程序是对的,但是你只有输出数据,输入数据是什么呢?
难道是时间,年限和输出数据之间没关系吧。所以你的原始数据条件不够
net=newff(minmax(P)【7,1],{'tansig','logsig'},'traingdx');
newff为建立一个BP神经网络,minmax(P为输入数据的范围,),[7,1]表示BP网络有三层,中间隐藏层有7个神经元,输出一个神经元。tansig表示正切传递函数,将数据转化到-1到+1之间,logsig表示传递函数,将数据转化到0到+1之间,traingdx表示训练方法。
楼主还是好好看书学习一下,不然仅仅死记硬背matlab工具箱,只会知其然不知其所以然啊!!神经网络不难的,通了很简单!!
6.matlab中BP神经网络程序
给你修改了一下,请参考:
clear all
%p1,p2是训练样本
p1=[65 76 80 74 80 76 82 78 76 80 79 81 78 72 73;
80 82 87 80 85 86 85 82 79 89 74 77 60 70 68;
98 90 80 86 75 70 78 80 82 84 76 72 60 75 62;
55 60 63 57 59 49 42 40 45 42 30 39 35 30 25;
43 60 65 36 39 30 34 45 44 47 35 39 25 40 30;
86 90 90 93 87 84 75 85 87 85 70 82 79 78 79;
88 83 90 89 80 80 85.6 90 92 86 70 75 69 70 72;
90 92 95 95 88 80 82 88 87 90 75 76 82 80 80;
95 97 96 97 90 87 80 89 86 88 80 78 80 86 88;
92 94 80 84 88 84 80 92 90 88 85 82 79 84 85];
p2=[0 0 0.8601 0;
0 0 0.7491 0.0033;
0 0 0.7328 0.1237;
0 0.6238 0.0489 0;
0 0.8400 0.0522 0;
0 0 0.5347 0.9354;
0 0 0.5311 0.1833;
0 0 0.3615 0.3348;
0 0 0.3578 0.4412;
0 0 0.2895 0.3620];
pr1=minmax(p1);
pr2=minmax(p2);
%创建一个前向反馈后向传播神经网络-即BP神经网络
net=newff(pr1,pr2,[5,4],{'tansig','purelin'},'trainrp');
%设置训练参数
net.trainParam.lr = 0.05;
net.trainParam.goal = 0.0001;
net.trainParam.epochs = 5000;
%训练网络
net = train(net,pr1,pr2);
x=[50 62 65 57 60 49 44 40 48 42 25 45 35 36 23;
80 86 69 67 79 89 80 83 85 88 90 99 95 88 85];
%测试训练结果y
y1=sim(net,pr1);
7.用matlab中bp神经网络实现由输入值预测输出值的程序
给你个例子如下,
net=newff(inputn,outputn,[8,4],{'tansig','purelin'},'trainscg');%初始化网络结构
%网络参数配置(迭代次数、学习率、目标)
net.trainParam.epochs=3000;
net.trainParam.lr=0.08;
net.trainParam.goal=0.05;
net.divideFcn = '';
[net,tr]=train(net,inputn,outputn);%网络训练
%网络预测输出
an=sim(net,inputn_test);
不过只了解输入预测输出,这些还不够,还要看你的输入数据的量,来确定隐含层,还需要看数据是不是归一化,我专门做神经网络的预测工作,可否加QQ探讨一下?
转载请注明出处众文网 » 毕业设计(论文)基于matlab的bp神经网络的仿真与实现(基于MATLAB的BP神经网络在图像处理中的应用)