張 利,張 昊
(浙江工業大學 特種裝備制造與先進加工技術教育部/浙江省重點實驗室,杭州 310023)
三維建模在計算機圖形學領域中具有極為重要的價值,到目前為止,三維建模軟件性能已經十分強大.然而大多數三維建模軟件專業性強,操作復雜,對沒有專業知識的用戶來說并不友好.而繪制圖像要容易得多,大多用戶都能通過圖像來表達想法.
當前已存在許多基于圖像的三維建模系統和方法.最典型和經典的是Igarashi等提出的Teddy[1]方法,根據圖形骨架到邊緣的距離計算三維空間點,由于此方法采用的是圓形的膨脹曲線,得到的三維模型橫截面只能是圓形;此外,還有Zeleznik等提出的SKETCH[2]、Levi等提出的ArtiSketch[3]等三維建模系統和方法.這些建模方法往往在三維空間中完成,創建一個粗糙的三維模型,通過剪切、合并等操作為模型添加細節.然而,要從單幅圖像中創建三維模型限制了這些操作.通過單幅圖像創建三維模型主要問題在于如何解釋圖像、推斷隱藏部分以及模型深度信息計算.Cordier[4]等提出了一種通過三維模型在二維平面上的投影來計算空間中的點位置的方法;此外,他們還提出了一種從存在模糊性的草圖中重建三維模型的算法[5],這些建模方法得到的三維模型橫截面都是固定的形狀,不利于體現用戶建模的個性;Even E[6]等提出了一種從側視草圖中構建三維模型的算法,通過將手繪草圖離散成各個循環的方式來構建三維模型和確定各部分深度信息;Saulo Ramos[7]等改進了Even E[6]的方法,將草圖附近3D Hermitian數據的生成與識別和完成草圖曲線的方法相結合,然后使用Hermitian徑向基函數隱式曲面生成恰當的三維模型,達到捕獲草圖上更多細節的作用.繆永偉[8]等提出了一種基于圖像對稱性的花朵模型重建方法,并用圓錐擬合的方法改進該方法[9];他們還提出了一種由二維線畫圖生成三維復雜零部件的三維建模方法[10].此外,Lee[11]等提出了利用二維線畫圖有效生成三維復雜多面體物體的方法,張淑軍[12]等提出一種“二維草圖自動生長技術”的建模方法,R.Suzuki[13]等提出了一種多人協作完成三維建模的方法.上述生成三維模型的方法以旋轉[4,5]或膨脹[6,7]算法居多,用戶無法隨意設計三維模型橫截面形狀,導致實際建立的模型與用戶的設計有一定的差距.本文通過輔助曲線獲取模型深度信息,進而生成三維模型,用戶不會受到橫截面形狀的約束,從而能生成的三維模型.
本文的主要貢獻是提出一種通過尋找圖形對稱關系的基礎上添加輔助曲線的圖像三維建模的方法,生成的模型真實度和自由度有較大的提高.與以往沿著二維骨架對構造曲線進行廣義旋轉或膨脹得到模型表面不同,本方法以輔助曲線旋轉、移動為基礎得到模型表面.用戶在繪制平面(z=0)繪制或導入圖形,該圖形是三維模型在繪制平面上的投影,這意

圖1 算法流程Fig.1 Algorithm flow
味著三維模型上點的x和y坐標已知,只需計算點的z坐標.離散、補全曲線,得到的特殊點和圖形中的轉折點為特征點,計算曲線的對稱關系,這將在第2、3節中介紹;通過添加對稱面的方式來計算各特征點的三維坐標,這將在第4節中解釋;得到特征點的三維坐標之后,根據輔助曲線來創建模型,這將在第5節中解釋.算法流程如圖1所示.
用戶繪制或導入的矢量化之后的構造曲線[14](若存在相對于繪制平面對稱部分,只需標記)即三維模型在繪制平面上的投影.直接使用二維圖像進行三維建模存在一定難度,因此首先離散、補全二值化后的圖像,之后繪制離散后各部分圖像的輔助曲線.輸入的圖形由構造曲線Γ1和輔助曲線Γ2組成.
繪制完成后,我們還需要給定一個三維模型的對稱平面,該平面與繪制平面不平行.
曲線離散的依據是三種類型的特殊點[4,5]:T形結點、十字交點和尖點.T形結點是兩條曲線交點的一種,定義為一條構造曲線與另一條構造曲線交叉時,一條構造曲線突然被截斷而得到的交點,通常成對出現;十字交點定義為兩曲線交錯得到的交點,是兩條曲線交點中最常見的一種;尖點是兩個曲面相切所產生的切點,通常也成對出現.
本算法在構建模型時,各構造曲線需要封閉,因此需要將離散之后的構造曲線補全.構造曲線的集合為{Γ1,1,Γ1,2,…,Γ1,n}.檢查各構造曲線是否閉合,將未閉合的曲線補全成閉合曲線,補充曲線的集合設為{Γ1,1′,Γ1,2′,…,Γ1,n′} .每一構造曲線都有對應的輔助曲線.若該構造曲線已閉合,則補充曲線長度為0.參考Karpenko和Hughes[2]的算法,完成隱藏輪廓的補全,即將輸入曲線的端點互相連接成閉合曲線,補充曲線為二次Bezier曲線,該算法旨在通過找到其遮擋部分來重建完整的輪廓.重建得到的構造曲線Γ1,i與補充曲線Γ1,i′仍在同一水平面上.對各種特殊點之間的補充曲線進行說明:
1)對于兩個T形結點之間:計算兩個T形結點處的法向量,根據兩個T形結點和法向量方向得到一個交點K,以上三點將作為控制點,繪制二次Bezier曲線Si.
2)對于兩個尖點之間:計算兩個尖點的切線向量的方向,并將兩切線向量以兩切點連線為對稱軸進行對稱,以對稱后兩切線向量的交點K和兩個尖點作為控制點,繪制二次Bezier曲線.
3)對于一個T形結點和一個尖點之間,類似于文獻[4]在本文中我們不考慮T形結點和尖點之間隱藏輪廓的重建.
4)對于兩個十字交點之間:無需進行補充曲線,因為此時兩條構造曲線是完整的.
構造曲線Γ1,i和補充曲線Γ1,i′一一對應,得到封閉的構造曲線.另外,補充完之后的構造曲線都是Jordan曲線,不存在自相交的情況,防止對建模產生影響.
尋找構造曲線的對稱關系,本質上是尋找構造曲線的對稱點,這是本方法中的一個難點.特征點由構造曲線上的特殊點和圖形轉折點組成.將補充完的構造曲線Γ1分成互對稱曲線對集合Γ1,a、自對稱曲線集合Γ1,b和一般曲線集合Γ1,c.在尋找對稱關系之前,我們需要找到曲線上的轉折點.
將單位圓的圓心放在構造曲線上,順著曲線方向移動.設置圓心角閾值,記錄構造曲線和圓心之間的圓心角,若圓心角的度數小于該閾值,則將此時圓心的坐標記錄下來,將其視為轉折點;Ji若某一段曲線內有數個點符合條件,則只將首尾兩個符合要求的點視為轉折點而忽略中間的點.與之前得到的T形結點JT、十字交點JX、尖點JX相結合,得到函數圖像的特征點集PA.與已有的方法相比,本方法點的數量更少,計算更加便捷.

移動對稱,即一條封閉曲線可在某一方向上移動一定距離來與另一封閉曲線重合.將每條曲線上的特征點依次連接,計算各連接線的斜率,按特征點的順序,比較兩條連接線的斜率.設置一個閾值范圍,若兩條連接線的斜率比值在閾值范圍內,這兩條線可視為相互平行,并調整頂點位置使兩條線平行,繼續比較下一對連接線.滿足第一個條件的兩條曲線可進行第二步,將符合第一個條件的曲線上特征點按編號對應連接,設置一個閾值范圍,若兩條連接線斜率比值在閾值范圍內,證明這兩條連接線相互平行,同樣調整點的位置使兩條線平行,繼續比較下一對連接線;否則證明這兩條曲線不是移動對稱的關系.大部分特征點對都符合要求則說明兩條曲線互為移動對稱(比例可以根據用戶的設置修改,默認為80%).遍歷滿足第一個條件的曲線對,符合第二個條件的即互為移動對稱關系.此方法避免了各個特征點連線都平行,但兩條曲線不對稱的情況,也避免了一個特征點對應另一部分圖形的多個特征點的情況.
鏡像對稱,即一條封閉曲線可通過鏡像來與另一封閉曲線重合.將同一組構造曲線上的特征點根據編號依次連接,取兩條曲線進行比較,連接兩條曲線中p1和p1′、p2和pm′ (m為特征點個數),比較兩條連線的斜率,設定一個閾值范圍,若斜率比值在閾值范圍之內,取兩條連線的中點,連接這兩個中點得到對稱軸;再連接兩條曲線的下一組特征點,將此連接線的斜率與之前連線的斜率相比較,若斜率比值在閾值范圍之內,則調整比較點的位置使兩條連接線平行.取連接線中點,若該點在剛剛得到的對稱軸上,則繼續,否則停止,并進行下一對曲線的比較.這兩條曲線不對稱.遍歷所有特征點都符合要求,則證明這兩條曲線符合鏡像對稱條件,此時這一對曲線不再與其它曲線進行鏡像對稱比較.這樣做防止了連線平行但是中點不在對稱軸上或連線中點在對稱軸上,但連線不平行的情況.
在我們繪制的圖像中,有可能存在多條構造曲線互為移動對稱的情況.我們使用上述的方法可能會得到多個相互對稱的曲線.更特殊的,如果一條曲線既有平移對稱關系的曲線,又有鏡像對稱關系的曲線,則這些的曲線互為對稱關系.另外,在這里我們不考慮旋轉之后的對稱關系.
得到互對稱曲線后,剩下的曲線中可能存在一部分自對稱的曲線.根據3.1得到的特征點,以縱坐標最大的一個特征點為起始點(點p0),按照曲線的軌跡,逆時針、順時針方向將曲線上的特征點依次標號(1、-1、2、-2 …)其中逆時針方向為正.自對稱曲線的算法與鏡像對稱的算法類似,得到自對稱曲線后剩余的為非對稱曲線.
經過以上的步驟,得到互對稱曲線對、自對稱曲線和非對稱曲線.

圖2 互對稱三維坐標計算Fig.2 Mutual symmetric three- dimensional coordinate calculating
在第3節中,計算了閉合曲線之間的對稱關系,這一節要利用對稱關系來計算圖像在三維空間的位置.在計算對稱關系的過程中使用同一個對稱平面P.

M·(vi+v′i)=0
(1)
M×(vi-vi′)=0
(2)
經過推導得到等式(3)、(4)、(5)、(6).
xM(xi+xi′)+yM(yi+yi′)+zM(zi+zi′)=0
(3)
yM(zi-zi′)-zM(yi-yi′)=0
(4)
zM(xi-xi′)-xM(zi-zi′)=0
(5)
xM(yi-yi′)-yM(xi-xi′)=0
(6)
由于需要計算的是z坐標,而x、y坐標已知,故忽略等式(6),只保留等式(3)、(4)、(5).根據等式(3)、(4),推導出zi和zi′:
(7)
(8)
同樣也可以根據等式(3)、(5)來推導zi和zi′的值:
(9)
(10)
若點vi和vi′重合,即這兩個點位于平面P上,則該點的z坐標如等式(11)所示:
(11)
當且僅當zM不為0,且等式(12)成立時,以上zi值的計算才是可行的.
(12)
其中向量M中zM的賦值,對于建模結果存在影響:較小的zM值使得對稱面更接近于豎直,空間中兩對稱點的距離相對較大;較大的zM值則相反.

圖3 自對稱三維坐標計算Fig.3 Self symmetric three- dimensional coordinate calculating
在尋找對稱關系的計算中,我們已經得到了自對稱曲線的對稱軸,并將起始特征點設置為點p0,逆時針、順時針方向上的特征點分別為vj(xj,yj,zj),vj′(xj′,yj′,zj′).與互對稱中相似,如圖3所示.經過推導,得到zj和zj′的值:
(13)
(14)
同樣,若點vj和vj′重合,則該點的z坐標如等式(15)所示:
(15)
當且僅當zM的值不為0,且等式(16)成立時,zj值的計算才是可行的.
(16)
對于沒有對稱圖像的一般曲線,它位于對稱平面上,z坐標的計算方式如等式(17)所示:
(17)
對于每一個特征點,根據第4節得到深度信息得到三維構造曲線.文獻[15]等提出的在兩條構造曲線的基礎上增加一對非對稱一般曲線作為構造曲線的方法,模型的每一部分將根據這四條曲線得到.在本文中,參考文獻[16],在兩條構造曲線的基礎上繪制一對輔助曲線tu,tu的兩個端點分別在兩條構造曲線上.將tu的兩個端點p0(x0,y0,0)pn(xn,yn,0)沿構造曲線的方向移動,特征點坐標定義為:
(18)
(19)
其中,移動前的特征點p坐標為(x,y,0),移動后輔助曲線tu′的兩端點坐標分別為p0′(x0′,y0′,0)、pn′(xn′,yn′,0),特征點坐標為p′(x′,y′,0).根據等式(18)(19)可推導出特征點p的坐標值,當且僅當xn≠x0且yn≠y0時,等式(20)成立.
(20)
此時輔助曲線的特征點和構造曲線位于同一平面.對輔助曲線進行旋轉,以p0、pn的連線為軸,旋轉輔助曲線得到模型深度信息.設旋轉前曲線上點為p(x,y,0),旋轉后曲線上點為p′(x′,y′,z′),p0、pn的連線為l=f(x,y),點p到l的最小距離點為pmin,最小距離為d,則點p坐標為:
(21)

圖4 三維模型組合Fig.4 Three-dimensional model combination
以構造曲線為軌跡,將旋轉后的輔助曲線進行掃掠創建三維模型.若使用交互計算深度信息,這將增加一個操作步驟.這里依據構造曲線間的深度關系組合三維模型,得到的三維模型是各部分模型的并集.對于兩個尖點間的構造曲線,構造曲線I補充曲線的中點m與構造曲線II相接觸,如圖4(a)所示.對于兩個T形結點或者兩個十字交點之間的部分構造曲線,以構造曲線I上的點n作為定位點,構造曲線I與構造曲線II創建的三維模型基準平面為同一個,如圖4(b)所示.
本文提出的算法在Mac OS系統上利用JavaScript實現.在計算機或移動設備上繪制手繪圖形以及輔助曲線,或導入二維圖形并繪制輔助曲線(若未繪制輔助曲線,則該部分的橫截面按照默認輔助曲線進行三維建模),完成后將繪制的圖像傳輸到建模軟件中,之后建模軟件自動建模.

圖5 建模案例Fig.5 Case of modeling
為了檢驗本文方法的易用性,用戶了解基本操作之后在設備上繪制圖像.圖5第一行是用戶輸入的圖形,其中輔助曲線用虛線來表示,所有曲線都在同一平面上;圖5第2、3行為計算建模后得到的三維模型不同角度的視圖.使用本文中的方法可以構建出Teddy方法生成的模型,只需要將輔助曲線設置成圓形,如圖5(a)的模型;圖5(b)-圖5(e)是用戶添加輔助曲線后得到的三維模型.圖5(a)中構造曲線為一對互對稱曲線(把手)和一條自對稱曲線(瓶身),圖5(b)-圖5(e)中構造曲線存在互對稱曲線、自對稱曲線和一般曲線,以圖5(c)中的魚為例,魚的腹鰭為互對稱曲線(另一半腹鰭未畫出),魚頭、魚身、魚尾是自對稱曲線,背鰭是一般曲線.
值得一提的是,本文使用輔助曲線來控制模型形狀,能夠生成更復雜、自由度更高的復雜模型,每部分的形狀不必受限于規定的橫截面形狀.以圖5(e)的鏟子模型為例,圖6(b)、(c)、(d)分別是使用文獻[7,12]的方法與使用本文的方法構建的模型.與圖6(d)所示三維模型相比,圖6(b)中所示的模型橫截面形狀為圓,與用戶的構思差距較大;圖6(c)增加了一些真實感,然而鏟子的鏟面沒有創建出來.可以看出,本文的方法創建的模型準確度更高,并具有更高的自由度.
該方法仍然存在一些不足.首先,在尋找圖形對稱關系時依賴圖形之間的連接,若圖形之間存在不相互連接的情況,組合模型的過程中各部分圖形間的位置關系無法確定.其次,對于輸入的圖像,以模型的主視圖或側視圖較為合適.輸入圖像的視角若過于傾斜,將有可能導致系統在判斷構造曲線上特殊點種類以及構造曲線對稱關系時得到錯誤結果,從而使生成的模型出現錯位的現象.再次,創建的模型可直接用于對精度要求不那么高的行業,構建模型的尺寸較小,而對那些對高精度要求的行業,如精密機械等,有一定的局限性;同時當繪制的構造曲線比較密集,將導致曲線和交點太過密集,此時建模時間會大大增加,甚至建模失敗.

圖6 與已有方法比較Fig.6 Compare with existing methods
本文提出了一種基于單幅及其輔助曲線的三維建模方法,本方法通過用戶輸入圖像,根據對稱性計算圖形在三維空間中的位置,通過輔助曲線控制模型形狀,從而實現三維模型的創建.該方法具有算法簡單、建模速度快、受環境和設備影響小、實用性強等優點,可廣泛應用于教育、游戲等三維模型的設計和加工.針對上述不足之處,下階段工作中我們將從提高建模精度,同時減少建模所需的時間方面入手,進行進一步的研究和優化.