本發(fā)明屬于三維圖像
技術(shù)領(lǐng)域:
,具體涉及一種基于協(xié)方差矩陣和投影映射的點(diǎn)云特征曲線提取方法。該方法適用于提取三維點(diǎn)云模型表面的特征線,用于描述模型的幾何特征。
背景技術(shù):
:隨著三維掃描獲取技術(shù)的快速發(fā)展,點(diǎn)云數(shù)據(jù)處理研究已成為數(shù)字幾何處理研究發(fā)展過程中的研究熱點(diǎn)。特征線的提取,是處理幾何模型的一種基本操作,可以為三維模型的理解提供重要的信息。因此,廣泛地應(yīng)用于幾何模型的可視化、優(yōu)化和簡化,曲面重建,模式識(shí)別,逆向工程等領(lǐng)域。對于三維點(diǎn)云模型,其特征曲線提取過程就是對模型上的數(shù)據(jù)點(diǎn)進(jìn)行分析并計(jì)算,找出其中的特征點(diǎn),并連接構(gòu)成光滑特征曲線。由于掃描獲取到的點(diǎn)云數(shù)據(jù)量大,本身沒有自然拓?fù)溥B接關(guān)系,且還存在噪聲、數(shù)據(jù)缺失等問題。技術(shù)實(shí)現(xiàn)要素:為了解決現(xiàn)有特征線提取方法存在對模型細(xì)微特征不敏感、時(shí)間代價(jià)高、抗噪性較差的缺點(diǎn),本發(fā)明提出了一種基于協(xié)方差矩陣和投影映射的特征曲線提取方法。為解決上述技術(shù)問題,本發(fā)明采用的技術(shù)方案為:步驟1,對輸入的點(diǎn)云數(shù)據(jù)source計(jì)算出點(diǎn)云表面的分辨率mr,計(jì)算出每個(gè)點(diǎn)的協(xié)方差矩陣的最大特征值作為該點(diǎn)的強(qiáng)度intensity。步驟2,在點(diǎn)云數(shù)據(jù)source找到第一個(gè)強(qiáng)度intensity大于閾值t1的點(diǎn)作為特征點(diǎn),以該點(diǎn)為種子點(diǎn)進(jìn)行區(qū)域增長,尋找更多符合條件的特征點(diǎn),將其加入到同一個(gè)點(diǎn)集中。直到區(qū)域無法增長,集合作為第一個(gè)聚類。繼續(xù)尋找新的種子點(diǎn),進(jìn)行區(qū)域增長,生成新的聚類,直到遍歷完全部點(diǎn)云數(shù)據(jù)。經(jīng)過上述驟,點(diǎn)云數(shù)據(jù)被劃分為多個(gè)聚類,將這些聚類作為閾值t1條件下的一個(gè)聚類集合cluster_list1。步驟3,根據(jù)步驟2同樣求出閾值t2且t1<t2條件下的一個(gè)聚類集合cluster_list2。根據(jù)兩個(gè)聚類集合中的每個(gè)聚類的重合度關(guān)系,判斷是否將聚類融合。最終形成一個(gè)特征更全面的聚類集合cluster_list。步驟4,取出聚類集合cluster_list中的一個(gè)聚類,根據(jù)聚類中的第一個(gè)點(diǎn)經(jīng)過計(jì)算協(xié)方差矩陣的特征值特征向量、修正法向量和主方向、尋找預(yù)測點(diǎn)、按權(quán)重計(jì)算新的關(guān)鍵特征點(diǎn)、將關(guān)鍵特征點(diǎn)投影至最近局部曲面一系列操作生成了一個(gè)在模型表面的連接點(diǎn)。以這個(gè)連接點(diǎn)為起點(diǎn)同樣經(jīng)過上述生成連接點(diǎn)的步驟不斷生成新的連接點(diǎn),直到無法生成新的連接點(diǎn)。這樣就得到一個(gè)有序的點(diǎn)的集合,即為一條特征線。重新選取聚類中的點(diǎn),繼續(xù)生成特征線,直到遍歷聚類內(nèi)全部的點(diǎn)。步驟5,選取聚類集合cluster_list中的其他聚類,根據(jù)步驟4繼續(xù)生成特征線,直到聚類集合中的所有集合都已生成特征線。其得到的全部的特征線就是模型的特征線。進(jìn)一步,所述步驟2中,在點(diǎn)云數(shù)據(jù)source找到第一個(gè)強(qiáng)度intensity大于閾值t1的點(diǎn)作為特征點(diǎn),以該點(diǎn)為種子點(diǎn)進(jìn)行區(qū)域增長,尋找更多符合條件的特征點(diǎn),將其加入到同一個(gè)點(diǎn)集中;直到區(qū)域無法增長,集合作為第一個(gè)聚類;繼續(xù)尋找新的種子點(diǎn),進(jìn)行區(qū)域增長,生成新的聚類,直到遍歷完全部點(diǎn)云數(shù)據(jù);經(jīng)過上述驟,點(diǎn)云數(shù)據(jù)被劃分為多個(gè)聚類,將這些聚類作為閾值t1條件下的一個(gè)聚類集合cluster_list1,包括:將點(diǎn)云數(shù)據(jù)source在閾值t1條件下生成一個(gè)聚類集合cluster_list1的過程通過如下步驟2.1至步驟2.5實(shí)現(xiàn):步驟2.1,設(shè)置一個(gè)空的種子點(diǎn)隊(duì)列、空的聚類和聚類集合,分別記為l、cluster和cluster_list;步驟2.2,順序遍歷點(diǎn)云source,從中選取第一個(gè)強(qiáng)度intensity大于閾值t1且未被檢測的點(diǎn)p,作為一個(gè)特征點(diǎn),同時(shí)作為區(qū)域增長的初始種子點(diǎn),將其加入種子點(diǎn)隊(duì)列l(wèi)和當(dāng)前聚類cluster中,并將其標(biāo)記為已檢測;步驟2.3,彈出隊(duì)列l(wèi)中第一個(gè)元素,作為當(dāng)前種子點(diǎn),記為pseed;以其為中心,搜索半徑為r范圍內(nèi)的鄰域點(diǎn),記為n(pseed),n(pseed)={pj|pj∈pc,‖pj-p‖≤r};對每一個(gè)鄰域點(diǎn)pj,計(jì)算強(qiáng)度intensity,判斷強(qiáng)度是否大于t1,并標(biāo)記為已檢測;若大于t1,則加入當(dāng)前聚類cluster和種子點(diǎn)隊(duì)列l(wèi)中;若不大于t1,繼續(xù)檢測下一個(gè)鄰域點(diǎn);步驟2.4,循環(huán)執(zhí)行步驟2.3,直到種子點(diǎn)序列l(wèi)為空,結(jié)束當(dāng)前區(qū)域增長,得到聚類cluster,并將其置入到cluster_list之中,然后清空cluster;步驟2.5,循環(huán)執(zhí)行步驟2.2–步驟2.4;直到點(diǎn)云source中所有的點(diǎn)都已檢測過,則聚類結(jié)束;最終得到一個(gè)將點(diǎn)云source分割成若干個(gè)特征點(diǎn)聚類的聚類集合cluster_list;cluster_list就是在閾值t1條件下聚類集合cluster_list1。更進(jìn)一步,所述步驟3中,根據(jù)步驟2同樣求出閾值t2且t1<t2條件下的一個(gè)聚類集合cluster_list2;根據(jù)兩個(gè)聚類集合中的每個(gè)聚類的重合度關(guān)系,判斷是否將聚類融合;最終形成一個(gè)特征更全面的聚類集合cluster_list,包括:cluster_list2可通過將步驟2中的閾值設(shè)置為t2計(jì)算獲得,將cluster_list1、cluster_list2融合成一個(gè)聚類cluster_list可通過步驟3.1至步驟3.7實(shí)現(xiàn):首先假定兩個(gè)特征點(diǎn)聚類集合cluster_list1和cluster_list2里的聚類個(gè)數(shù)分別是m,n;步驟3.1,為cluster_list2中的每一個(gè)聚類cluster_list2j設(shè)置一個(gè)計(jì)數(shù)器,其集合記為{count0,count1,...,countn};步驟3.2,從cluster_list1選取一個(gè)聚類,記為cluster_list1i,其中i<m,m為cluster_list1中的聚類個(gè)數(shù);步驟3.3,對cluster_list1i中的每一個(gè)點(diǎn)pi,在cluster_list2中的每一個(gè)聚類cluster_list2j(j<n)中,找是否存在對應(yīng)點(diǎn)q使得點(diǎn)pi與其對應(yīng)點(diǎn)q的距離在一倍分辨率mr以內(nèi),若存在,則countj加1;步驟3.4,計(jì)數(shù)器總和記為count,count=count0+count1+…+countn;若count為0,即cluster_list1i不存在于cluster_list2中,將cluster_list1i添加到cluster_list2中,執(zhí)行步驟3.7;若count不為0,則認(rèn)為cluster_list1i與cluster_list2有一定程度的重合,執(zhí)行步驟3.5;步驟3.5,計(jì)算count與cluster_list1i中點(diǎn)的個(gè)數(shù)的比值,記為rate1,若rate1>30%,則認(rèn)為cluster_list2中存在聚類cluster_list1i,執(zhí)行步驟3.7;否則,執(zhí)行步驟3.6;步驟3.6,計(jì)數(shù)器集合中的最大值記為countmax;計(jì)算count與countmax的比值,記為rate2;若rate2>90%,則認(rèn)為cluster_list1i比cluster_list2max特征更全面,用cluster_list1i替換cluster_list2max;若rate2<10%,則認(rèn)為重合度不高,將cluster_list1i添加到cluster_list2中;步驟3.7,返回步驟3.2,直到遍歷cluster_list1中全部聚類;最終得到新的聚類集合cluster_list2就是融合后的特征點(diǎn)的聚類集合cluster_list。更進(jìn)一步,所述步驟4中,取出聚類集合cluster_list中的一個(gè)聚類,根據(jù)聚類中的第一個(gè)點(diǎn)經(jīng)過計(jì)算協(xié)方差矩陣的特征值特征向量、修正法向量和主方向、尋找預(yù)測點(diǎn)、按權(quán)重計(jì)算新的關(guān)鍵特征點(diǎn)、將關(guān)鍵特征點(diǎn)投影至最近局部曲面一系列操作生成了一個(gè)在模型表面的連接點(diǎn);以這個(gè)連接點(diǎn)為起點(diǎn)同樣經(jīng)過上述生成連接點(diǎn)的步驟不斷生成新的連接點(diǎn),直到無法生成新的連接點(diǎn);這樣就得到一個(gè)有序的點(diǎn)的集合,即為一條特征線;重新選取聚類中的點(diǎn),繼續(xù)生成特征線,直到遍歷聚類內(nèi)全部的點(diǎn),包括:在聚類集合cluster_list的一個(gè)聚類中生成特征線可由步驟4.1至步驟4.10實(shí)現(xiàn):首先設(shè)特征點(diǎn)的聚類集合cluster_list={clusteri},i=1,…,m;步驟4.1,設(shè)有一個(gè)空的種子點(diǎn)隊(duì)列、線段連接點(diǎn)的列表和特征線列表,分別記為seed_list,point_list,line_list;步驟4.2,在特征點(diǎn)聚類的集合cluster_list中選取一個(gè)聚類clusteri,將該聚類中的第一個(gè)點(diǎn)p作為種子點(diǎn)加入種子點(diǎn)隊(duì)列seed_list中,記為seed0,同時(shí)設(shè)置為當(dāng)前種子點(diǎn),記為pseed_curr,即pseed_curr=seed0;步驟4.3,在當(dāng)前聚類clusteri中,以當(dāng)前種子點(diǎn)pseed_curr為中心,搜索半徑為r范圍內(nèi)的鄰域點(diǎn),記為n(pseed_curr),n(pseed_curr)={pj|pj∈clusteri,‖pj-p‖≤r};計(jì)算點(diǎn)pseed_curr的協(xié)方差矩陣,取最大特征值對應(yīng)的特征向量作為當(dāng)前種子點(diǎn)pseed_curr的主方向,記為取最小特征值對應(yīng)得特征向量作為當(dāng)前種子點(diǎn)pseed_curr的法向量,記為步驟4.4,修正法向量和主方向的方向;判斷若是,則法向量其中是點(diǎn)云中距離當(dāng)前種子點(diǎn)pseed_curr最近的點(diǎn)的法向量,是點(diǎn)pseed_curr的法向量;若seed_list<2,即種子點(diǎn)隊(duì)列中只有一個(gè)點(diǎn),不需要修正主方向;否則,判斷是否成立,若是,則主方向其中是當(dāng)前種子點(diǎn)pseed_curr的主方向;步驟4.5,根據(jù)當(dāng)前種子點(diǎn)pseed_curr及其鄰域點(diǎn)n(pseed_curr)建立局部坐標(biāo)系;以當(dāng)前種子點(diǎn)pseed_curr的法向量作為w軸,主方向作為u軸,即為v軸的正方向,形成點(diǎn)pseed_curr的局部坐標(biāo)系,記為(pseed_curr,u,v,w);平面upseed_currv即為當(dāng)前種子點(diǎn)pseed_curr鄰域內(nèi)的曲面在點(diǎn)pseed_curr處的切平面;步驟4.6,利用公式(1),將點(diǎn)pseed_curr的鄰域點(diǎn){p0,p1,…,pj,…,pn}(pj∈n(pseed_curr))投影到平面upseed_currv上,對應(yīng)的投影后的點(diǎn)記為{q0,q1,…,qj,…,qn};按照公式(2)計(jì)算qj和點(diǎn)pseed_curr的連線與坐標(biāo)軸u軸的夾角αj,將αj≤45°的點(diǎn)加入待選預(yù)測點(diǎn)集合,記為pre_points,且將45°≤αj≤90°的點(diǎn)標(biāo)記為已檢測;將pre_points中的點(diǎn)按照與點(diǎn)pseed_curr的距離排序,選擇距離最近的點(diǎn)作為預(yù)測點(diǎn),記為ppre,并標(biāo)記已檢測;判斷是否成立,若是,則主方向其中是預(yù)測點(diǎn)ppre的主方向;步驟4.7,計(jì)算關(guān)鍵特征點(diǎn);根據(jù)公式(3)計(jì)算關(guān)鍵特征點(diǎn),記為pkey;其中d是自定義的步長,w是由當(dāng)前種子點(diǎn)pseed_curr的主方向和預(yù)測點(diǎn)ppre的主方向按照公式(4)計(jì)算的方向權(quán)重,是當(dāng)前種子點(diǎn)pseed_curr的主方向,是預(yù)測點(diǎn)ppre的主方向;pkey=pseed_curr+w*d(3)步驟4.8,計(jì)算線段的連接點(diǎn)lk,k=0,1,…;在點(diǎn)云中以關(guān)鍵特征點(diǎn)pkey為中心,搜索半徑為r范圍的鄰域點(diǎn),從中選取距離點(diǎn)pkey最近的點(diǎn),用移動(dòng)最小二乘法擬合該點(diǎn)處的局部曲面,并將關(guān)鍵特征點(diǎn)pkey投影到局部曲面上,得到線段的連接點(diǎn)lk,并加入連接點(diǎn)的列表point_list中;并將第一個(gè)連接點(diǎn)l0的主方向保存,記為line_dir;步驟4.9,將得到的連接點(diǎn)lk加入種子點(diǎn)隊(duì)列seed_list中,并設(shè)置為當(dāng)前種子點(diǎn),循環(huán)執(zhí)行步驟4.3–步驟4.9,繼續(xù)生成新的連接點(diǎn),直到步驟4.5中找不到預(yù)測點(diǎn),則當(dāng)前方向line_dir上特征線的連接點(diǎn)提取結(jié)束,得到point_list,生成線段,記為l1;清空point_list;依上述步驟,計(jì)算相反方向-line_dir,生成線段,記為l2;連接線段l1與l2,生成當(dāng)前聚類中的一條完整的特征線,將其加入line_list;步驟4.10,計(jì)算該聚類clusteri中未被檢測的點(diǎn)數(shù)所占聚類中全部點(diǎn)數(shù)的比值;若小于一定閾值,則認(rèn)為該聚類中的全部特征線提取完成;否則,在未被檢測到的點(diǎn)中選取新的起始點(diǎn)作為新的種子點(diǎn),循環(huán)執(zhí)行步驟4.3–步驟4.10,繼續(xù)生成特征線。本發(fā)明采用以上技術(shù)方案,首先利用協(xié)方差矩陣的特征值作為點(diǎn)的強(qiáng)度特征,將強(qiáng)度大于閾值的點(diǎn)作為特征點(diǎn),利用區(qū)域增長的方法將特征點(diǎn)劃分成多個(gè)帶狀聚類,然后在各個(gè)聚類內(nèi)部根據(jù)協(xié)方差矩陣得到的主方向趨勢計(jì)算出關(guān)鍵特征點(diǎn),將關(guān)鍵特征點(diǎn)投影到距該關(guān)鍵點(diǎn)最近的利用移動(dòng)最小二乘法擬合出的局部模型曲面上,生成連接點(diǎn),不斷計(jì)算連接點(diǎn)形成光滑的貼合模型的特征線。相對之前的特征線提取方法,本發(fā)明利用協(xié)方差矩陣求得主方向來描述聚類的趨勢,一定程度上彌補(bǔ)了特征點(diǎn)提取不足的情況,比如特征點(diǎn)的帶狀聚類過寬、過窄等情況,而且特征線的連接點(diǎn)是采用移動(dòng)最小二乘法擬合的曲面上的點(diǎn),在符合模型曲面變化的同時(shí),特征線也更光滑。同時(shí),本發(fā)明在確定特征線的起始點(diǎn)時(shí),利用的是生成的連接點(diǎn)而不是隨機(jī)的聚類內(nèi)的點(diǎn),避免了其他方法中因?yàn)殡S機(jī)選取聚類內(nèi)的點(diǎn)作為特征線起始點(diǎn)帶來的誤差。因此,與
背景技術(shù):
相比,本發(fā)明具有算法運(yùn)行時(shí)間短、魯棒性高、抗噪性好和特征線明顯的優(yōu)點(diǎn)。附圖說明圖1是本發(fā)明的方法流程圖;圖2是pauly提出的方法對venus模型提取出的特征線;圖3是龐旭芳提出的方法對venus模型提取出的特征線;圖4是本發(fā)明的方法對venus模型提取出的特征線。具體實(shí)施方式下面結(jié)合附圖和實(shí)施例對本發(fā)明作進(jìn)一步的詳細(xì)描述。如圖1所示,本發(fā)明中的基于協(xié)方差矩陣和投影映射的點(diǎn)云特征曲線提取方法,其包括步驟1至步驟7:步驟1,對輸入的點(diǎn)云數(shù)據(jù)source計(jì)算出點(diǎn)云表面的分辨率mr,計(jì)算出每個(gè)點(diǎn)的協(xié)方差矩陣的最大特征值作為該點(diǎn)的強(qiáng)度intensity。其中,計(jì)算點(diǎn)云表面分辨率mr和計(jì)算協(xié)方差矩陣的最大特征值的方式,可以參考已有的點(diǎn)云表面分辨率mr和協(xié)方差矩陣的最大特征值的計(jì)算方式,此處不做具體闡述。計(jì)算出的點(diǎn)云表面的分辨率mr作為后續(xù)步驟的參數(shù),計(jì)算出的每個(gè)點(diǎn)的協(xié)方差矩陣的最大特征值作為該點(diǎn)的強(qiáng)度intensity條件,用于后續(xù)步驟中判斷該點(diǎn)是否為關(guān)鍵點(diǎn)。步驟2,在點(diǎn)云數(shù)據(jù)source找到第一個(gè)強(qiáng)度intensity大于閾值t1的點(diǎn)作為特征點(diǎn),以該點(diǎn)為種子點(diǎn)進(jìn)行區(qū)域增長,尋找更多符合條件的特征點(diǎn),將其加入到同一個(gè)點(diǎn)集中。直到區(qū)域無法增長,集合作為第一個(gè)聚類。繼續(xù)尋找新的種子點(diǎn),進(jìn)行區(qū)域增長,生成新的聚類,直到遍歷完全部點(diǎn)云數(shù)據(jù)。經(jīng)過上述驟,點(diǎn)云數(shù)據(jù)被劃分為多個(gè)聚類,將這些聚類作為閾值t1條件下的一個(gè)聚類集合cluster_list1。該步驟中閾值的取值范圍一般0.1-0.3。具體的,該步驟可以通過如下步驟2.1至步驟2.5實(shí)現(xiàn):步驟2.1,設(shè)置一個(gè)空的種子點(diǎn)隊(duì)列、空的聚類和聚類集合,分別記為l、cluster和cluster_list。步驟2.2,順序遍歷點(diǎn)云source,從中選取第一個(gè)強(qiáng)度intensity大于閾值t1且未被檢測的點(diǎn)p,作為一個(gè)特征點(diǎn),同時(shí)作為區(qū)域增長的初始種子點(diǎn),將其加入種子點(diǎn)隊(duì)列l(wèi)和當(dāng)前聚類cluster中,并將其標(biāo)記為已檢測。步驟2.3,彈出隊(duì)列l(wèi)中第一個(gè)元素,作為當(dāng)前種子點(diǎn),記為pseed。以其為中心,搜索半徑為r范圍內(nèi)的鄰域點(diǎn),記為n(pseed),n(pseed)={pj|pj∈pc,‖pj-p‖≤r}。對每一個(gè)鄰域點(diǎn)pj,計(jì)算強(qiáng)度intensity,判斷強(qiáng)度是否大于t1,并標(biāo)記為已檢測。若大于t1,則加入當(dāng)前聚類cluster和種子點(diǎn)隊(duì)列l(wèi)中;若不大于t1,繼續(xù)檢測下一個(gè)鄰域點(diǎn)。步驟2.4,循環(huán)執(zhí)行步驟2.3,直到種子點(diǎn)序列l(wèi)為空,結(jié)束當(dāng)前區(qū)域增長,得到聚類cluster,并將其置入到cluster_list之中,然后清空cluster。步驟2.5,循環(huán)執(zhí)行步驟2.2–步驟2.4。直到點(diǎn)云source中所有的點(diǎn)都已檢測過,則聚類結(jié)束。最終得到一個(gè)將點(diǎn)云source分割成若干個(gè)特征點(diǎn)聚類的聚類集合cluster_list。cluster_list就是在閾值t1條件下聚類集合cluster_list1。其中步驟2.3中,搜索半徑為r范圍內(nèi)的鄰域點(diǎn)已有一些現(xiàn)有的成熟的算法,如:kdtree等,此處不做闡述。r的取值范圍一般為3-18倍的分辨率。步驟3,根據(jù)步驟2同樣求出閾值t2且t1<t2條件下的一個(gè)聚類集合cluster_list2。根據(jù)兩個(gè)聚類集合中的每個(gè)聚類的重合度關(guān)系,判斷是否將聚類融合。最終形成一個(gè)特征更全面的聚類集合cluster_list。聚類集合cluster_list2可以通過將步驟2中的閾值換為t2得到,注意的是要保證t1<t2。做出這樣定義是為了后續(xù)將兩個(gè)聚類集合融合時(shí),有一個(gè)對應(yīng)關(guān)系。即,cluster_list1是閾值較小的條件下獲取的聚類集合,cluster_list2是閾值較大的條件下獲取的聚類集合。將cluster_list1、cluster_list2融合成一個(gè)聚類cluster_list可通過步驟3.1至步驟3.7實(shí)現(xiàn):首先假定兩個(gè)特征點(diǎn)聚類集合cluster_list1和cluster_list2里的聚類個(gè)數(shù)分別是m,n。步驟3.1,為cluster_list2中的每一個(gè)聚類cluster_list2j設(shè)置一個(gè)計(jì)數(shù)器,其集合記為{count0,count1,...,countn}。步驟3.2,從cluster_list1選取一個(gè)聚類,記為cluster_list1i,其中i<m,m為cluster_list1中的聚類個(gè)數(shù)。步驟3.3,對cluster_list1i中的每一個(gè)點(diǎn)pi,在cluster_list2中的每一個(gè)聚類cluster_list2j(j<n)中,找是否存在對應(yīng)點(diǎn)q使得點(diǎn)pi與其對應(yīng)點(diǎn)q的距離在一倍分辨率mr以內(nèi),若存在,則countj加1。步驟3.4,計(jì)數(shù)器總和記為count,count=count0+count1+…+countn。若count為0,即cluster_list1i不存在于cluster_list2中,將cluster_list1i添加到cluster_list2中,執(zhí)行步驟3.7;若count不為0,則認(rèn)為cluster_list1i與cluster_list2有一定程度的重合,執(zhí)行步驟3.5。步驟3.5,計(jì)算count與cluster_list1i中點(diǎn)的個(gè)數(shù)的比值,記為rate1,若rate1>30%,則認(rèn)為cluster_list2中存在聚類cluster_list1i,執(zhí)行步驟3.7;否則,執(zhí)行步驟3.6。步驟3.6,計(jì)數(shù)器集合中的最大值記為countmax。計(jì)算count與countmax的比值,記為rate2;若rate2>90%,則認(rèn)為cluster_list1i比cluster_list2max特征更全面,用cluster_list1i替換cluster_list2max;若rate2<10%,則認(rèn)為重合度不高,將cluster_list1i添加到cluster_list2中。步驟3.7,返回步驟3.2,直到遍歷cluster_list1中全部聚類。最終得到新的聚類集合cluster_list2就是融合后的特征點(diǎn)的聚類集合cluster_list。步驟4,取出聚類集合cluster_list中的一個(gè)聚類,根據(jù)聚類中的第一個(gè)點(diǎn)經(jīng)過計(jì)算協(xié)方差矩陣的特征值特征向量、修正法向量和主方向、尋找預(yù)測點(diǎn)、按權(quán)重計(jì)算新的關(guān)鍵特征點(diǎn)、將關(guān)鍵特征點(diǎn)投影至最近局部曲面一系列操作生成了一個(gè)在模型表面的連接點(diǎn)。以這個(gè)連接點(diǎn)為起點(diǎn)同樣經(jīng)過上述生成連接點(diǎn)的步驟不斷生成新的連接點(diǎn),直到無法生成新的連接點(diǎn)。這樣就得到一個(gè)有序的點(diǎn)的集合,即為一條特征線。重新選取聚類中的點(diǎn),繼續(xù)生成特征線,直到遍歷聚類內(nèi)全部的點(diǎn)。在聚類集合cluster_list的一個(gè)聚類中生成特征線可由步驟4.1至步驟4.10實(shí)現(xiàn):首先設(shè)特征點(diǎn)的聚類集合cluster_list={clusteri},i=1,…,m。步驟4.1,設(shè)有一個(gè)空的種子點(diǎn)隊(duì)列、線段連接點(diǎn)的列表和特征線列表,分別記為seed_list,point_list,line_list。步驟4.2,在特征點(diǎn)聚類的集合cluster_list中選取一個(gè)聚類clusteri,將該聚類中的第一個(gè)點(diǎn)p作為種子點(diǎn)加入種子點(diǎn)隊(duì)列seed_list中,記為seed0,同時(shí)設(shè)置為當(dāng)前種子點(diǎn),記為pseed_curr,即pseed_curr=seed0。步驟4.3,在當(dāng)前聚類clusteri中,以當(dāng)前種子點(diǎn)pseed_curr為中心,搜索半徑為r范圍內(nèi)的鄰域點(diǎn),記為n(pseed_curr),n(pseed_curr)={pj|pj∈clusteri,‖pj-p‖≤r}。計(jì)算點(diǎn)pseed_curr的協(xié)方差矩陣,取最大特征值對應(yīng)的特征向量作為當(dāng)前種子點(diǎn)pseed_curr的主方向,記為取最小特征值對應(yīng)得特征向量作為當(dāng)前種子點(diǎn)pseed_curr的法向量,記為步驟4.4,修正法向量和主方向的方向。判斷若是,則法向量其中是點(diǎn)云中距離當(dāng)前種子點(diǎn)pseed_curr最近的點(diǎn)的法向量,是點(diǎn)pseed_curr的法向量。若seed_list<2,即種子點(diǎn)隊(duì)列中只有一個(gè)點(diǎn),不需要修正主方向;否則,判斷是否成立,若是,則主方向其中是當(dāng)前種子點(diǎn)pseed_curr的主方向。步驟4.5,根據(jù)當(dāng)前種子點(diǎn)pseed_curr及其鄰域點(diǎn)n(pseed_curr)建立局部坐標(biāo)系。以當(dāng)前種子點(diǎn)pseed_curr的法向量作為w軸,主方向作為u軸,即為v軸的正方向,形成點(diǎn)pseed_curr的局部坐標(biāo)系,記為(pseed_curr,u,v,w)。平面upseed_currv即為當(dāng)前種子點(diǎn)pseed_curr鄰域內(nèi)的曲面在點(diǎn)pseed_curr處的切平面。步驟4.6,利用公式(1),將點(diǎn)pseed_curr的鄰域點(diǎn){p0,p1,…,pj,…,pn}(pj∈n(pseed_curr))投影到平面upseed_currv上,對應(yīng)的投影后的點(diǎn)記為{q0,q1,…,qj,…,qn}。按照公式(2)計(jì)算qj和點(diǎn)pseed_curr的連線與坐標(biāo)軸u軸的夾角αj,將αj≤45°的點(diǎn)加入待選預(yù)測點(diǎn)集合,記為pre_points,且將45°≤αj≤90°的點(diǎn)標(biāo)記為已檢測。將pre_points中的點(diǎn)按照與點(diǎn)pseed_curr的距離排序,選擇距離最近的點(diǎn)作為預(yù)測點(diǎn),記為ppre,并標(biāo)記已檢測。判斷是否成立,若是,則主方向其中是預(yù)測點(diǎn)ppre的主方向。步驟4.7,計(jì)算關(guān)鍵特征點(diǎn)。根據(jù)公式(3)計(jì)算關(guān)鍵特征點(diǎn),記為pkey。其中d是自定義的步長,w是由當(dāng)前種子點(diǎn)pseed_curr的主方向和預(yù)測點(diǎn)ppre的主方向按照公式(4)計(jì)算的方向權(quán)重,是當(dāng)前種子點(diǎn)pseed_curr的主方向,是預(yù)測點(diǎn)ppre的主方向。pkey=pseed_curr+w*d(3)步驟4.8,計(jì)算線段的連接點(diǎn)lk,k=0,1,…。在點(diǎn)云中以關(guān)鍵特征點(diǎn)pkey為中心,搜索半徑為r范圍的鄰域點(diǎn),從中選取距離點(diǎn)pkey最近的點(diǎn),用移動(dòng)最小二乘法擬合該點(diǎn)處的局部曲面,并將關(guān)鍵特征點(diǎn)pkey投影到局部曲面上,得到線段的連接點(diǎn)lk,并加入連接點(diǎn)的列表point_list中。并將第一個(gè)連接點(diǎn)l0的主方向保存,記為line_dir。步驟4.9,將得到的連接點(diǎn)lk加入種子點(diǎn)隊(duì)列seed_list中,并設(shè)置為當(dāng)前種子點(diǎn),循環(huán)執(zhí)行步驟4.3–步驟4.9,繼續(xù)生成新的連接點(diǎn),直到步驟4.5中找不到預(yù)測點(diǎn),則當(dāng)前方向line_dir上特征線的連接點(diǎn)提取結(jié)束,得到point_list,生成線段,記為l1。清空point_list。依上述步驟,計(jì)算相反方向-line_dir,生成線段,記為l2。連接線段l1與l2,生成當(dāng)前聚類中的一條完整的特征線,將其加入line_list。步驟4.10,計(jì)算該聚類clusteri中未被檢測的點(diǎn)數(shù)所占聚類中全部點(diǎn)數(shù)的比值。若小于一定閾值,則認(rèn)為該聚類中的全部特征線提取完成。否則,在未被檢測到的點(diǎn)中選取新的起始點(diǎn)作為新的種子點(diǎn),循環(huán)執(zhí)行步驟4.3–步驟4.10,繼續(xù)生成特征線。其中在步驟4.3中的計(jì)算協(xié)方差矩陣的特征值和步驟4.4中的計(jì)算法向量及步驟4.8中用移動(dòng)最小二乘法擬合局部曲面都有成熟的算法,本發(fā)明對此不做詳細(xì)闡述。步驟4.10中的閾值可以自己定義,取值范圍為0.1–1。步驟5,選取聚類集合cluster_list中的其他聚類,根據(jù)步驟4繼續(xù)生成特征線,直到聚類集合中的所有集合都已生成特征線。其得到的全部的特征線就是模型的特征線。為表明本發(fā)明具有以上優(yōu)點(diǎn),分別利用其中pauly提出的方法、龐旭芳提出的方法和本發(fā)明的方法對venus模型提取特征線。圖2是pauly提出的方法對venus模型提取出的特征線。圖3是龐旭芳提出的方法提取出的特征線。圖4是本發(fā)明的方法提取出的特征線。表1為三種方法運(yùn)行時(shí)間的對比。從圖2、圖3、圖4對比中可以看出本發(fā)明提取的特征線更為完整,更加符合模型表面。表1不同方法配準(zhǔn)時(shí)間對比方法pauly提出的方法龐旭芳提出的方法本發(fā)明的方法運(yùn)行時(shí)間(ms)268273964128242從表1可以看出本發(fā)明的方法比龐旭芳提出的方法運(yùn)行時(shí)間短,效率更高。在和pauly提出的方法運(yùn)行時(shí)間相近的情況下,由上面提取特征線的結(jié)果截圖對比可知,本發(fā)明提出的方法特征線提取的更加完整,效果更好。當(dāng)前第1頁12