本發(fā)明屬于計算機圖形學和模式識別相結合的交叉學科技術領域,具體涉及一種基于骨架的物體構件分解方法。
背景技術:
三維點云物體的構件分割與提取一直都是計算機圖形學和模式識別的一個重要研究領域。三維點云物體的構件分解作為點云處理的一部分,已經(jīng)作為圖形領域中的一個基本的課題,并且被廣泛應用在3d模型重建、簡化和壓縮上。
(1)基于邊的分割方法,①按照邊進行曲面擴張時方向不夠準確,容易按照錯誤方向進行延伸,同時還不能保證得到的邊界線形成封閉的邊緣,從而無法完成區(qū)域分割;②即使有些方法能夠很好的將模型表面進行區(qū)域分割,但是并不能保證分割后的某塊區(qū)域是一個有意義的構件。
(2)基于面的分割方法,種子點的選擇比較困難以及不同區(qū)域之間的邊界辨別比較困難。在基于面的區(qū)域生長算法中,很難判斷一系列種子中哪個更好,因而種子的選取是個很大的問題。而且種子的選擇不同,相應的分割結果也不同,同時該類方法和基于邊的方法都是關注于模型表面的分割,即使分割成不同區(qū)域,但不能保證分割后的區(qū)域是一個有意義的構件。
(3)基于聚類的方法,該類方法對于曲面類型較為明顯的曲面分塊存在一定的優(yōu)勢,但是對于一些粘連在一起的曲面,聚類方法不太容易辨別曲面的類型和數(shù)量,容易導致相鄰的不同類型曲面聚在一起。此外聚類后的分塊區(qū)域位于模型表面,而表面分塊并不能完全代表該分塊的視覺意義,達不到有模型意義部件的分解和提取。
(4)基于骨架的分割方法,是從模型內部分解骨架,然后根據(jù)骨架位置變換到模型表面對模型表面進行分解,雖然能夠大體分解出明顯符合視覺的子部分,但是缺少模型表面特征,對于分解后的子部分和主體連接處并不能很好滿足人的視覺要求,分解得到的模型構件連接處不夠準確。
總之,基于邊、面、聚類這三類方法從模型表面著手,分解后很可能只是一塊的曲面,從模型整體上看無法保證分解后的子部分是有意義的構件;而基于骨架的分解從模型內部著手,將模型空間結構進行分解,雖然從整體視覺上能夠將模型分解為有獨立的構件,但是缺乏模型表面特征信息,導致在分解后不同構件的連接細節(jié)處并不完全符合人的視覺,導致分解后的構件缺乏視覺意義。
技術實現(xiàn)要素:
本發(fā)明的目的是提供一種基于骨架的物體構件分解方法,解決了現(xiàn)有技術僅利用物體的相關特征進行物體的分解的問題。
本發(fā)明所采用的技術方案是,一種基于骨架的物體構件分解方法,具體按照以下步驟實施:
步驟1:對原始點云模型上的每個點建立k-dtree,求解k近鄰,將k鄰近點和該點自身采用最小二乘法擬合平面求得該點的法向量;然后采用鄰近點具有相似法向量方向的原則對點云模型上每個點的法向量方向進行歸一化處理,使得模型上每個點的法向量方向朝向模型外側;
步驟2:基于法向量反方向迭代收縮,并判斷每個點收縮停止的約束條件,最終得到物體的收縮點集,作為物體的近似骨架模型,為后一步骨架拓撲的求解奠定基礎;
步驟3:對收縮模型使用k-means聚類并求解聚類中心點,采用歐氏距離二次連接法對聚類中心點進行連接,進而建立拓撲圖,并對拓撲圖進行優(yōu)化處理;
步驟4:在骨架拓撲圖中求解分割點,在原始模型上求解脊谷點,然后結合分割點和脊谷點求解分割平面,最后依據(jù)分割平面使用區(qū)域增長將原始點云模型進行分解。
本發(fā)明的特點還在于:
步驟2中基于法向量反方向迭代收縮具體為:
步驟2.1:法向量計算
利用主元分析法計算點云的法向量,對于點云中每一點p,找到其k個鄰近數(shù)據(jù)點
其中,
通過奇異值分解對公式(1)中半正定的協(xié)方差矩陣m進行特征值分解,得到協(xié)方差矩陣m的特征值λ3>λ2>λ1>0,最小特征值λ1所對應的特征向量(nx,ny,nz)即為點p的法向量;
由于法向量的方向有二義性,所以對于點云中的每一點,利用k-d樹找出與點p最近的點q,如果np·nq≈-1,則將點p的法向量方向反轉;
步驟2.2:基于法向量的收縮
給定參數(shù)λ表示單位收縮步長,參數(shù)d表示圓柱體內點的個數(shù),參數(shù)r表示球形鄰域半徑;
在點云模型上任意選一點p,點p的法向量記做vp,點p將沿vp的反方向移動了λ,得到點p對應的新點p′,在點p′沿法向量反方向距離d處構造一個半徑為r的球體,將該球體作為探測器,然后檢查該球體探測器里是否包含點,若不含點或者含有的點的個數(shù)遠小于參數(shù)num,則表明點p′還未碰撞到自身法向量反方向上的點集,即點p還沒有到達收縮成功的位置,下次迭代將繼續(xù)收縮;若包含的點的個數(shù)接近點云平均密度avg,則該點已經(jīng)收縮成功,下次迭代不再參與收縮;
步驟2.3:對整體點云模型進行上述的操作后,每一個點都將沿法向量反方向移動了λ,求解點云模型上某點p在一次迭代后的新點p′的坐標(x′0,y′0,z′0):
根據(jù)點p坐標(x0,y0,z0)和點p的法向量vp,首先求解過點p、法向量為vp的直線方程l,然后在根據(jù)p′在直線l上,且點p和點p′之間的距離等于λ;
p′的坐標為:
x′0=t×a+x0
y′0=t×b+y0
z′0=t×c+z0
其中,
重復上述求解過程,循環(huán)求解點云模型上每一個點迭代一次后的p′點;
由上述部分可以得到點云模型的收縮結果。
步驟2.2中球體探測器的構造具體為:
在點p′對應的法向量vp的反向延長線上求得球心點o,其中點p′到點o的距離記做d(p′,o)=d,則由球心o和半徑r構成球體探測器,
過p′點,法向量vp(a,b,c)的直線方程l如下:
求解球心o點(x1,y1,z1):
p′點到o點的距離公式
(x1-x′0)2+(y1-y′0)2+(z1-z′0)2=(d(p′,o))2(3)
由公式(2)和公式(3)聯(lián)立求解得到參數(shù)t
求得球心o的坐標為:
x1=t×a+x′0
y1=t×b+y′0
z1=t×c+z′0。
步驟2.2中判斷點是否在球體探測器內部,具體為:
模型上一點記做a(xa,ya,za),根據(jù)空間兩點之間歐氏距離可知:點a到球心o的距離為:
如果dis≤r,則a點屬于當前球體探測器內。
步驟3具體為:
步驟3.1:基于聚類的骨架點獲取
通過利用k-means聚類算法針對收縮后的模型獲取局部最優(yōu)切分點集每一塊局部最優(yōu)切分點集近似成一小段圓柱體,該圓柱體的方向基本上和對應模型的骨架線方向一致,求取該局部最優(yōu)切分點集的重心作為該段模型的骨架點;
步驟3.2:骨架點拓撲結構建立
通過計算歐氏距離尋找每一個骨架點的最近點和次近點,并根據(jù)最近點和次近點距離與次近點和當前骨架點距離來判斷這兩點和當前骨架點的位置關系,如果最近點和次近點距離大于次近點和當前骨架點距離,則最近點和次近點位于參考點兩側,否則最近點與次近點位于參考點同側;
在確定連接方式后還將驗證待連接的兩個骨架點之間是否是非跨區(qū)域,以待連接的兩個點的連線作為軸,給定半徑r構造圓柱體,結合原始模型表面點集,判斷該圓柱體內是否包含模型表面點,若不包含,則說明待連接的兩個點是非跨區(qū)域的,就可以將待連接點進行連接并更新連接點的度和連接點集合。
步驟3中對拓撲圖進行優(yōu)化處理,具體為:
①獨立骨架處理
合并獨立分支骨架步驟為:
步驟a:在整個骨架圖集合中尋找獨立分支骨架線,獨立骨架線為兩個端點之間的連接點都是度為2的普通連接點;
步驟b:在獨立分支骨架點以外的骨架點集里分別求解距離獨立分支骨架線兩個端點最近的兩個點;
步驟c:比較這兩個點到對應獨立分支骨架線端點的距離,選擇距離較小的那個點和它對應的端點相連接,更新端點的度和連接點集合;
步驟d:將模型原始骨架中獨立分支骨架線部分合并到主體骨架線上;
②骨架環(huán)路處理
步驟a:刪除所有頂點度小于等于1的點以及相關的邊,并將另外與這些邊相關的其它點的度減1;
步驟b:將度為1的頂點排入隊列,并從該隊列中取出一個頂點重復步驟a;如果最終還有未刪除的頂點則說明存在環(huán),否則說明沒有環(huán);
步驟c:根據(jù)上述找到的環(huán)路骨架點集合,結合原始骨架拓撲,首先確定分支骨架和環(huán)路骨架的外連接點,外連接點一般是分支骨架末端分叉點的前一個連接點,然后對環(huán)路骨架點集求解重心,最后用重心替換所有的環(huán)路骨架點集,將重心直接和外連接點相連;
③平面骨架處理
根據(jù)平面點集分散性,在初始骨架拓撲圖中優(yōu)先從度為3的點開始尋找可能的平面點,選定某個度為3的點作為起始點,通過起始點和起始點周圍的連接點分別計算它們的法向量,判斷它們的法向量方向是否相同,若相同則說明該起始點很大可能是平面骨架上的點,然后以此起始點作為種子點,進行區(qū)域增長標記周圍點是否和種子點共面,判斷條件:條件1:待標記點的法向量和種子點法向量相同;條件2:已標記點之間是非跨區(qū)域的;上述兩個條件同時滿足時,已標記點屬于同一平面;
對于同一標記號的平面骨架點集,根據(jù)骨架拓撲關系尋找與該類標記的平面骨架點集相連接的其它類骨架點,將其它類骨架點作為平面骨架點集的分支部分,最后求得平面點集的重心,然后將重心和這些分支部分連接。
步驟4具體為:
步驟4.1:骨架拓撲結構圖中初始分割點的求取
遍歷整個骨架點,從端點的下一個點開始,假設端點為pi點,則pi點的前一個點為pi-1,后一個點為pi+1,構造向量
步驟4.2:拓撲圖中最終分割點的選取
對于分支骨架上有多個初始分割點,從該分支骨架的分叉點處開始尋找,找第一個初始分割點作為分割點;對于分支骨架上剛好只有一個初始分割點,則我們就選定該初始分割點作為分割點;對于分支骨架上沒有一個初始分割點,則選定該分叉點前一個點作為分割點;這時即可將骨架拓撲圖中的初始分割點進行篩選后留下最終的分割點;
步驟4.3:分割面的確定
首先在物體模型表面上標記潛在的脊谷點,然后在每個潛在的脊谷點處構造反映該點的局部幾何特征信息的三角網(wǎng)格,將該三角網(wǎng)格近似作為點的delaunay鄰域,最后基于三角網(wǎng)格信息計算潛在脊谷點的主曲率和主方向,利用離散計算和線性差值的方法提取脊谷特征點;然后,基于骨架分割點采用k近鄰法求解骨架分割點周圍的脊點和谷點;最后,利用骨架分割點和它周圍的k個鄰近脊、谷點擬合成平面,最后根據(jù)骨架分割點所在位置骨架線的方向向量對擬合平面進行調整,得到更好的分割平面;
步驟4.4:融合骨架分割點和脊谷點的模型分解
根據(jù)分割點尋找對應的端點,通過端點和分割平面確定分解構件和分割平面空間位置,也就是分割平面的正方向,通過歐氏距離求解分割點最近的構件上的一點,然后以該點開始按照分割平面正方向進行區(qū)域增長,直到增長結束,分解的構件同時也將標記完成。
本發(fā)明的有益效果是:本發(fā)明一種基于骨架的物體構件分解方法,從模型內外兩個方面對模型進行有意義構件提取和分解,內部通過分解骨架,首先得到滿足人類視覺的骨架分支,外部通過計算模型表面的特征信息,最后用模型表面特征信息來輔助骨架分支映射到模型表面進行分解,得到有意義的模型構件部分。并且解決了現(xiàn)有技術僅利用物體的相關特征進行物體的分解的問題。
附圖說明
圖1是本發(fā)明物體構件分解方法中球體探測器的構造圖;
圖2是本發(fā)明物體構件分解方法中點云模型的收縮結果圖;
圖3是本發(fā)明物體構件分解方法中基于聚類的骨架點獲取結果圖;
圖4是本發(fā)明物體構件分解方法中最近點和次近點的位置關系圖;
圖5是本發(fā)明物體構件分解方法中骨架線的獲取結果圖;
圖6是本發(fā)明物體構件分解方法中獨立分支骨架線部分合并到主體骨架線的過程圖;
圖7是本發(fā)明物體構件分解方法中尋找骨架拓撲圖中環(huán)路的過程圖;
圖8是本發(fā)明物體構件分解方法中分支骨架和環(huán)路骨架的外連接點;
圖9是本發(fā)明物體構件分解方法中重心直接和外連接點相連示意圖;
圖10是本發(fā)明物體構件分解方法中消除環(huán)路后的效果圖;
圖11是本發(fā)明物體構件分解方法中平面骨架處理的效果圖;
圖12是本發(fā)明物體構件分解方法中分割點確定效果圖;
圖13是本發(fā)明物體構件分解方法中分割平面的法向量效果圖。
具體實施方式
下面結合附圖和具體實施方式對本發(fā)明進行詳細說明。
本發(fā)明一種基于骨架的物體構件分解方法,具體按照以下步驟實施:
步驟1:對原始點云模型上的每個點建立k-dtree,求解k近鄰,將k鄰近點和該點自身采用最小二乘法擬合平面求得該點的法向量;然后采用鄰近點具有相似法向量方向的原則對點云模型上每個點的法向量方向進行歸一化處理,使得模型上每個點的法向量方向朝向模型外側;
步驟2:基于法向量反方向迭代收縮,并判斷每個點收縮停止的約束條件,最終得到物體的收縮點集,作為物體的近似骨架模型,為后一步骨架拓撲的求解奠定基礎;
基于法向量反方向迭代收縮具體為:
步驟2.1:法向量計算
利用主元分析法(principalcomponentanalysis,pca)計算點云的法向量。對于點云中每一點p,找到其k個鄰近數(shù)據(jù)點
其中,
通過奇異值分解(sigularvaluedecomposition,svd)對公式(1)中半正定的協(xié)方差矩陣m進行特征值分解,得到協(xié)方差矩陣m的特征值λ3>λ2>λ1>0,最小特征值λ1所對應的特征向量(nx,ny,nz)即為點p的法向量。由于法向量的方向有二義性,所以對于點云中的每一點,利用k-d樹找出與點p最近的點q,如果np·nq≈-1,則將點p的法向量方向反轉。
步驟2.2:基于法向量的收縮
給定參數(shù)λ表示單位收縮步長,參數(shù)d表示圓柱體內點的個數(shù),參數(shù)r表示球形鄰域半徑;
在點云模型上任意選一點p,點p的法向量記做vp,點p將沿vp的反方向移動了λ,得到點p對應的新點p′,在點p′沿法向量反方向距離d處構造一個半徑為r的球體,將該球體作為探測器,然后檢查該球體探測器里是否包含點,若不含點或者含有的點的個數(shù)遠小于參數(shù)num則表明點p′還未碰撞到自身法向量反方向上的點集,也就是說明點p還沒有到達收縮成功的位置,下次迭代將繼續(xù)收縮;若包含的點的個數(shù)接近點云平均密度avg則說明該點已經(jīng)收縮成功,下次迭代不再參與收縮。
球體探測器的構造具體為:
在點p′對應的法向量vp的反向延長線上求得球心點o,p′到點o的距離記做d(p′,o)=d,則由球心o和半徑r(其中r是手動輸入,r≤d)構成球體探測器,如圖1所示,
過p′點,法向量vp(a,b,c)的直線方程l如下:
求解球心o點(x1,y1,z1):
p′點到o點的距離公式
(x1-x′0)2+(y1-y′0)2+(z1-z′0)2=(d(p′,o))2(3)
由公式(2)和公式(3)聯(lián)立求解得到參數(shù)t
求得球心o的坐標為:
x1=t×a+x′0
y1=t×b+y′0
z1=t×c+z′0
判斷點是否在球體探測器內部,具體為:
為了判斷點云模型上的某一點是否位于當前球體探測器的內部,只需要模型上的點到球心o的距離小于等于球體半徑r:假設,模型上一點記做a(xa,ya,za),根據(jù)空間兩點之間歐氏距離可知:點a到球心o的距離為:
如果dis≤r,則證明a點屬于當前球體探測器內。
步驟2.3:對整體點云模型進行上述的操作后,每一個點都將沿法向量反方向移動了λ,然后求解點云模型上某點p在一次迭代后的新點p′的坐標(x′0,y′0,z′0)。
求解過程如下:根據(jù)點p坐標(x0,y0,z0)和點p的方向量vp,首先求解過點p,法向量為vp的直線方程l,然后在根據(jù)p′在直線l上,且點p和點p′之間的距離等于λ。
p′點的坐標計算過程和(1)中的q1點的坐標求解過程一樣:直線方程l公式為(2),其中d(p,p′)=λ。
求得p′的坐標為:
x′0=t×a+x0
y′0=t×b+y0
z′0=t×c+z0
重復上述求解過程,循環(huán)求解點云模型上每一個點迭代一次后的p′點。
由上述部分可以得到點云模型的收縮結果,如圖2所示。
步驟3:對收縮模型使用k-means聚類并求解聚類中心點,采用歐氏距離二次連接法對聚類中心點進行連接,進而建立拓撲圖,并對拓撲圖進行優(yōu)化處理;
步驟3.1:基于聚類的骨架點獲取
通過利用k-means聚類算法針對收縮后的模型獲取局部最優(yōu)切分點集每一塊局部最優(yōu)切分點集近似成一小段圓柱體,該圓柱體的方向基本上和對應模型的骨架線方向一致,所以求取該局部最優(yōu)切分點集的重心作為該段模型的骨架點。如圖3所示。
步驟3.2:骨架點拓撲結構建立
通過計算歐氏距離尋找每一個骨架點的最近點和次近點,并根據(jù)最近點和次近點距離與次近點和當前骨架點距離來判斷這兩點和當前骨架點的位置關系,如果最近點和次近點距離大于次近點和當前骨架點距離,則最近點和次近點位于參考點兩側,連接方式如圖4(a)所示,否則最近點與次近點位于參考點同側,連接方式如圖4(b)所示。
在確定連接方式后還將驗證待連接的兩個骨架點之間是否是非跨區(qū)域,以待連接的兩個點的連線作為軸,給定半徑r構造圓柱體,結合原始模型表面點集,判斷該圓柱體內是否包含模型表面點,若不包含,則說明待連接的兩個點是非跨區(qū)域的,就可以將待連接點進行連接并更新連接點的度和連接點集合,最終形成了如圖5所示的骨架線。
對拓撲圖進行優(yōu)化處理,具體為:
①獨立骨架處理
合并獨立分支骨架步驟為:
步驟a:在整個骨架圖集合中尋找獨立分支骨架線,獨立骨架線為兩個端點之間的連接點都是度為2的普通連接點;
步驟b:在獨立分支骨架點以外的骨架點集里分別求解距離獨立分支骨架線兩個端點最近的兩個點;
步驟c:比較這兩個點到對應獨立分支骨架線端點的距離,選擇距離較小的那個點和它對應的端點相連接,更新端點的度和連接點集合;
步驟d:將模型原始骨架中獨立分支骨架線部分合并到主體骨架線上,合并效果如圖6所示;
②骨架環(huán)路處理
在骨架拓撲圖中,步驟a:刪除所有頂點度小于等于1的點以及相關的邊,并將另外與這些邊相關的其它點的度減1;
步驟b:將度為1的頂點排入隊列,并從該隊列中取出一個頂點重復步驟a;如果最終還有未刪除的頂點則說明存在環(huán),否則說明沒有環(huán);尋找拓撲圖中環(huán)路的過程如圖7所示。
步驟c:根據(jù)上述找到的環(huán)路骨架點集合,結合原始骨架拓撲,首先確定分支骨架和環(huán)路骨架的外連接點,如圖8,外連接點一般是分支骨架末端分叉點的前一個連接點,然后對環(huán)路骨架點集求解重心,最后用重心替換所有的環(huán)路骨架點集,將重心直接和外連接點相連,連接過程如圖9所示。由此,消除環(huán)路后的結果如圖10所示。
③平面骨架處理
根據(jù)平面點集分散性,在初始骨架拓撲圖中我們優(yōu)先從度為3的點開始尋找可能的平面點,選定某個度為3的點作為起始點,通過起始點和起始點周圍的連接點分別計算它們的法向量(通過向量叉乘得到某點法向量),判斷它們的法向量方向是否相同(同向或反向),若相同則說明該起始點很大可能是平面骨架上的點,接下來以此起始點作為種子點,進行區(qū)域增長標記周圍點是否和種子點共面,判斷條件:條件1:待標記點的法向量和種子點法向量相同;條件2:已標記點之間是非跨區(qū)域的。這兩個條件必須同時滿足,保證已標記點屬于同一平面。
對于同一標記號的平面骨架點集,根據(jù)骨架拓撲關系尋找與該類標記的平面骨架點集相連接的其它類骨架點,將其它類骨架點作為平面骨架點集的分支部分,最后求得平面點集的重心,然后將重心和這些分支部分連接。如圖11所示是桌子模型的平面骨架處理結果。
步驟4:在骨架拓撲圖中求解分割點,在原始模型上求解脊谷點,然后結合分割點和脊谷點求解分割平面,最后依據(jù)分割平面使用區(qū)域增長將原始點云模型進行分解。
步驟4.1:骨架拓撲結構圖中初始分割點的求取
遍歷整個骨架點,從端點的下一個點開始,假設端點為pi點,則pi點的前一個點為pi-1,后一個點為pi+1,構造向量
步驟4.2:拓撲圖中最終分割點的選取
對于分支骨架上有多個初始分割點,從該分支骨架的分叉點處開始尋找,找第一個初始分割點作為分割點;對于分支骨架上剛好只有一個初始分割點,則我們就選定該初始分割點作為分割點;對于分支骨架上沒有一個初始分割點,則選定該分叉點前一個點作為分割點;這時即可將骨架拓撲圖中的初始分割點進行篩選后留下最終的分割點;
步驟4.3:分割面的確定
首先在物體模型表面上標記潛在的脊谷點,然后在每個潛在的脊谷點處構造反映該點的局部幾何特征信息的三角網(wǎng)格,將該三角網(wǎng)格近似作為點的delaunay鄰域,最后基于三角網(wǎng)格信息計算潛在脊谷點的主曲率和主方向,利用離散計算和線性差值的方法提取脊谷特征點。然后,基于骨架分割點采用k近鄰法求解骨架分割點周圍的脊點和谷點。最后,利用骨架分割點和它周圍的k個鄰近脊、谷點擬合成平面,最后根據(jù)骨架分割點所在位置骨架線的方向向量對擬合平面進行調整,得到更好的分割平面,圖13給出了hand模型的分割平面的法向。
步驟4.4:融合骨架分割點和脊谷點的模型分解
根據(jù)分割點尋找對應的端點,通過端點和分割平面確定分解構件和分割平面空間位置,也就是分割平面的正方向,通過歐氏距離求解分割點最近的構件上的一點,然后以該點開始按照分割平面正方向進行區(qū)域增長,直到增長結束,分解的構件同時也將標記完成。
在區(qū)域標記的過程中我們是從某個骨架分支端點到分割點逐段進行區(qū)域標記。每次標記骨架線段周圍表面的點,沿著分支骨架到分割平面處。在沿途區(qū)域標記的過程中由于位于分割平面正方向一側的點很多,有可能除了屬于當前分支骨架區(qū)域內的點之外,還有其它分支骨架區(qū)域的點,所以在每段骨架區(qū)域標記后,我們以該段骨架線段為法向量,過骨架點做平面,然后將當前骨架段對應周圍標記點在平面上做投影,最后求這些投影區(qū)域的最大外接圓半徑,將該半徑作為下一段骨架區(qū)域標記的約束,這樣保證下一段骨架進行區(qū)域標記的點距離骨架線段不能偏離半徑太遠。
本發(fā)明從模型內外兩個方面對模型進行有意義構件提取和分解,內部通過分解骨架,首先得到滿足人類視覺的骨架分支,外部通過計算模型表面的特征信息,最后用模型表面特征信息來輔助骨架分支映射到模型表面進行分解,得到有意義的模型構件部分。