跪求专家帮助,用matlab提取西红柿的颜色特征,然后识别西红柿的成熟度。

你为什么又问?我告诉你。

你对颜色的提取和对音频的提取是一样的。关键是把各种色标分类,这个很好做。我给你一个区分音频的源程序,是我自己编的。可以模仿一下。差不多了。基本原理是利用BP神经网络进行识别。

%%清除环境变量

色度控制中心

清楚的

%%训练数据预测数据的提取和归一化

%下载四种语音信号

加载数据1 c1

加载数据2 c2

加载数据3 c3

加载数据4 c4

% 4个特征信号矩阵被组合成一个矩阵。

data(1:500,)=c1(1:500,);

data(501:1000,)=c2(1:500,);

数据(1001:1500,)=c3(1:500,);

数据(1501:2000,)=c4(1:500,);

从1到2000随机排序的百分比

k =兰特(1,2000);

[m,n]= sort(k);

%输入和输出数据

输入=数据(:,2:25);

output1 =data(:,1);

%将输出从1维度更改为4维度。

对于i=1:2000

开关输出1(i)

案例1

output(i,)=[1 0 0];

案例2

output(i,)=[0 1 0 0];

案例3

output(i,:=[0 0 1 0];

案例4

output(i,)=[0 0 0 1];

结束

结束

%随机选取1500个样本作为训练样本,500个样本作为预测样本。

input _ train = input(n(1:1500),:)’;

output _ train = output(n(1:1500),:)';

input _ test = input(n(1501:2000),:)';

output _ test = output(n(1501:2000),:)';

输入数据标准化百分比

[inputn,inputps]= mapminmax(input _ train);

%%网络结构初始化

innum = 24

midnum = 25

out num = 4;

重量百分比初始化

w1=rands(midnum,innum);

b1=rands(midnum,1);

w2=rands(midnum,out num);

b2=rands(outnum,1);

w2 _ 1 = w2;w2 _ 2 = w2 _ 1;

w 1 _ 1 = w 1;w 1 _ 2 = w 1 _ 1;

b 1 _ 1 = b 1;b 1 _ 2 = b 1 _ 1;

B2 _ 1 = B2;B2 _ 2 = B2 _ 1;

学习率%

xite=0.1

阿尔法= 0.01;

%%网络培训

for ii=1:10

e(ii)= 0;

因为i=1:1:1500

%%网络预测输出

x=inputn(:,I);

%隐藏层输出

对于j=1:1:midnum

I(j)=inputn(:,i)'*w1(j,)'+b 1(j);

iout(j)= 1/(1+exp(-I(j));

结束

%输出层输出

yn = w2 ' * Iout '+B2;

%%重量阈值校正

%计算误差

e=output_train(:,I)-yn;

E(ii)= E(ii)+sum(ABS(E));

%计算重量变化率

dw2 = e * Iout

DB2 = e ';

对于j=1:1:midnum

s = 1/(1+exp(-I(j)));

FI(j)= S *(1-S);

结束

对于k=1:1:innum

对于j=1:1:midnum

dw1(k,j)=FI(j)*x(k)*(e(1)*w2(j,1)+e(2)*w2(j,2)+e(3)*w2(j,3)+e(4)*w2(j,4));

db 1(j)= FI(j)*(e(1)* w2(j,1)+e(2)*w2(j,2)+e(3)*w2(j,3)+e(4)*w2(j,4));

结束

结束

w 1 = w 1 _ 1+xite * dw 1’+alfa *(w 1 _ 1-w 1 _ 2);

b 1 = b 1 _ 1+xite * db 1 '+alfa *(b 1 _ 1-b 1 _ 2);

w2 = w2 _ 1+xite * dw2 '+alfa *(w2 _ 1-w2 _ 2);

B2 = B2 _ 1+xite * DB2 '+alfa *(B2 _ 1-B2 _ 2);

w 1 _ 2 = w 1 _ 1;w 1 _ 1 = w 1;

w2 _ 2 = w2 _ 1;w2 _ 1 = w2;

b 1 _ 2 = b 1 _ 1;b 1 _ 1 = b 1;

B2 _ 2 = B2 _ 1;B2 _ 1 = B2;

结束

结束

%%语音特征信号分类

inputn_test=mapminmax('apply ',input_test,input PS);

for ii=1:1

对于i=1:500%1500

%隐藏层输出

对于j=1:1:midnum

I(j)=inputn_test(:,i)'*w1(j,)'+b 1(j);

iout(j)= 1/(1+exp(-I(j));

结束

fore(:,I)= w2 ' * Iout '+B2;

结束

结束

%%结果分析

%根据网络输出找出数据属于哪一类。

因为i=1:500

output_fore(i)=find(fore(:,i)==max(fore(:,I));

结束

%BP网络预测误差

error = output _ fore-output 1(n(1501:2000))';

%画出预测语音类别和实际语音类别的分类图。

图(1)

plot(output_fore,' r ')

继续

plot(output 1(n(1501:2000))',' b ')

图例(“预测语音类别”、“实际语音类别”)

%绘制误差图

图(二)

绘图(误差)

标题(' BP网络分类错误',' fontsize ',12)

Xlabel('语音信号',' fontsize ',12)

Ylabel('分类错误',' fontsize ',12)

%print -dtiff -r600 1-4

k =零(1,4);

%找出误判的分类属于哪一类。

因为i=1:500

如果误差(I)~= 0

[b,c]=max(output_test(:,I));

开关c

案例1

k(1)= k(1)+1;

案例2

k(2)= k(2)+1;

案例3

k(3)= k(3)+1;

案例4

k(4)= k(4)+1;

结束

结束

结束

%找出个人和每个类别。

kk =零(1,4);

因为i=1:500

[b,c]=max(output_test(:,I));

开关c

案例1

kk(1)= kk(1)+1;

案例2

kk(2)= kk(2)+1;

案例3

kk(3)= kk(3)+1;

案例4

kk(4)= kk(4)+1;

结束

结束

正确率%

rightridio=(kk-k)。/kk