欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于Matlab LBP實現(xiàn)植物葉片識別功能

 更新時間:2022年02月10日 14:53:38   作者:紫極神光  
局部二值模式(LBP)是由Ojala等人于2002年提出,它被用于特征提取,而且提取的特征是圖像的紋理特征。本文將利用Matlab和LBP實現(xiàn)植物葉片識別,需要的可以參考一下

一、LBP簡介

第一章 引言

植物在我們的身邊隨處可見,它們從產(chǎn)生發(fā)展進化到現(xiàn)在,其間經(jīng)歷了漫長的歲月。地球上的植物種類繁多、數(shù)量浩瀚,它們是生物圈的重要組成部分,在維持整個生物界的平衡方面發(fā)揮著巨大的作用;它們同時也是構(gòu)成人類生存環(huán)境的重要組成部分,是人類社會延續(xù)和發(fā)展不可或缺的重要因素。由于植物對于地球和人類都具有如此重要的意義,對它們的研究就顯得尤為重要,但不同種類的植物在形態(tài)構(gòu)造、生活習(xí)性、經(jīng)濟價值等各方面都表現(xiàn)出不同的特性,為了能更好、更有效地研究和利用各種植物,人們對植物進行了識別和分類,從而產(chǎn)生了植物分類學(xué)。在計算機科學(xué)與技術(shù)廣泛滲透于的大環(huán)境中,如何將計算機的各種相關(guān)技術(shù)應(yīng)用于該領(lǐng)域也就成為研究工作中一項非常重要的內(nèi)容。

1.1 課題的提出與研究意義

自然界的植物是世界上物種數(shù)量最多并且分布最廣泛的的生命形式,與人類以及環(huán)境的關(guān)系最為密切。而即使是最專業(yè)的科學(xué)家也不可能記住所有植物的種類。所以由于人類生產(chǎn)活動造成了植物物種的滅絕的實例也數(shù)不勝數(shù)。而植物在維持生物平衡、水土保持等方面又起著重要的作用;同時,植物農(nóng)業(yè)作為國民經(jīng)濟命脈,是人們生產(chǎn)生活的基礎(chǔ)部分,提高農(nóng)業(yè)生產(chǎn)需要植物的精細數(shù)據(jù),因此植物分類和識別具有非常重要的意義。一方面,人們能夠通過植物識別系統(tǒng)毫不費力的查詢到植物的種類以及其他相關(guān)信息,能夠更好的保護瀕危物種,幫助維持生態(tài)平衡,另一方面,通過植物葉片圖像也可以鑒別出植物是否受到病蟲害。因此我們希望建立植物葉片識別系統(tǒng)來對農(nóng)作物以及各種稀有植物進行識別。采用模式識別和圖像處理的方法,用計算機軟件來對農(nóng)作物病蟲害以及各種植物進行分析、鑒別,從而實現(xiàn)稀有物種的快速鑒別或者農(nóng)作物病蟲害的自動診斷。因此,開發(fā)一種快速、準(zhǔn)確的識別植物葉片的方法極具現(xiàn)實意義。

1.2 國內(nèi)外相關(guān)研究情況

植物的分類與識別一般選取植物的局部特征[1],例如植物的葉、花、根等特征。這些器官都有各自的分類價值,但是比起植物的其他器官,植物葉片的存活時間較長,在一年的大部分時間里都可較為方便的采集到,所以作為植物的識別特征和認知植物的主要參照器官。因此基于葉片的識別是識別一種植物最直接有效的切最簡單的方法。

Ojala[2]等人于2002年提出的局部二進制模式(LBP)[3],LBP算子定義為在33的窗口內(nèi),以窗口中心像素為閾值,將相鄰的8個像素的灰度值與其進行比較,若周圍像素值大于中心像素值,則該像素點的位置被標(biāo)記為1,否則為0。33領(lǐng)域內(nèi)的8個點可產(chǎn)生8bit的無符號數(shù),即得到該窗口的LBP值,并用這個值來反映該區(qū)域的紋理信息.該方法分析紋理的吸引人的地方在于其計算復(fù)雜度小,具有多尺度特性和旋轉(zhuǎn)不變特性,在紋理檢索領(lǐng)域[4]得到應(yīng)用。局部二值模式(LBP)是由Ojala等人于2002年提出,它被用于特征提取,而且,提取的特征是圖像的紋理特征,并且,是局部的紋理特征。

局部二值模式(LBP)提取的特征跟位置信息是緊密相關(guān)的。直接對兩幅圖片提取這種特征,并進行判別分析的話,會因為“位置沒有對準(zhǔn)”而產(chǎn)生很大的誤差。后來,研究人員發(fā)現(xiàn),可以將一幅圖片劃分為若干的子區(qū)域,對每個子區(qū)域內(nèi)的每個像素點都提取LBP特征,然后,在每個子區(qū)域內(nèi)建立LBP特征的統(tǒng)計直方圖。如此一來,每個子區(qū)域,就可以用一個統(tǒng)計直方圖來進行描述;整個圖片就由若干個統(tǒng)計直方圖組成。

原始的LBP提出后,研究人員不斷對其提出了各種改進和優(yōu)化,從而得到了諸如半徑為R的圓形區(qū)域內(nèi)含有P個采樣點的LBP算子;LBP均勻模式;LBP旋轉(zhuǎn)不變模式;LBP等價模式[5] 。

1.3 論文的主要研究工作

本文的研究工作主要包括以下幾個方面:綜述了模式識別相關(guān)技術(shù)的研究現(xiàn)狀,研究了 LBP 方法以及 LBP 算子的相關(guān)理論、研究及應(yīng)用,設(shè)計并實現(xiàn)了基于 LBP的植物葉片識別系統(tǒng),并用葉片樣本對系統(tǒng)進行了測試驗證。

本文深入研究了 LBP 方法的相關(guān)理論。LBP 方法將圖像紋理的兩種不同分類方法(即基于統(tǒng)計特征判別的分類方法和基于結(jié)構(gòu)特征判別的分類方法)有效地結(jié)合了起來,在一定程度上解決了對圖像紋理構(gòu)成的單一分類所帶來的問題。LBP 算子是提取圖像 LBP 特征的具體工具,本文詳細介紹了 LBP 算子的基本方法。
本文規(guī)劃了系統(tǒng)的體系結(jié)構(gòu),設(shè)計了系統(tǒng)的工作流程,將整個系統(tǒng)所實現(xiàn)的功能分成了樣本采集和預(yù)處理模塊、LBP 特征提取模塊和數(shù)據(jù)庫模塊等三個個功能模塊,然后對系統(tǒng)流程的各主要環(huán)節(jié)的設(shè)計與實現(xiàn)進行了詳細的介紹。

實際采集了3種不同植物的葉片圖像樣本,樣本總數(shù)將近40例。用這些樣本對系統(tǒng)進行了測試,得到了測試結(jié)果。

本文主要的工作在于應(yīng)用 LBP 方法進行植物葉片樣本紋理分析,進而設(shè)計與實現(xiàn)了基于 LBP 的植物葉片分類識別系統(tǒng)。雖然 LBP 方法的應(yīng)用領(lǐng)域涉及面很廣,但是目前在植物葉片分類識別領(lǐng)域幾乎還沒有相關(guān)的研究和應(yīng)用,有很多具體的理論研究與實踐應(yīng)用方面的工作還有待于進一步的深化。本文所設(shè)計與實現(xiàn)的基于 LBP 的植物葉片識別系統(tǒng)屬于該領(lǐng)域內(nèi)的創(chuàng)新工作。

1.4 論文結(jié)構(gòu)

本文結(jié)構(gòu)如下:

第一章 緒論

闡述課題背景,分析特征提取及LBP方法的國內(nèi)外研究現(xiàn)狀,明確課題研究的意義及目標(biāo),介紹論文的主要工作;并對論文結(jié)構(gòu)安排做了說明。

第二章 LBP方法的理論研究

對LBP特征提取的相關(guān)概念進行介紹,重點介紹LBP相關(guān)原理及基本特性,針對本研究課題,重點研究LBP特征在相關(guān)領(lǐng)域中的應(yīng)用,針對當(dāng)前的主要應(yīng)用對LBP方法進行分析,為本文研究奠定理論基礎(chǔ)。

第三章基于LBP植物葉片識別系統(tǒng)設(shè)計

主要闡述了植物葉片識別系統(tǒng)的總體設(shè)計思路,并且詳細介紹了每個系統(tǒng)模塊的設(shè)計思想。在此基礎(chǔ)之上,更加詳細的介紹了每個系統(tǒng)模塊的主要功能和實現(xiàn)方法。同時,介紹了關(guān)鍵環(huán)節(jié)的設(shè)計。

第四章實驗結(jié)果

主要展示了本次研究得到的成果,分析實驗結(jié)果,驗證了基于LBP特征提取在植物葉片識別中的可行性。

第五章總結(jié)與展望

對論文的主要研究工作和貢獻進行總結(jié),并在當(dāng)前工作的基礎(chǔ)上,結(jié)合研究中遇到的問題,為下一步研究工作提供參考。

二、部分源代碼

clc;clear;
allsamples=[];%所有訓(xùn)練圖像
M=300;N=300;
SubNum=3;
SubRow = M/SubNum;
SubCol = N/SubNum;
LbpHist=zeros(8,SubNum*SubNum*59);
for n=1:3
? ?for m=1:8
? ? ?I11=imread(strcat('.bmp'));
? ? ?[M,N]=size(I11);
? ? ?%分塊獲取LBP直方圖,共分SubNum*SubNum塊,每塊提取1*59的特征
? ? ?%所以總共特征數(shù)為1*(SubNum*SubNum*59)
? ? ?%初始化特征向量及分塊數(shù)
? ? ?h=((n-1)*8+m);
? ? ?SP=[-1 -1; -1 0; -1 1; 0 -1; -0 1; 1 -1; 1 0; 1 1];
? ? ?mapping=getmapping(8,'u2'); ??
? ? ?for i=1:SubNum
? ? ? ?for j=1:SubNum
? ? ? ? ? Img = I11(((i-1)*SubRow+1):i*SubRow, ((j-1)*SubCol+1):j*SubCol);
? ? ? ? ? LbpImg = LBP(Img,SP,0,'i');
? ? ? ? ? H11=LBP(LbpImg,1,8,mapping,'h');
? ? ? ? ? Index = (i-1)*SubNum+j; ? ? %計算第幾塊?
? ? ? ? ? LbpHist(h,((Index-1)*59+1):Index*59)=H11;
? ? ? ?end
? ? ?end
? ? ?%imshow(I11);
? ? ?%下面這行的112和92兩個數(shù)據(jù)哪里來的?干什么用?記住多用容易認的變量,比如SubNum
? ? ?b=I11(1:SubNum*SubNum*59); % b是行矢量 1×N,其中N=112*92,提取順序是先列后行,即從上到下,從左到右
? ? ?b=double(b);
? ? ?%allsamples有何作用?
? ? ?allsamples=[allsamples; b]; ?% allsamples 是一個M * N 矩陣,allsamples 中每一行數(shù)據(jù)代表一張圖片,其中M=200
? ?end
end
? [fn,pn,fi]=uigetfile('*.bmp','選擇圖片');
? I12=imread([pn fn]);
? [M1,N1]=size(I12);
? SubNum=3;
? SubRow = M1/SubNum;
? SubCol = N1/SubNum;
? LbpHist1=zeros(1,SubNum*SubNum*59);
? SP=[-1 -1; -1 0; -1 1; 0 -1; -0 1; 1 -1; 1 0; 1 1];
? mapping=getmapping(8,'u2'); ??
? ? ?for i=1:SubNum
? ? ? ?for j=1:SubNum
? ? ? ? ? Img1 = I12(((i-1)*SubRow+1):i*SubRow, ((j-1)*SubCol+1):j*SubCol);
? ? ? ? ? LbpImg1 = LBP(Img1,SP,0,'i');
? ? ? ? ? H12=LBP(LbpImg1,1,8,mapping,'h');
? ? ? ? ? Index = (i-1)*SubNum+j; ? ? %計算第幾塊?
? ? ? ? ? LbpHist1(((Index-1)*59+1):Index*59)=H12;
? ? ? ?end
? ? ?end
? ? ?juli=zeros(1,24);
? ? ?for j=1:24
? ? ? ? ?for i=1:SubNum*SubNum*59
? ? ? ? ? ? ?S=LbpHist(j,i);
? ? ? ? ? ? ?Q=LbpHist1(i);
? ? ? ? ? ? ?S1=S-Q;
? ? ? ? ? ? ?Q1=S+Q;
? ? ? ? ? ? ?f=sum(S1^2/Q1);
? ? ? ? ?end
? ? ? ? ?juli(1,j:j+1)=f;
? ? ?end
min=min(juli);
[m2,n2]=find(juli==min);
[xsort,index]=sort(juli);
n3=index(1);
class1=8;
class2=16;
class3=24;
if n3<=class1
? ? disp('這個葉片屬于class1');
else if n3>class1&&n3<=class2
? ? ? ?disp('這個葉片屬于class2');
? ? ? ?else if n3>class2&&n3<=class3
? ? ? ? ? ? ? ?disp('這個葉片屬于class3');
? ? ? ? ? ?else
? ? ? ? ? ? ? ?disp('沒有類別');
? ? ? ? ? ?end
? ? end
end
% GETMAPPING returns a structure containing a mapping table for LBP codes.
% ?MAPPING = GETMAPPING(SAMPLES,MAPPINGTYPE) returns a
% ?structure containing a mapping table for
% ?LBP codes in a neighbourhood of SAMPLES sampling
% ?points. Possible values for MAPPINGTYPE are
% ? ? ? 'u2' ? for uniform LBP
% ? ? ? 'ri' ? for rotation-invariant LBP
% ? ? ? 'riu2' for uniform rotation-invariant LBP.
%
% ?Example:
% ? ? ? I=imread('rice.tif');
% ? ? ? MAPPING=getmapping(16,'riu2');
% ? ? ? LBPHIST=lbp(I,2,16,MAPPING,'hist');
% ?Now LBPHIST contains a rotation-invariant uniform LBP
% ?histogram in a (16,2) neighbourhood.
%


function mapping = getmapping(samples,mappingtype)
% Version 0.1.1
% Authors: Marko Heikkil?and Timo Ahonen


% Changelog
% 0.1.1 Changed output to be a structure
% Fixed a bug causing out of memory errors when generating rotation
% invariant mappings with high number of sampling points.
% Lauge Sorensen is acknowledged for spotting this problem.





table = 0:2^samples-1;
newMax ?= 0; %number of patterns in the resulting LBP code
index ? = 0;


if strcmp(mappingtype,'u2') %Uniform 2
? newMax = samples*(samples-1) + 3;
? for i = 0:2^samples-1
? ? j = bitset(bitshift(i,1,samples),1,bitget(i,samples)); %rotate left
? ? numt = sum(bitget(bitxor(i,j),1:samples)); %number of 1->0 and
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?%0->1 transitions
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?%in binary string
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?%x is equal to the
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?%number of 1-bits in
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?%XOR(x,Rotate left(x))
? ? if numt <= 2
? ? ? table(i+1) = index;
? ? ? index = index + 1;
? ? else
? ? ? table(i+1) = newMax - 1;
? ? end
? end
end


if strcmp(mappingtype,'ri') %Rotation invariant
? tmpMap = zeros(2^samples,1) - 1;
? for i = 0:2^samples-1
? ? rm = i;
? ? r ?= i;
? ? for j = 1:samples-1
? ? ? r = bitset(bitshift(r,1,samples),1,bitget(r,samples)); %rotate
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?%left
? ? ? if r < rm
? ? ? ? rm = r;
? ? ? end
? ? end
? ? if tmpMap(rm+1) < 0
? ? ? tmpMap(rm+1) = newMax;
? ? ? newMax = newMax + 1;
? ? end
? ? table(i+1) = tmpMap(rm+1);
? end
end


if strcmp(mappingtype,'riu2') %Uniform & Rotation invariant
? newMax = samples + 2;
? for i = 0:2^samples - 1
? ? j = bitset(bitshift(i,1,samples),1,bitget(i,samples)); %rotate left
? ? numt = sum(bitget(bitxor(i,j),1:samples));
? ? if numt <= 2
? ? ? table(i+1) = sum(bitget(i,1:samples));
? ? else
? ? ? table(i+1) = samples+1;
? ? end
? end
end


mapping.table=table;
mapping.samples=samples;
mapping.num=newMax;

三、運行結(jié)果

到此這篇關(guān)于基于Matlab LBP實現(xiàn)植物葉片識別功能的文章就介紹到這了,更多相關(guān)Matlab LBP植物葉片識別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Linux編程實現(xiàn)制作文件的ed2k鏈

    Linux編程實現(xiàn)制作文件的ed2k鏈

    這篇文章主要介紹了Linux編程實現(xiàn)制作文件的ed2k鏈的相關(guān)資料,需要的朋友可以參考下
    2015-03-03
  • vscode編譯運行c語言報錯亂碼的解決

    vscode編譯運行c語言報錯亂碼的解決

    本文主要介紹了vscode編譯運行c語言報錯亂碼,文中通過圖文介紹的的非常詳細,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • Qt實現(xiàn)網(wǎng)絡(luò)聊天室的示例代碼

    Qt實現(xiàn)網(wǎng)絡(luò)聊天室的示例代碼

    本文主要介紹了Qt實現(xiàn)網(wǎng)絡(luò)聊天室,實現(xiàn)一個在線聊天室, 使用tcp對客戶端和服務(wù)器端進行通訊。具有一定的參考價值,具有一定的參考價值,
    2021-06-06
  • Visual?Studio?2022?配置?PCL?1.12.1?的問題小結(jié)

    Visual?Studio?2022?配置?PCL?1.12.1?的問題小結(jié)

    這篇文章主要介紹了Visual?Studio?2022?配置?PCL?1.12.1?的經(jīng)驗總結(jié)分享,本文通過圖文實例相結(jié)合給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • C++?AnimeGAN實現(xiàn)照片一鍵動漫化

    C++?AnimeGAN實現(xiàn)照片一鍵動漫化

    AnimeGAN是是由神經(jīng)網(wǎng)絡(luò)風(fēng)格遷移加生成對抗網(wǎng)絡(luò)(GAN)而成,它是基于CartoonGAN的改進,并提出了一個更加輕量級的生成器架構(gòu)。本文將介紹如何運用AnimeGAN實現(xiàn)照片一鍵動漫化,需要的可以參考一下
    2021-11-11
  • C++中的對象數(shù)組詳細解析

    C++中的對象數(shù)組詳細解析

    在建立數(shù)組時,同樣要調(diào)用構(gòu)造函數(shù)。如果有50個元素,就需要調(diào)用50次構(gòu)造函數(shù)。在需要的時候,可以在定義數(shù)組時提供實參以實現(xiàn)初始化
    2013-10-10
  • c++ 中vector 常見用法

    c++ 中vector 常見用法

    這篇文章主要給大家分享的是c++ 中vector 常見用法,,vector有兩個參數(shù),一個是size,表示當(dāng)前vector容器內(nèi)存儲的元素個數(shù),一個是capacity,表示當(dāng)前vector在內(nèi)存中申請的這片區(qū)域所能容納的元素個數(shù),下面來看看文章的詳細內(nèi)容,需要的朋友可以參考一下
    2021-11-11
  • C語言詳解如何實現(xiàn)順序棧

    C語言詳解如何實現(xiàn)順序棧

    順序棧,就是用一組地址連續(xù)的存儲單元來存放棧元素,然后用一個棧結(jié)構(gòu)去維護一個棧。在C中,可用動態(tài)開辟的數(shù)組去表示,維護的棧結(jié)構(gòu)需要有一個棧底和一個棧頂指針
    2022-04-04
  • C語言實現(xiàn)學(xué)生宿舍信息管理系統(tǒng)

    C語言實現(xiàn)學(xué)生宿舍信息管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)學(xué)生宿舍信息管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C++實現(xiàn)string存取二進制數(shù)據(jù)的方法

    C++實現(xiàn)string存取二進制數(shù)據(jù)的方法

    這篇文章主要介紹了C++實現(xiàn)string存取二進制數(shù)據(jù)的方法,針對STL中string的用法進行了較為詳細的分析,需要的朋友可以參考下
    2014-10-10

最新評論