基于草圖的樹(shù)木枝干三維模型構(gòu)建方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明設(shè)及=維圖形生成技術(shù)領(lǐng)域,具體設(shè)及一種基于草圖的樹(shù)木枝干=維模型 構(gòu)建方法。
【背景技術(shù)】
[0002] 在影視制作、數(shù)字游戲開(kāi)發(fā)、景觀展示等應(yīng)用中,樹(shù)木是十分重要的對(duì)象。因此,快 速構(gòu)建逼真的樹(shù)木=維模型對(duì)該些應(yīng)用開(kāi)發(fā)具有十分重要的現(xiàn)實(shí)意義,此外,在農(nóng)學(xué)和林 業(yè)科研中,也有研究者借助于=維設(shè)計(jì)技術(shù)輔助進(jìn)行樹(shù)木的株型設(shè)計(jì)和定量計(jì)算分析。枝 干是樹(shù)木形態(tài)結(jié)構(gòu)的重要組成部分,在樹(shù)形塑造中起著決定性的作用。因此,樹(shù)木枝干的= 維重建是構(gòu)建樹(shù)木形態(tài)結(jié)構(gòu)=維模型的關(guān)鍵。
[0003] 目前,許多研究者圍繞該問(wèn)題開(kāi)展了大量研究,提出了一些樹(shù)木枝干S維模型的 構(gòu)建方法。例如,有人提出了基于二維草圖的植物形態(tài)結(jié)構(gòu)交互設(shè)計(jì)方法,通過(guò)簡(jiǎn)單勾畫(huà)植 物拓?fù)浣Y(jié)構(gòu)的草圖,然后通過(guò)某種方法將二維草圖轉(zhuǎn)換到=維空間,從而得到=維的植物 骨架模型,最后結(jié)合枝條的半徑進(jìn)行=維模型的生成。有人提出了基于點(diǎn)云數(shù)據(jù)的樹(shù)木枝 干=維重建方法,首先從樹(shù)木的=維點(diǎn)云數(shù)據(jù)中提取枝干骨架,同時(shí)利用植物學(xué)原理估計(jì) 枝干半徑,最后進(jìn)行枝干=維網(wǎng)格曲面的生成。此外,也有人利用=維數(shù)字化儀獲取樹(shù)木枝 干上的特征點(diǎn),并通過(guò)該些特征點(diǎn)進(jìn)行樹(shù)木枝干=維模型的重構(gòu)。
[0004] 但是,現(xiàn)有樹(shù)木枝干=維模型的構(gòu)建方法的不足之處是在重建的枝干=維模型 中,往往僅把一根枝條看作一個(gè)類(lèi)圓柱體的對(duì)象,缺乏對(duì)枝條的節(jié)間進(jìn)行建模和描述。
[0005] 節(jié)間是枝條的組成單位,也是枝條最顯著的形態(tài)特征之一,葉子、果實(shí)、花、芽等附 屬器官都均依附于節(jié)間而生長(zhǎng)。同時(shí),樹(shù)木枝條的節(jié)間長(zhǎng)度還與枝條類(lèi)型相關(guān),同一種樹(shù) 木,不同類(lèi)型、不同生長(zhǎng)時(shí)期的枝條上節(jié)間的長(zhǎng)度分布存在差異。在后期樹(shù)木冠層的S維重 建中,需要正確地將葉子、果實(shí)等器官放置到枝條的各個(gè)節(jié)間。此外,很多植物的枝條上,節(jié) 間連接處都有較為明顯的形態(tài)特征,例如凸起、顏色加深等。因此,在構(gòu)建樹(shù)木枝干=維模 型時(shí),考慮節(jié)間的描述和建模是十分必要的。
【發(fā)明內(nèi)容】
[0006] 針對(duì)現(xiàn)有樹(shù)木枝干=維模型的構(gòu)建方法中缺乏對(duì)枝條的節(jié)間進(jìn)行建模和描述的 缺陷,本發(fā)明提供了一種基于草圖的樹(shù)木枝干=維模型構(gòu)建方法。
[0007] 本發(fā)明提供的一種基于草圖的樹(shù)木枝干=維模型構(gòu)建方法,包括:
[000引根據(jù)所要構(gòu)建的樹(shù)木枝干生成二維樹(shù)木枝干骨架,所述二維樹(shù)木枝干骨架包含多 條二維骨架曲線;
[0009] 針對(duì)所述二維樹(shù)木枝干骨架中的每一條二維骨架曲線,提取多個(gè)像素點(diǎn)作為控制 點(diǎn)實(shí)現(xiàn)對(duì)該二維骨架曲線進(jìn)行節(jié)間劃分,形成劃分節(jié)間后的二維樹(shù)木枝干骨架;
[0010] 將所述劃分節(jié)間后的二維樹(shù)木枝干骨架進(jìn)行=維轉(zhuǎn)換,得到=維樹(shù)木枝干骨架;
[0011] 針對(duì)所述=維樹(shù)木枝干骨架中的每一條=維骨架曲線,生成=維網(wǎng)格,得到所要 構(gòu)建的樹(shù)木枝干的s維網(wǎng)格模型。
[0012] 進(jìn)一步地,所述二維樹(shù)木枝干骨架中分別采用樹(shù)干、主枝、側(cè)枝或一年生枝條四種 類(lèi)型的二維骨架曲線表示不同類(lèi)型的枝條。
[0013] 進(jìn)一步地,所述針對(duì)所述二維樹(shù)木枝干骨架中的每一條二維骨架曲線,提取多個(gè) 像素點(diǎn)作為控制點(diǎn)實(shí)現(xiàn)對(duì)該二維骨架曲線進(jìn)行節(jié)間劃分的步驟,包括:
[0014] 針對(duì)所述二維樹(shù)木枝干骨架中的第i條二維骨架曲線,根據(jù)所述第i條二維骨架 曲線包含的像素點(diǎn)數(shù)和預(yù)設(shè)的節(jié)間像素點(diǎn)數(shù)獲得該第i條二維骨架曲線的節(jié)間數(shù)INd,其 中i為正整數(shù);
[0015] 判斷所述第i條二維骨架曲線是否為一年生枝條,若是,則選取所述第i條二維骨 架曲線上的第Pj.個(gè)像素點(diǎn)作為控制點(diǎn)Rj.;其中:
[0016]Pj=Pj_i+[aj],Pi= 1,j= 1,2, 3.. .INd+1
[0017]
[0018] pILength為預(yù)設(shè)的節(jié)間像素點(diǎn)數(shù),RandN(x,y)為取值范圍為[X,y]的隨機(jī)函數(shù);
[0019] 否則,從所述第i條二維骨架曲線上第一個(gè)像素點(diǎn)開(kāi)始,每隔pILength個(gè)像素點(diǎn) 取1個(gè)像素點(diǎn),作為該條二維骨架曲線的控制點(diǎn),共選取I也+1個(gè)控制點(diǎn)。
[0020] 進(jìn)一步地,所述將所述劃分節(jié)間后的二維樹(shù)木枝干骨架進(jìn)行=維轉(zhuǎn)換的步驟,包 括:
[0021] 針對(duì)所述劃分節(jié)間后的二維樹(shù)木枝干骨架中的每一條二維骨架曲線,將該二維骨 架曲線上每一個(gè)控制點(diǎn)的y坐標(biāo)和Z坐標(biāo)的值進(jìn)行互換;
[0022] 根據(jù)所述二維骨架曲線的傾斜度對(duì)該二維骨架曲線進(jìn)行深度方向的增強(qiáng),得到深 度增強(qiáng)后的二維樹(shù)木枝干骨架;
[0023] 確定所述深度增強(qiáng)后的二維樹(shù)木枝干骨架的拓?fù)潢P(guān)系;
[0024] 根據(jù)所述拓?fù)潢P(guān)系對(duì)所述深度增強(qiáng)后的二維樹(shù)木枝干骨架進(jìn)行=維變換,得到= 維樹(shù)木枝干骨架。
[0025] 進(jìn)一步地,所述根據(jù)所述二維骨架曲線的傾斜度對(duì)該二維骨架曲線進(jìn)行深度方向 的增強(qiáng)的步驟,包括:
[0026] 根據(jù)第i條二維骨架曲線上第一個(gè)控制點(diǎn)Vk和最后一個(gè)控制點(diǎn)Vi滿(mǎn)取輔助點(diǎn) Vip,所述輔助點(diǎn)Vip的X坐標(biāo)和y坐標(biāo)與所述最后一個(gè)控制點(diǎn)V相同,Z坐標(biāo)與所述第一個(gè) 控制點(diǎn)Vi湘同,其中i為正整數(shù);
[0027] 當(dāng)向量巧^和向量巧^的夾角0滿(mǎn)足預(yù)設(shè)角度大小時(shí),則將所述第i條二維骨 架曲線上除第一個(gè)控制點(diǎn)外的所有控制點(diǎn)的坐標(biāo)值都乘W預(yù)設(shè)數(shù)值r。
[002引進(jìn)一步地,所述確定所述深度增強(qiáng)后的二維樹(shù)木枝干骨架的拓?fù)潢P(guān)系的步驟,包 括:
[0029] 針對(duì)所述深度增強(qiáng)后的二維樹(shù)木枝干骨架中除樹(shù)干類(lèi)型W外的每一條二維骨架 曲線,選取所述深度增強(qiáng)后的二維樹(shù)木枝干骨架中與該二維骨架曲線第一個(gè)控制點(diǎn)距離最 近的二維骨架曲線作為該二維骨架曲線的父枝條二維骨架曲線;
[0030] 選取所述父枝條二維骨架曲線上與該二維骨架曲線第一個(gè)控制點(diǎn)距離最近的控 制點(diǎn)作為該二維骨架曲線的著生點(diǎn)。
[0031] 進(jìn)一步地,所述根據(jù)所述拓?fù)潢P(guān)系對(duì)所述深度增強(qiáng)后的二維樹(shù)木枝干骨架進(jìn)行= 維變換的步驟,包括:
[0032] 從所述深度增強(qiáng)后的二維樹(shù)木枝干骨架中選取父枝條為樹(shù)干的二維骨架曲線,并 將得到的所述二維骨架曲線存入數(shù)據(jù)集DSi中;
[0033] 從所述數(shù)據(jù)集DSi中選取第一個(gè)控制點(diǎn)與樹(shù)干二維骨架曲線的第一個(gè)控制點(diǎn)最近 的第一二維骨架曲線,并存入數(shù)據(jù)集DSi_i中,同時(shí)將該第一二維骨架線從DSi中刪除;
[0034] 從所述數(shù)據(jù)集DSi中,再次選取第一個(gè)控制點(diǎn)與所述第一二維骨架曲線的第一個(gè) 控制點(diǎn)距離小于平均節(jié)間長(zhǎng)度f(wàn)lLength的第二二維骨架曲線,并存入數(shù)據(jù)集DSh中,同時(shí) 將該第二二維骨架線從DSi中刪除;
[0035] 針對(duì)所述數(shù)據(jù)集DSh中第i條二維骨架曲線,將所述第i條二維骨架曲線上除第 一個(gè)控制點(diǎn)外的控制點(diǎn)繞向量巧^旋轉(zhuǎn)iXfAngle度,其中,¥^為所述第i條二維骨架曲 線的第一個(gè)控制點(diǎn),Vi。為輔助點(diǎn),所述輔助點(diǎn)V1。的X、y分量值與Vk相同、Z分量值為Vk的Z分量值加a,a為預(yù)設(shè)常數(shù),fAngle= 360/Ni_i,Ni_i為數(shù)據(jù)集DSH的大小,i為正整數(shù);
[0036] 在所述深度增強(qiáng)后的二維樹(shù)木枝干骨架中查找所有父枝條為旋轉(zhuǎn)后的第i條二 維骨架曲線的二維骨架曲線,并將獲得的二維骨架曲線移動(dòng)到對(duì)應(yīng)的著生點(diǎn)的位置;
[0037] 清空所述數(shù)據(jù)集DSh,并從所述數(shù)據(jù)集DSi中未進(jìn)行旋轉(zhuǎn)的二維骨架曲線中重新 選取第一二維骨架線,直至所述數(shù)據(jù)集DSi成為空集為止。
[003引進(jìn)一步地,所述針對(duì)所述=維樹(shù)木枝干骨架中的每一條=維骨架曲線,生成=維 網(wǎng)格的步驟,包括:
[0039] 針對(duì)所述=維樹(shù)木枝干骨架中的第i條=維骨架曲線,獲得該第i條=維骨架曲 線的頂部半徑和底部半徑,其中,i為正整數(shù);
[0040] 根據(jù)所述第i條=維骨架曲線的頂部半徑和底部半徑,得到該第i條=維骨架曲 線每一個(gè)節(jié)間的節(jié)間半徑,并得到控制點(diǎn)半徑;
[0041] 根據(jù)所述節(jié)間半徑和控制點(diǎn)半徑生成所述第i條=維骨架曲線的=維網(wǎng)格。
[0042] 進(jìn)一步地,所述針對(duì)所述=維樹(shù)木枝干骨架中的第i條=維骨架曲線,獲得該第i 條=維骨架曲線的頂部半徑和底部半徑的步驟,包括:
[0043] 若所述第i條S維骨架曲線為一年生枝條,則該第i條S維骨架曲線的頂部半徑 為:
[0044] 地RadiuLt=地RadiuXfBLengthi/aBLength
[0045] 其中,地Radiu為預(yù)設(shè)一年生枝條頂部半徑基數(shù),巧Length;為該S維骨架曲線的 長(zhǎng)度,aBLength為所述S維樹(shù)木枝干骨架中全部一年生枝條S維骨架曲線的平均長(zhǎng)度;
[0046] 該=維骨架曲線的底部半徑為:
[0047] 地RadiuLb=地RadiuLtXk
[0048] 其中,k為預(yù)設(shè)常數(shù)。
[0049] 進(jìn)一步地,所述根據(jù)所述第i條=維骨架曲線的頂部半徑和底部半徑,得到該第i 條=維骨架曲線每一個(gè)節(jié)間的節(jié)間半徑,并得到控制點(diǎn)半徑的步驟,包括:
[0化0] 所述S維骨架曲線第m個(gè)節(jié)間的節(jié)間半徑為:
[0化1]iBRadiUim=地Radiuib_(地Radiu;b-pBRadiUit)/INsiXm[0化2] 其中,INd為所述第i條S維骨架曲線的節(jié)間數(shù);