本站所列毕业设计(论文)资料均属于原创者所有,初衷是为大家在毕业设计(论文)过程中参考和学习交流之用。

毕业设计我帮你

基于matlab的水果识别系统

基于matlab的水果识别系统

这次实验采用两个特征进行图像识别,特征的数量较少,因此在识别的准确率上有一些欠缺。要进一步提升准确率,需要加入更多的特征。 是否正确对图像进行预处理,在很大程度上影响之后的特征提取以及图像的识别。为了提高预处理的效果,可以采用matlab的图像工具

如需购买请QQ扫描右边二维码或者加QQ 3449649974 咨询 毕业设计(论文)代做请加QQ 2269757180


  • 详细描述

    基于matlab的水果识别系统
    1.摘要
    通过matlab软件对水果图像进行处理,从而正确识别香蕉和水果。
    2.引言
    图像识别是模式识别的一个分支,具有广泛的应用场景。可以应用于货物分拣,自动分类等场景。以水果识别程序为基础,可以进一步开发其他图像识别程序。
    3.基础知识
    对图像的识别通常要经历图像增强,图像复原,图像分割,特征提取四个步骤。
    图像增强和图像复原属于预处理部分,预处理过程的好坏对之后图像分割和特征提取的效果影响很大。
    图像增强的作用是将低对比度的图像转化为高对比度的图像。
    图像复原的作用是消除图像中的噪声。
    图像分割的目的是将目标物体与背景区分。
    这里选择的图像是清晰,对比度高的图像,因此图像增强和图像复原操作可以省略。
    特征提取是通过一定的标准,对我们感兴趣的特征进行描述。通过特征的值与对照组的特征值进行比较,即可获得判定结果。
    4.功能介绍
    对于给定的单个水果的图片,能够正确识别图中的水果是香蕉还是苹果。
    对于其他物体,能够给出识别失败的提示信息。
    5.功能设计
    根据日常生活中的经验,要正确判断一个水果是香蕉还是苹果,可以从三方面进行考虑:一是形状,二是颜色,三是纹理。以下分别从这几种思路入手,尝试识别两种水果。
    1.从形状的角度
    苹果的形状近似于圆形,香蕉的形状近似于月牙。根据数学知识,圆形的面积与周长之比最大,因此苹果的周长与面积的比值应该小于香蕉。因此,物体的周长与面积的比值可以视作图像的特征之一,可以用来区分两种水果。
    2.从颜色的角度
    苹果多为红色或绿色,香蕉多为黄色。颜色的区别较大,因此可以从颜色可以作为比较特征。但是由于灰度值与RGB值是一对多的关系,这个特征的实际应用效果不好。经过实验测试,舍弃颜色这个特征。
    3.从纹理的角度
    苹果表面较为光滑,香蕉的表面较粗糙。因此二者表面的纹理有差异,可以视作特征之一。在实验中,使用图像灰度值的二阶矩作为物体的纹理特征。
    6.实验结果
    分别使用香蕉,苹果,梨,菠萝,lena图作为测试数据。
    7.总结体会
    这次实验采用两个特征进行图像识别,特征的数量较少,因此在识别的准确率上有一些欠缺。要进一步提升准确率,需要加入更多的特征。
    是否正确对图像进行预处理,在很大程度上影响之后的特征提取以及图像的识别。为了提高预处理的效果,可以采用matlab的图像工具库。通常来说,图像工具库的函数效果要优于自己实现的对应函数。
    8.参考文献
    1)RafaelC.Gonzalez, RichardE.Woods, StevenL.Eddins,等. 数字图像处理(MATLAB版)[M]. 电子工业出版社, 2013.
    9.代码
    1.主程序
    close all;
    clear all;
    [filename,pathname]=uigetfile('.jpg');%从电脑中获取等待计算的图像地址
    pathfile=fullfile(pathname,filename);%连接图像路径
    apple=imread('apple.jpg');%用于判断的标准苹果图像
    banana=imread('banana.jpg');%用于判断的标准香蕉图像
    test=imread(pathfile);
    [col_a,wan_a]=cal(apple);%分别计算标准图像与待计算图像的纹理特征和形状特征
    [col_b,wan_b]=cal(banana);%具体注释见函数内部
    [col_t,wan_t]=cal(test);
    bc=0;%纹理值,0说明与苹果纹理相近,1说明与香蕉纹理相近
    bw=0;%形状特征,0说明与苹果的形状相近,1说明与香蕉的形状相近
    if(abs(col_a-col_t)<abs(col_b-col_t))%判断特征的相似程度
        bc=0;
    else
        bc=1;
    end
    if(abs(wan_a-wan_t)<abs(wan_b-wan_t))
        bw=0;
    else
        bw=1;
    end
    if(bc==0&bw==0)%两个特征即可认为是正确识别
       msgbox('输入的图像为苹果','运算结果');
    else
        if(bc==1&bw==1)
            msgbox('输入的图像为香蕉','运算结果');
        else
            msgbox('输入的图像不是苹果或香蕉','运算结果');%只有一个特征符合,认为是识别失败
        end
    end
    2.计算纹理值
    function [ O ] = cal_cor( I,E )
    %使用二阶矩表示图像的纹理特征
    %I为输入的灰度图像,E为I的边缘信息
    F=imfill(E,'holes');
    %figure,imshow(E);
    %figure,imshow(F);
    O=0;
    T=0;
    num=0;
    [m,n]=size(I);
    for i=1:m
        for j=1:n
            if(F(i,j)>0)
              num=num+1;
              T=T+power(double(I(i,j)),2);
              O=O+double(I(i,j));%类型转换
            end
        end
    end
    T=T/num;
    O=O/num;
    O=O*O;
    O=T-O;
    O=sqrt(O);
    end
    3.计算形状特征
    function [ O ] = cal_wan( I,E )
    %使用图形周长与面积的比值表示物体的形状特征
    %I为输入的灰度图像,E为I的边缘信息
    F=imfill(E,'holes');
    area=0;%面积
    per=0;%周长
    [m,n]=size(I);
    for i=1:m
        for j=1:n
            if(E(i,j)>0)
             per=per+1;
            end
        end
    end
    for i=1:m
        for j=1:n
            if(F(i,j)>0)
            area=area+1;
            end
        end
    end
    O=double(per)/(area-0);
    end
    4.计算纹理值与形状特征
    function [ col,wan ] = cal( I )
    %计算图像的形状特征与纹理特征
    %I为RGB图像
    I=rgb2gray(I);
    E=gray2edge(I);%获取边缘信息
    col=cal_cor(I,E);%计算纹理特征
    wan=cal_wan(I,E);%计算形状特征
    end
    5.边缘提取
    function [O] = gray2edge( I )
    %为灰度图像提取边缘信息
    %I为灰度图像
    I=imbinarize(I,graythresh(I));%图像分割
    SE=strel('octagon',9); % 结构定义
    J2=imopen(I,SE);  % 开启运算
    %figure,imshow(J2),title('对二值图像进行开运算后的结果图像');
    J=imerode(~J2,SE);
    O=(~J2)-J;% 检测边缘
    %figure,imshow(O),title('3*3腐蚀运算后的图像边界轮廓');
    end

    收缩