资源简介

植物分类是植物科学研究领域和农林业生产经营中重要的基础性工作,植物分类 学是一项具有长远意义的基础性研究,其主要的分类依据是植物的外观特征,包括叶、 花、枝干、树皮、果实等。因此,花卉分类是植物分类学的重要部分,利用计算机进 行花卉自动种类识别具有重要意义。 本文从常见的观赏花卉入手,探索了基于花朵数字图像对花卉进行种类识别的方 法。在己有研究的基础上,针对花朵的生长特点定义了颜色、纹理、形状等方面的特 征,并使用分级SVM分类器对花卉图像进行了识别。论文提出了分区域特征提取以 及极坐标系下的灰度共生矩阵适于描述放射状生长的花朵纹理特征,对提高系统的识 别准确率具有重要意义,此外,所设计的分级SVM分类器有效降低了分类器对样本 种类数量的敏感性,克服了SVM分类器对大样本量识别准确率低的问题。本文构建 了基于数字图像的花卉种类识别系统,并用五十种花卉对系统进行了测试,达到了 95.72%的识别准确率。实验结果表明,本文所实现的花卉种类识别系统具有较高的识 别准确率和稳定性。

资源截图

代码片段和文件信息

function varargout = flower(varargin)
gui_Singleton = 1;
gui_State = struct(‘gui_Name‘       mfilename ...
                   ‘gui_Singleton‘  gui_Singleton ...
                   ‘gui_OpeningFcn‘ @flower_OpeningFcn ...
                   ‘gui_OutputFcn‘  @flower_OutputFcn ...
                   ‘gui_LayoutFcn‘  []  ...
                   ‘gui_Callback‘   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State varargin{:});
else
    gui_mainfcn(gui_State varargin{:});
end



function flower_OpeningFcn(hobject eventdata handles varargin)
handles.output = hobject;
guidata(hobject handles);


function varargout = flower_OutputFcn(hobject eventdata handles) 
varargout{1} = handles.output;


function pushbutton1_Callback(hobject eventdata handles)
[filenamepathname]=uigetfile({‘*.jpg‘;...
    ‘*.gif‘;‘*.*‘}...
    ‘Pick an Image File‘);
X=imread([pathnamefilename]);
cla(handles.axes1);
axes(handles.axes1);
imshow(X);%在h0上显示原始图像



function edit1_CreateFcn(hobject eventdata handles)
if ispc && isequal(get(hobject‘BackgroundColor‘) get(0‘defaultUicontrolBackgroundColor‘))
    set(hobject‘BackgroundColor‘‘white‘);
end



function pushbutton2_Callback(hobject eventdata handles)


Files = dir(fullfile(‘C:\Users\lenove\Desktop\项目\项目10365+花卉图像识别与分类\程序\flower分类\train‘‘*.jpg‘));
LengthFiles = length(Files);%文件夹图片个数
height=50;width=50;%特征向量大小,可以调整
w1 = zeros(height*widthLengthFiles/3);%第一类训练矩阵
w2 =  zeros(height*widthLengthFiles/3);%第二类训练矩阵
w3 =  zeros(height*widthLengthFiles/3);%第三类训练矩阵
T=20.78345;
%第一类图像
for i = 1:LengthFiles/3
   img = imread(strcat(‘C:\Users\lenove\Desktop\项目\项目10365+花卉图像识别与分类\程序\flower分类\train\‘Files(i).name));%读取图像
    img1 = rgb2gray(img);%转换成灰度图
    if i>=1 && i<=5
%     figure;imshow(img1);
    end
    [mn] = size(img1);
    m1 = round(m/2);n1=round(n/2);
    img11 = img1(m1-199:m1+200n1-199:n1+200);%截取中间图像

    img2 = imresize(img11[heightwidth]);%调整大小
    w1(:i) = double(img2(:)); %得到训练向量
end
%第二类图像
for i = LengthFiles/3+1:2*LengthFiles/3
    img =imread(strcat(‘C:\Users\lenove\Desktop\项目\项目10365+花卉图像识别与分类\程序\flower分类\train\‘Files(i).name));
    img1 = rgb2gray(img);
    if i>=1 && i<=5
%     figure;imshow(img1);
    end
    [mn] = size(img1);
    m1 = round(m/2);n1=round(n/2);
    img11 = img1(m1-199:m1+200n1-199:n1+200);
    img2 = imresize(img11[heightwidth]);
    w2(:i-LengthFiles/3) = double(img2(:)); 
end
%第三类图像
for i =2*LengthFiles/3+1:LengthFiles
    img = imread(strcat(‘C:\Users\lenove\Desktop\项目\项目10365+花卉图像识别与分类\程序\flower分类\train\‘Files(i).name));
    img1 = rgb2gray(img);
    if i>=1 && i<=5
%     figure;imshow(img1);
    end
    [mn] = size(img1);
    m1 = round(m/2);n1=round(n/2);
    img11 = img1(m1-199:m1+200n1-199:n1+200);
    img2 = imresize(img11[heightwidth]);
    w3(:i-2*LengthFiles/3) = double(img2(:)); 
end

%计算样本均值
m1=mean(w1‘)‘;
m2=mean(w2‘)‘;
m3 = mean(w3‘

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-10-10 15:39  源码\
     文件        5267  2017-03-25 11:31  源码\flower.fig
     文件        5846  2017-03-25 11:32  源码\flower.m
     文件        4236  2017-03-09 20:52  源码\mySVM.m
     文件       12124  2017-03-23 20:17  源码\说明文档.docx
     目录           0  2018-10-10 15:39  演示\
     文件     6993179  2017-03-09 21:02  演示\10365.wmv
     文件          64  2018-10-10 16:34  说明.txt
     目录           0  2018-10-10 15:38  需求\
     文件       11858  2017-02-26 14:05  需求\任务书.docx

评论

共有 条评论