精华内容
下载资源
问答
  • 2021-10-03 13:56:53

    基于多分类支持向量机和KNN分类器的大豆叶片病害检测与严重程度测量

    ABSTRACT

    大豆真菌病如枯萎病、褐斑病和褐斑病由于症状严重和缺乏治疗,是严重威胁大豆植株的疾病。传统的疾病诊断依赖于病机肉眼观察的疾病症状识别,存在较高的误认率。本文提出了一种新的系统,利用多类支持向量机和KNN分类器,对大豆病害叶片样本的彩色图像进行检测和分类。利用数码相机采集了枯萎病、褐斑病和褐斑病的健康叶片和患病叶片的图像。利用图像增强技术对获取的图像进行预处理。采用阈值法去除图像背景,得到感兴趣区域(ROI)。将基于增量k均值聚类的颜色分割技术应用于感兴趣区域,对病变区域进行分割。疾病严重程度的估计是通过定量数量的像素病变区域和全叶区域。利用RGB颜色空间提取分割后病变叶区域的不同颜色特征,利用灰度共生矩阵(GLCM)提取纹理特征,组成特征数据库。最后,利用支持向量机(SVM)和k -最近邻Negbiour (KNN)分类器对疾病进行分类。该分类系统能够对疫病、褐斑病、蛙眼叶斑病和健康样本进行分类,准确率分别为87.3%和83.6%。

    1. INTRODUCTION

    大豆是世界上最古老的作物之一。今天,大豆是人类消费的最大油脂来源,也是牲畜饲料的最大蛋白质来源。据报道,大豆帮助改善了印度大量小农和边缘农民的社会和经济条件。主要的大豆种植邦是中央邦、马哈拉施特拉邦、拉贾斯坦邦、卡纳塔克邦、安得拉邦和查蒂斯加尔邦。这些州加起来占全国大豆总产量的98%【1】。近几十年来由于一些因素如自然灾害、水土流失等,导致农作物病害的发生。这些疾病可导致农业产量的质量和数量显著下降。其后果是造成生产和经济损失。大多数时候,农民在鉴别和控制植物病害方面遇到了很大的困难。因此,在病害发生的早期或较早阶段对病害进行诊断,以便农民采取适当的防治措施,

    更多相关内容
  • 编写了 Matlab 代码以将叶子分类为以下类型之一:'Alternaria Alternata'、'Anthracnose'、'Bacterial Blight'、'Cercospora Leaf Spot' 和 'Healthy Leaves'。 分类由 Multiclass SVM 完成(一对一) 怎么跑?? 1....
  • 对每幅植物叶片图像的颜色,HSV,纹理和方向梯度直方图四种特征采用基于特征包的多特征融合方法,形成特征向量,并利用SVM分类器进行训练分类.对单特征与融合特征的SVM分类器性能进行试验比较,所提出的方法具有较高的...

    1 简介

    针对农业领域植物病虫害检测问题,提出一种基于高清视频图像融合特征的支持向量机( SVM)的检测方法,实现农业生产中植物病虫害的快速检测.对每幅植物叶片图像的颜色,HSV,纹理和方向梯度直方图四种特征采用基于特征包的多特征融合方法,形成特征向量,并利用SVM分类器进行训练分类.对单特征与融合特征的SVM分类器性能进行试验比较,所提出的方法具有较高的准确率.

    植物病害是指植物在生物或非生物因素的影响下,发生的形态、生理和生化上的病理变化,会阻碍植物正常生长、发育和结果的进程。其中,植物叶部病害非常广泛且后果相当严重。植物叶片病害影响叶片的光合作用效能,成为作物高产的主要障碍,影响作物的效益。及时发现和有效预防植物叶部病害成为农业发展中的重要问题。目前,对叶片病害与否的判断及病害种类的判断主要依靠人工,识别率和效率较低且造成种植者滥用农药。对病害的自动化识别是现代化农业发展的方向。随着科技的不断进步,数字图像处理、人工智能等技术得到综合运用。通过对基于图像处理的植物叶部病害进行检测与分类,合理施用农药可保证作物的健康生长,进而提高作物的产量。​

    2 部分代码

    function [itrfin] = multisvm( T,C,test )
    %Inputs: T=Training Matrix, C=Group, test=Testing matrix
    %Outputs: itrfin=Resultant class
    
    itrind=size(test,1);
    itrfin=[];
    Cb=C;
    Tb=T;
    for tempind=1:itrind
       tst=test(tempind,:);
       C=Cb;
       T=Tb;
       u=unique(C);
       N=length(u);
       c4=[];
       c3=[];
       j=1;
       k=1;
       if(N>2)
           itr=1;
           classes=0;
           cond=max(C)-min(C);
           while((classes~=1)&&(itr<=length(u))&& size(C,2)>1 && cond>0)
           %This while loop is the multiclass SVM Trick
               c1=(C==u(itr));
               newClass=c1;
               %svmStruct = svmtrain(T,newClass,'kernel_function','rbf'); % I am using rbf kernel function, you must change it also
               svmStruct = svmtrain(T,newClass);
               classes = svmclassify(svmStruct,tst);
           
               % This is the loop for Reduction of Training Set
               for i=1:size(newClass,2)
                   if newClass(1,i)==0;
                       c3(k,:)=T(i,:);
                       k=k+1;
                   end
               end
           T=c3;
           c3=[];
           k=1;
           
               % This is the loop for reduction of group
               for i=1:size(newClass,2)
                   if newClass(1,i)==0;
                       c4(1,j)=C(1,i);
                       j=j+1;
                   end
               end
           C=c4;
           c4=[];
           j=1;
           
           cond=max(C)-min(C); % Condition for avoiding group 
                               %to contain similar type of values 
                               %and the reduce them to process
           
               % This condition can select the particular value of iteration
               % base on classes
               if classes~=1
                   itr=itr+1;
               end    
           end
       end
    
    valt=Cb==u(itr);% This logic is used to allow classification
    val=Cb(valt==1);% of multiple rows testing matrix
    val=unique(val);
    itrfin(tempind,:)=val;  
    end
    
    end
    
    % Give more suggestions for improving the program.

    3 仿真结果

    4 参考文献

    [1]蒋龙泉, 鲁帅, 冯瑞,等. 基于多特征融合和 SVM 分类器的植物病虫害检测方法[J]. 计算机应用与软件, 2014, 31(12):5.

    部分理论引用网络文献,若有侵权联系博主删除。

    5 MATLAB代码与数据下载地址

    见博客主页

    展开全文
  • 对每幅植物叶片图像的颜色,HSV,纹理和方向梯度直方图四种特征采用基于特征包的多特征融合方法,形成特征向量,并利用SVM分类器进行训练分类.对单特征与融合特征的SVM分类器性能进行试验比较,所提出的方法具有较高的...

    1 简介

    针对农业领域植物病虫害检测问题,提出一种基于高清视频图像融合特征的支持向量机( SVM)的检测方法,实现农业生产中植物病虫害的快速检测.对每幅植物叶片图像的颜色,HSV,纹理和方向梯度直方图四种特征采用基于特征包的多特征融合方法,形成特征向量,并利用SVM分类器进行训练分类.对单特征与融合特征的SVM分类器性能进行试验比较,所提出的方法具有较高的准确率.

    植物病害是指植物在生物或非生物因素的影响下,发生的形态、生理和生化上的病理变化,会阻碍植物正常生长、发育和结果的进程。其中,植物叶部病害非常广泛且后果相当严重。植物叶片病害影响叶片的光合作用效能,成为作物高产的主要障碍,影响作物的效益。及时发现和有效预防植物叶部病害成为农业发展中的重要问题。目前,对叶片病害与否的判断及病害种类的判断主要依靠人工,识别率和效率较低且造成种植者滥用农药。对病害的自动化识别是现代化农业发展的方向。随着科技的不断进步,数字图像处理、人工智能等技术得到综合运用。通过对基于图像处理的植物叶部病害进行检测与分类,合理施用农药可保证作物的健康生长,进而提高作物的产量。

    2 部分代码

    clear allclcdisp('正在训练农作物叶子图像模板,请稍后...');disp(' ');%color_Ip = xunlian();pause(2);load C:\Users\lenovo\Desktop\图像检索\color_Ip.mat;disp('图像训练完成,正在进行图像识别,请稍后...');disp(' ');pause(2);path = input('请输入待识别叶子图像路径:'); % 'F:\病虫害识别\图像检索\示例2中等.jpg'A = imread(path); % 读入叶子图像G0 = lianghua_hsv(A); % 量化hsv分量并获得颜色直方图color_Iq = color_feature(G0); % 提取颜色特征color_Dpq = color_match(color_Ip,color_Iq); % 颜色特征匹配[r c] = find(min(min(color_Dpq))==color_Dpq);switch r    case 1        disp('该叶子属于轻微灾害');    case 2        disp('该叶子属于严重灾害');    case 3        disp('该叶子属于正常情况');    case 4        disp('该叶子属于中等灾害');end

    3 仿真结果

    4 参考文献

    [1]蒋龙泉, 鲁帅, 冯瑞,等. 基于多特征融合和 SVM 分类器的植物病虫害检测方法[J]. 计算机应用与软件, 2014, 31(12):5.​

    博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

    部分理论引用网络文献,若有侵权联系博主删除。

    展开全文
  • 学习SVM(一) SVM模型训练与分类的OpenCV实现 学习SVM(二) 如何理解支持向量机的最大分类间隔 学习SVM(三)理解SVM中的对偶问题 学习SVM(四) 理解SVM中的支持向量(Support Vector) 学习SVM(五)理解...

    学习SVM(一) SVM模型训练与分类的OpenCV实现 
    学习SVM(二) 如何理解支持向量机的最大分类间隔 
    学习SVM(三)理解SVM中的对偶问题 
    学习SVM(四) 理解SVM中的支持向量(Support Vector) 
    学习SVM(五)理解线性SVM的松弛因子

    Andrew Ng 在斯坦福大学的机器学习公开课上这样评价支持向量机: 
    support vector machines is the supervised learning algorithm that many people consider the most effective off-the-shelf supervised learning algorithm.That point of view is debatable,but there are many people that hold that point of view.

    可见,在监督学习算法中支持向量机有着非常广泛的应用,而且在解决图像分类问题时有着优异的效果。

    Opencv集成了这种学习算法,它被包含在ml模块下的CvSVM类中,下面我们用Opencv实现SVM的模型训练加载模型实现分类,为了理解起来更加直观,我们将这两个部分用两个工程来实现。

    模型训练

    #include <stdio.h>  
    #include <time.h>  
    #include <opencv2/opencv.hpp>  
    #include <opencv/cv.h>  
    #include <iostream> 
    #include <opencv2/core/core.hpp>  
    #include <opencv2/highgui/highgui.hpp>  
    #include <opencv2/ml/ml.hpp>  
    #include <io.h>
    
    using namespace std;
    using namespace cv;
    
    void getFiles( string path, vector<string>& files);
    void getBubble(Mat& trainingImages, vector<int>& trainingLabels);
    void getNoBubble(Mat& trainingImages, vector<int>& trainingLabels);
    
    int main()
    {
        //获取训练数据
        Mat classes;
        Mat trainingData;
        Mat trainingImages;
        vector<int> trainingLabels;
        getBubble(trainingImages, trainingLabels);
        getNoBubble(trainingImages, trainingLabels);
        Mat(trainingImages).copyTo(trainingData);
        trainingData.convertTo(trainingData, CV_32FC1);
        Mat(trainingLabels).copyTo(classes);
        //配置SVM训练器参数
        CvSVMParams SVM_params;
        SVM_params.svm_type = CvSVM::C_SVC;
        SVM_params.kernel_type = CvSVM::LINEAR; 
        SVM_params.degree = 0;
        SVM_params.gamma = 1;
        SVM_params.coef0 = 0;
        SVM_params.C = 1;
        SVM_params.nu = 0;
        SVM_params.p = 0;
        SVM_params.term_crit = cvTermCriteria(CV_TERMCRIT_ITER, 1000, 0.01);
         //训练
        CvSVM svm;
        svm.train(trainingData, classes, Mat(), Mat(), SVM_params);
         //保存模型
        svm.save("svm.xml");
        cout<<"训练好了!!!"<<endl;
        getchar();
        return 0;
    }
    void getFiles( string path, vector<string>& files )  
    {  
        long   hFile   =   0;  
        struct _finddata_t fileinfo;  
        string p;  
        if((hFile = _findfirst(p.assign(path).append("\\*").c_str(),&fileinfo)) !=  -1)  
        {  
            do  
            {  
                if((fileinfo.attrib &  _A_SUBDIR))  
                {  
                    if(strcmp(fileinfo.name,".") != 0  &&  strcmp(fileinfo.name,"..") != 0)  
                        getFiles( p.assign(path).append("\\").append(fileinfo.name), files );  
                }  
                else  
                {  
                    files.push_back(p.assign(path).append("\\").append(fileinfo.name) );  
                }  
            }while(_findnext(hFile, &fileinfo)  == 0);  
    
            _findclose(hFile);  
        }  
    } 
    void getBubble(Mat& trainingImages, vector<int>& trainingLabels)
    {
         char * filePath = "D:\\train\\has\\train"; 
         vector<string> files;  
         getFiles(filePath, files );  
         int number = files.size();  
         for (int i = 0;i < number;i++)  
         {  
            Mat  SrcImage=imread(files[i].c_str());
            SrcImage= SrcImage.reshape(1, 1);
            trainingImages.push_back(SrcImage);
            trainingLabels.push_back(1);
         }  
    }
    void getNoBubble(Mat& trainingImages, vector<int>& trainingLabels)
    {
        char * filePath = "D:\\train\\no\\train"; 
        vector<string> files;  
        getFiles(filePath, files );  
        int number = files.size();  
        for (int i = 0;i < number;i++)  
        {  
            Mat  SrcImage=imread(files[i].c_str());
            SrcImage= SrcImage.reshape(1, 1);
            trainingImages.push_back(SrcImage);
            trainingLabels.push_back(0);
        }  
    }

    整个训练过程可以分为一下几个部分: 
    数据准备: 
    该例程中一个定义了三个子程序用来实现数据准备工作: 
    getFiles()用来遍历文件夹下所有文件,可以参考: 
    http://blog.csdn.net/chaipp0607/article/details/53914954 
    getBubble()用来获取有气泡的图片和与其对应的Labels,该例程将Labels定为1。 
    getNoBubble()用来获取没有气泡的图片与其对应的Labels,该例程将Labels定为0。 
    getBubble()与getNoBubble()将获取一张图片后会将图片(特征)写入到容器中,紧接着会将标签写入另一个容器中,这样就保证了特征和标签是一一对应的关系push_back(0)或者push_back(1)其实就是我们贴标签的过程。

    trainingImages.push_back(SrcImage);
    trainingLabels.push_back(0);

    在主函数中,将getBubble()与getNoBubble()写好的包含特征的矩阵拷贝给trainingData,将包含标签的vector容器进行类型转换后拷贝到trainingLabels里,至此,数据准备工作完成,trainingData与trainingLabels就是我们要训练的数据。

        Mat classes;
        Mat trainingData;
        Mat trainingImages;
        vector<int> trainingLabels;
        getBubble(trainingImages, trainingLabels);
        getNoBubble(trainingImages, trainingLabels);
        Mat(trainingImages).copyTo(trainingData);
        trainingData.convertTo(trainingData, CV_32FC1);
        Mat(trainingLabels).copyTo(classes);

    特征选取 
    其实特征提取和数据的准备是同步完成的,我们最后要训练的也是正负样本的特征。本例程中同样在getBubble()与getNoBubble()函数中完成特征提取工作,只是我们简单粗暴将整个图的所有像素作为了特征,因为我们关注更多的是整个的训练过程,所以选择了最简单的方式完成特征提取工作,除此中外,特征提取的方式有很多,比如LBP,HOG等等。

      SrcImage= SrcImage.reshape(1, 1);

    我们利用reshape()函数完成特征提取,原型如下:

     Mat reshape(int cn, int rows=0) const;

    可以看到该函数的参数非常简单,cn为新的通道数,如果cn = 0,表示通道数不会改变。参数rows为新的行数,如果rows = 0,表示行数不会改变。我们将参数定义为reshape(1, 1)的结果就是原图像对应的矩阵将被拉伸成一个一行的向量,作为特征向量。 
    参数配置 
    参数配置是SVM的核心部分,在Opencv中它被定义成一个结构体类型,如下:

    struct CV_EXPORTS_W_MAP CvSVMParams
    {
        CvSVMParams();
        CvSVMParams(  
        int svm_type, 
        int kernel_type,
        double degree, 
        double coef0,
        double Cvalue, 
        double p,
        CvMat* class_weights, 
        CvTermCriteria term_crit );
        CV_PROP_RW int         svm_type;
        CV_PROP_RW int         kernel_type;
        CV_PROP_RW double      degree; // for poly
        CV_PROP_RW double      gamma;  // for poly/rbf/sigmoid
        CV_PROP_RW double      coef0;  // for poly/sigmoid
        CV_PROP_RW double      C;  // for CV_SVM_C_SVC,       CV_SVM_EPS_SVR and CV_SVM_NU_SVR
        CV_PROP_RW double      nu; // for CV_SVM_NU_SVC, CV_SVM_ONE_CLASS, and CV_SVM_NU_SVR
        CV_PROP_RW double      p; // for CV_SVM_EPS_SVR
        CvMat*      class_weights; // for CV_SVM_C_SVC
        CV_PROP_RW CvTermCriteria term_crit; // termination criteria
    };

    所以在例程中我们定义了一个结构体变量用来配置这些参数,而这个变量也就是CVSVM类中train函数的第五个参数,下面对参数进行说明。 
    SVM_params.svm_type :SVM的类型: 
    C_SVC表示SVM分类器,C_SVR表示SVM回归 
    SVM_params.kernel_type:核函数类型 
    线性核LINEAR
    d(x,y)=(x,y) 
    多项式核POLY
    d(x,y)=(gamma*(x’y)+coef0)degree 
    径向基核RBF
    d(x,y)=exp(-gamma*|x-y|^2) 
    sigmoid核SIGMOID
    d(x,y)= tanh(gamma*(x’y)+ coef0)

    SVM_params.degree:核函数中的参数degree,针对多项式核函数; 
    SVM_params.gama:核函数中的参数gamma,针对多项式/RBF/SIGMOID核函数; 
    SVM_params.coef0:核函数中的参数,针对多项式/SIGMOID核函数; 
    SVM_params.c:SVM最优问题参数,设置C-SVCEPS_SVRNU_SVR的参数; 
    SVM_params.nu:SVM最优问题参数,设置NU_SVC, ONE_CLASS 和NU_SVR的参数; 
    SVM_params.p:SVM最优问题参数,设置EPS_SVR 中损失函数p的值. 
    训练模型

    CvSVM svm;
    svm.train(trainingData, classes, Mat(), Mat(), SVM_params);

    通过上面的过程,我们准备好了待训练的数据和训练需要的参数,其实可以理解为这个准备工作就是在为svm.train()函数准备实参的过程。来看一下svm.train()函数,Opencv将SVM封装成CvSVM库,这个库是基于台湾大学林智仁(Lin Chih-Jen)教授等人开发的LIBSVM封装的,由于篇幅限制,不再全部粘贴库的定义,所以一下代码只是CvSVM库中的一部分数据和函数:

    class CV_EXPORTS_W CvSVM : public CvStatModel
    {
    public:
    virtual bool train( 
      const CvMat* trainData, 
      const CvMat* responses,
      const CvMat* varIdx=0, 
      const CvMat* sampleIdx=0,
      CvSVMParams params=CvSVMParams() );
    virtual float predict( 
      const CvMat* sample, 
      bool returnDFVal=false ) const;

    我们就是应用类中定义的train函数完成模型训练工作。 
    保存模型

    svm.save("svm.xml");

    保存模型只有一行代码,利用save()函数,我们看下它的定义:

        CV_WRAP virtual void save( const char* filename, const char* name=0 ) const;

    该函数被定义在CvStatModel类中,CvStatModel是ML库中的统计模型基类,其他 ML 类都是从这个类中继承。

    总结:到这里我们就完成了模型训练工作,可以看到真正用于训练的代码其实很少,OpenCV最支持向量机的封装极大地降低了我们的编程工作。

    加载模型实现分类

    #include <stdio.h>  
    #include <time.h>  
    #include <opencv2/opencv.hpp>  
    #include <opencv/cv.h>  
    #include <iostream> 
    #include <opencv2/core/core.hpp>  
    #include <opencv2/highgui/highgui.hpp>  
    #include <opencv2/ml/ml.hpp>  
    #include <io.h>
    
    using namespace std;
    using namespace cv;
    
    void getFiles( string path, vector<string>& files );
    
    int main()
    {
        int result = 0;
        char * filePath = "D:\\train\\has\\test"; 
        vector<string> files;  
        getFiles(filePath, files );  
        int number = files.size();  
        cout<<number<<endl;
        CvSVM svm;
        svm.clear();
        string modelpath = "svm.xml";
        FileStorage svm_fs(modelpath,FileStorage::READ);
        if(svm_fs.isOpened())
        {
            svm.load(modelpath.c_str());
        }
        for (int i = 0;i < number;i++)  
        {  
            Mat inMat = imread(files[i].c_str());
            Mat p = inMat.reshape(1, 1);
            p.convertTo(p, CV_32FC1);
            int response = (int)svm.predict(p);
            if (response == 1)
             {
                 result++;
             }
        }
        cout<<result<<endl;
        getchar();
        return  0;
    }
    void getFiles( string path, vector<string>& files )  
    {  
        long   hFile   =   0;  
        struct _finddata_t fileinfo;  
        string p;  
        if((hFile = _findfirst(p.assign(path).append("\\*").c_str(),&fileinfo)) !=  -1)  
        {  
            do  
            {  
                if((fileinfo.attrib &  _A_SUBDIR))  
                {  
                    if(strcmp(fileinfo.name,".") != 0  &&  strcmp(fileinfo.name,"..") != 0)  
                        getFiles( p.assign(path).append("\\").append(fileinfo.name), files );  
                }  
                else  
                {       files.push_back(p.assign(path).append("\\").append(fileinfo.name) );  
                }  
            }while(_findnext(hFile, &fileinfo)  == 0);  
            _findclose(hFile);  
        }  
    } 

    在上面我们把该介绍的都说的差不多了,这个例程中只是用到了load()函数用于模型加载,加载的就是上面例子中生成的模型,load()被定义在CvStatModel这个基类中,然后用到predict()函数用来预测分类结果,predict()被定义在CVSVM类中。

    结果: 
    测试了517张正样本,1815张负样本,但是只成功预测了216和1481。这个准确率很差,因为我们并没有针对样本做合适的特征提取工作。

    展开全文
  • 代码叶片分为以下类型之一:“交链孢属”、“炭疽病”、“细菌性枯萎病”、“蜡孢菌叶斑病”和“健康叶片”。 A Matlab code is written to classify the leaves into one of the following types: ‘Alternaria...
  • 花卉图像识别与分类

    2018-10-13 10:58:26
    别准确率具有重要意义,此外,所设计的分级SVM分类器有效降低了分类器对样本 种类数量的敏感性,克服了SVM分类器对大样本量识别准确率低的问题。本文构建 了基于数字图像的花卉种类识别系统,并用五十种花卉对系统...
  • (1)找了官方的实例代码,因为本人代码阅读能力有限,因此将代码部分下载下来,边查边记就看懂了,再敲一遍(opencv2.x和opencv3.x有些用法不太一样要自己改一改) 链接 1 支持向量机线性可分...
  • 【Matlab疾病识别】SVM农作物叶子虫害识别与分类【含GUI源码 1322期】 二、matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020. [2]...
  • # 结合成一个图像 equ_img = cv2.merge((b,g,r)) return equ_img 均衡化后的图片如下图所示: (二)提取图片中叶子(绿色)的部分   题目是识别植物幼苗,用于分类的特征一定是取自叶子部分的,也就是绿色的部分...
  • 基于Open CV的植物图像分类识别项目

    千次阅读 2020-05-27 22:39:45
    本项目主要是基于Open CV进行植物图像进行分类识别。展示部分采用了网页的形式(Vue+Element+.net Core),由用户上传图片,服务器返回该图片的分类结果。Web服务(.net Core)和c++图像处理模块的交互采用了TCP的...
  • 机器学习树叶分类与聚类

    千次阅读 2019-06-02 22:47:59
    机器学习树叶分类与聚类 目录1导入包2查看数据3读取训练集和测试集3.1画出相关性矩阵(需要根据相关性矩阵,选择特征进行特征工程)3.2数据标准化4讨论是否需要PCA4.1没有经过PCA降维的KNN4.2经过PCA降维过的KNN4.3...
  • 系统运行流程: 通 过 iPhone 拍照获取植物叶片图像, 转化为灰度图后, 运用 OTSU 法分割出叶片区域, 再提取叶片的颜色、 形状、 纹理等 10 种特征, 运用支持向量机(SVM)分类器识别叶片并在 iPhone 上展示相应...
  • 【实例简介】【实例截图】【核心代码】#import numpy as npimport pandas as pdimport seaborn as snsimport matplotlib.pyplot as pltfrom sklearn.metrics import accuracy_score,log_lossfrom sklearn.neighbors ...
  • 对每幅植物叶片图像的颜色,HSV,纹理和方向梯度直方图四种特征采用基于特征包的多特征融合方法,形成特征向量,并利用SVM分类器进行训练分类.对单特征与融合特征的SVM分类器性能进行试验比较,所提出的方法具有较高的...
  • 下面是该类的一些题目: 题目 基于三维卷积神经网络的...基于堆栈稀疏自编码网络的空谱联合高光谱图像分类 基于多元局部信息增强的复杂图像分类与目标检测 基于多尺度空谱融合网络的高光谱图像分类 基于
  • 基于PCA和SVM的人脸识别

    万次阅读 2017-01-07 20:39:51
    svm推广到多类情况一对多的最大响应策略(one against all) 假设有A 、B、C.. D四类样本需要划分。在抽取训练集的时候,分别按照如下4种方式划分。 A. 所对应的样本特征向量作为正集(类标签为+1), B、C、D所对应的...
  • 及时、准确地诊断植物病害,对于防止农业生产的损失和农产品的损失或减少具有重要作用。为了解决这类问题,可以使用基于机器学习的方法。近年来,在图像处理中应用尤其广泛的深度学习为精准农业提供了许多新的应用。...
  • 鸢尾花是鸢尾属植物,是对一族草本开花植物的统称,是法国国花,香气淡雅,可以调制香水。“鸢尾”之名来源于希腊语,意思是彩虹。它表明天上彩虹的颜色尽可在这个属的花朵颜色中看到。鸢尾花常用以象征爱情和友谊,...
  • 通过提取植物图像的有效特征能很好的地来识别分类植物幼苗。本论文主要研究基于MATLAB的计算机图像处理技术来识别植物幼苗,过程中使用到了MATLAB的图像处理工具箱,以12种植物不同生长阶段的不同图像为研究目标,...
  • 在这项研究中,我们描述了联合多模式特征袋(JMBoF)分类框架的低等级表示,用于检查收获后干燥大豆种子的外观质量。提取了两类加速的鲁棒特征和L * a * b *颜色特征的空间布局,以表征干大豆种子仁。特征包模型分别...
  • 本文介绍了柑橘部病害的详细分类。首先,详细讨论了影响检测和分类精度的每个步骤的挑战。此外,还对自动化疾病检测和分类方法进行了全面的文献综述。为此,研究了不同的图像预处理、分割、特征提取、特征选择和...
  • 数据挖掘十大算法中的C4.5 和 CART(分类和回归树)算法都是决策树算法。其他常用的决策树算法有C5.0、Fuzzy C4.5、SLIQ(Mehta 1996)、SPRINT(Shafer 1996)等。 1 决策树算法 · 决策树是一种由节点和有向边...
  • Deep Learning and SVM Classification for Plant Recognition in Content-Based Large Scale Image Retrieval 论⽂周报 Bálint Pál Tóth, Márton Osváth, Dá...(⼀种将CNN与SVM组合起来对植物识别的⽅法)...
  • 植物病虫害识别方法主要研究思路

    千次阅读 2020-07-24 18:54:56
    基于叶片图像的植物病害识别方法一直是植物保护、图像处理、计算机视觉和模式识别等众多领域的重要的研究方向。也出现了非常多的植物病害识别方法。 准确提取叶片的形状特征、纹理及其他信息,来代替或者辅助人类...
  • 四、BOW(bag of words) + K-means五、HOG + SVM六、LBP(Local Binary Pattern局部二值模式)七、Haar-like 特征八、其他特征九、训练模型效果评价十、特征降维十一、集成学习十二、其它函数 一、数据预处理 (一)...
  • 朴素贝叶斯 朴素贝叶斯算法是基于 贝叶斯原理 ...的输出y,朴素贝叶斯法实现简单,学习与预测的效率都很高,是一种常见的方法。 朴素贝叶斯(naive Bayes)算法是有监督的学习算法,解决的是分类问题,如客户是否流...
  • 从陕西杨凌农业高新技术产业示范区的黄瓜种植基地,收集了6种常见黄瓜叶病和100种正常叶的600个黄瓜病叶,每种疾病有100个叶片图像,在几种不同的条件下具有典型的疾病症状。 数据增强 有效的CNN模型依赖于大规模...

空空如也

空空如也

1 2 3 4 5 6
收藏数 114
精华内容 45
关键字:

svm分类器实现植物叶片分类代码