基于神经网络的水果识别(收藏)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
---------------------------------------------------------------最新资料推荐------------------------------------------------------ 基于神经网络的水果识别(收藏) 水果识别一、水果识别算法设计:
从水果图像可以看出,仅从水果的主要颜色就可以把它们区分开。
于是我们先提取出主要颜色,然后用 BP 神经网络进行分类。
设计步骤如下:
1) 用 K-均值方法对每幅图像进行聚类。
然后提取出水果的主要颜色。
2) 把每幅图像水果主要颜色的 R、G、B 三个分量分别作为水果的三个特征,把它们作为神经网络的输入。
3) 把一部分提取出的水果特征作为训练样本训练 BP 网络。
4) 读取未知类别的水果图像,然后用 K-均值聚类,提取主要颜色,把主要颜色的 R、G、B 三个分量输入到训练好的神经网络,即可对水果进行分类。
二、实验 1 、特征提取用 k-均值方法对水果图像分类,要分的类别数依赖于图像颜色复杂度,从图像可直观看出三种水果的主要颜色有较大的区别,因此,我们把图像聚成两类,然后提取出主要颜色。
以下是一幅桃子图像聚类的结果原始图像聚类结果把所有水果主要颜色的 R、G、B 三个分量以及每个水果所属类别存放到一个数据文件里(我们存放在 characters.mat 里),以
1 / 5
提供给训练及测试神经网络用。
2 、训练神经网络首先我们选择比较常用的 BP 网络。
网络为两层,其中第一层的传递函数为tan-sigoid,在输出层使用线性传递函数(purelin)。
由于我们要得到的是三个目标,所以输出层使用 3 个神经元,而第一层的神经元需要有试验确定,在这个实验中,通过反复试验,我们发现第一层使用 6 个神经元最为合适,这个时候误差能够达到最好,分类效果也比较理想。
神经网络训练过程中,我们从 characters.mat 文件中读取所有水果的特征和水果所属类别,作为样本。
其中一半的样本用于训练,训练最大循环次数为 100,然后用所有的样本进行测试。
由于每次的初始化是随机的,因此,我们可以反复训练,然后记录训练结果比较的网络。
训练过程发现,网络识别率很容易达到100%,以下是我们训练过程中识别率为 100%时,神经网络的收敛图。
最后的误差可达610 。
0 10 20 30 40 50 60 70 80 90 10010-610-510-410-310-210-1100101100
EpochsTraining-BluePerformance is 3.09984e-006, Goal is 0 三、方法比较 1 、提取两个主颜色上面的方法中,我们只提取一个主颜色作为水果特征,如果我们提取两个组颜色作为水果特征,结果
---------------------------------------------------------------最新资料推荐------------------------------------------------------
会不会更好呢?我们先对图像聚成两类,然后分割出水果,对分割出的水果再聚两类,提取出两个颜色作为特征。
然后训练网络。
我们发现这种情况下识别率仍然为 100%,但收敛速度很快,最后误差可达1210 下图是其收敛过程。
不过这种情况下,结果很依赖于神经网络初始值的选择,初始值不好,结果会比较差。
0 10 20 30 40 50 60 70 80 90 10010 -1210 -1010 -810 -610 -410 -210 0100 EpochsTraining-BluePerformance is 1.86217e-012, Goal is 0 2 、加入粗糙度特征从水果图可以直观看出,从颜色上很容易把苹果分开,但是个别桃子和桔子有较大的相似度,然而,可以发现桔子表面比桃子表面光滑,于是,我们可以想到加入纹理特征(这里指粗糙度),来更好的区分桃子和桔子。
粗糙度的计算用如下公式:
( , , ) ( , ) ( , ) ( , ) ( , )( , ) ( , ) ( , ) ( , )g i j d f i j f i d j f i j f i d jf i j f i j d f i j f i j d= + + + + + 计算所有的 g(i,j,d)(本文中 d=3),然后计算平均值,作为粗糙度特征,于是我们用一个颜色和一个粗糙度作为水果特征,然后训练神经网络。
从结果种情况下识别率仍然为 100%,但收敛速度最快,最后误差可达1710 下图是其收敛过程。
3 / 5
不过这种情况下,结果还是比较依赖于神经网络初始值的选择,初始值不好,结果会比较差。
总的来说,这是效果最好的。
0 5 10 15 20 25 30 35 4010-1810-1610-1410-1210-1010-810-610-410-210040 EpochsTraining-BluePerformance is 6.37405e-018, Goal is 0 三种情况比较:
特征情况识别率收敛速度对网络初始值的倚赖程度一个主颜色 100% 一般较小两个主颜色 100% 较快很大颜色和粗糙度100% 最快较大(综合效果最好)程序文件:
fruitrecognize.m 水果识别主程序 fruitrecognize.fig 水果识别界面characters1.mat 一个颜色是的所有水果特征characters2.mat 一个颜色是的所有水果特征 characters3.mat 一个颜色特征和粗糙度特征 bpnet1.mat bpne1t.emf 以一个颜色作为特征时训练的网络和误差图。
bpnet2.mat bpnet2.emf 以两个颜色作为特征时训练的网络和误差图。
bpnet3.mat bpne3t.emf 颜色和粗糙度作为特征时训练的网络和误差图。
在 matlab 下运行 fruitrecognize.m 即可进入水果识别界面。