數學系列:數學在計算機圖形學中的應用


Copyright © 1900-2016, NORYES, All Rights Reserved.

http://www.cnblogs.com/noryes/

歡迎轉載,請保留此版權聲明。

-----------------------------------------------------------------------------------------

 

    “學習計算機圖形學需要多少的數學?”這是初學者最經常問的問題。狹義的計算機圖形學指的是傳統的三維建模,繪制,動畫等,而廣義的計算機圖形學還包括計算機圖像處理,視頻處理,計算機視覺和機器學習等領域。

    答案取決於你想在計算機圖形學領域鑽研多深:

    如果僅僅使用周圍唾手可得的圖形軟件,如Photoshop, 3D Studio Max, Maya, AutoCAD等,你不需要知道多少數學知識;通過掌握簡單的概念和閱讀使用教程你就能使用這些軟件的基本功能;但是如果你想精通這些軟件,你還是需要學習計算機圖形學的一些入門知識的;

    如果想學習計算機圖形學的入門知識,你至少需要掌握代數,三角學和線性代數的一些基本知識;這也是要成為圖形軟件高手所必需掌握的;

    如果想成為一名計算機圖形學的研究工作者,那么對數學的學習將是“活到老,學到老”。重要的是,從以前看似枯燥的數學到看到它的實際應用的過程中,你會更容易享受數學的美妙。在你不斷進行計算機圖形學的研究的過程中,你會感覺到你的數學知識越來越不夠用,從而真正理解“數學不是沒有用,而是不夠用!”。

 

    如果你並不特別喜歡數學,是否仍有在計算機圖形學領域工作的機會?是的,計算機圖形學的確有一些方面不需要考慮太多的數學問題。你不應該因為數學成績不好而放棄它,如果你對計算機圖形學具有強烈興趣和好奇心的話,而且你還特別喜歡和擅長計算機編程的話。不過,如果學習了更多的數學知識,那么你將在研究課題上有更多的選擇余地。如果你要做很好的計算機圖形學的研究工作,則建議你還是多學習些數學。

    對於在計算機圖形學中哪些數學才是重要的?這個問題是沒有明確的答案的。這領域里不同的方面要求掌握不同的數學知識,也許興趣將會決定了你的方向。那些基本的數學知識和分析能力是最重要的,而其他的數學則是根據你所從事的方向相關。

    下面將介紹我們認為對於計算機圖形學有用的數學。別以為想成為一名計算機圖形學的研究者就必須精通各門數學!在大學里,你所學的那些數學看起來都很抽象,枯燥無味,這是因為你並不知道它們的用處,甚至連講課的老師也不知道,而你們的目的只是記住那些定理和公式,考個好分數。與大學學習數學不一樣的是,你在計算機圖形學的學習和研究過程中會感受到數學的用處和美妙,這時你學習數學的目的將更加明確,興趣將更加濃厚,學習方法將更加有效。因為你是在使用數學的過程中在學習數學!想想看你是如何學會中文說話的?為了對用於計算機圖形學的數學有一個全面的看法,這里特地列出了很多方面。注意,不是這里提到的每個方面你都必須熟悉,許多研究工作者從不需要考慮下面提到的某些數學知識,成功的研究者總是將某一方面的數學知識和數學工具用到極致!

    最后,雖然讀了這篇文章后,你應該會對數學在計算機圖形學中的應用有所了解,不過這也是一家之言。也許你應該閱讀更多的此類文章,或者至少從其他從事計算機圖形學工作的人那里了解不同的學習重點。

 

1、初等代數和三角學

對於計算機圖形學的初學者來說,高中的代數和三角學可能是最重要的數學。日復一日,我從簡單的方程解出一個或更多的根。我時常還要解決類似求一些幾何圖形邊長的簡單三角學問題。代數和三角學是計算機圖形學的最基礎的知識。

那么高中的幾何學怎么樣呢?可能讓人驚訝,不過在多數計算機圖形學里,高中的幾何學並不經常被用到。原因是許多學校教的幾何學實際上是如何建立數學證明的課程。雖然證明題對提高智力顯然是有效的,但對於計算機圖形學來說,那些與幾何課有關的定理和證明並不常被用到。如果你畢業於數學相關領域(包括計算機圖形學),就會發現雖然你在證明定理,不過這對開始學習圖形學不是必要的。

如果精通代數和三角學,就可以開始讀一本計算機圖形學的入門書了。下一個重要的用於計算機圖形學的數學——線性代數,多數此類書籍至少包含了一個對線性代數的簡要介紹。

 

推薦的參考書:

Computer Graphics: Principles and Practice

James Foley, Andries van Dam, StevenFeiner, John Hughes

Addison-Wesley

 

2、線性代數

線性代數的思想貫穿於計算機圖形學。事實上,只要牽涉到幾何數值表示法,就常常抽象出例如x,y,z坐標之類的數值,我們稱之為矢量。計算機圖形學自始至終離不開矢量和矩陣。用矢量和矩陣來描述旋轉,平移,或者縮放是再好不過了。高中和大學都有線性代數的課程。只要想在計算機圖形學領域工作,就應該打下堅實的線性代數基礎。我剛才提到,許多圖形學的書都有關於線性代數的簡要介紹——足夠教給你圖形學的第一門課。

 

3      數學分析(微積分學)

微積分學是高級計算機圖形學的重要成分。如果打算學習研究圖形學,我強烈建議你應該對微積分學有初步認識。理由不僅僅是微積分學是一種很有用的工具,還有許多研究者用微積分學的術語來描述他們的問題和解決辦法。另外,在許多重要的數學領域,微積分學被作為進一步學習的前提。學習了基本代數之后,微積分學又是一種能為你打開多數計算機圖形學與后繼的數學學習之門的課程。

 

4      微分幾何

微分幾何學研究描述和控制光滑曲線,曲面的方程。如果你要計算出經過某個遠離曲面的點並垂直於曲面的矢量(法向矢量)就會用到微分幾何學。讓一輛汽車以特定速度在曲線上行駛也牽涉到微分幾何學。有一種通用的繪制光滑曲面的圖形學技術,叫做“凹凸帖圖”,這個技術用到了微分幾何學。另外,要研究曲面的一些幾何性質,如曲率、可展性、測地性質等,需要較多的微分幾何知識。如果要着手於用曲線和曲面來創造形體(在圖形學里稱之為建模),你至少應該學習微分幾何學的基礎。

 

5      數值方法(計算方法)

幾乎任何時候,我們在計算機里用近似值代替精確值來表示和操作數值,所以計算過程總是會有誤差。而且對於給定的數值問題,常常有多種解決的方法,一些方法會更塊,更精確或者對內存的需求更少。數值方法研究的對象包括“計算方法”和“科學計算”等等。這是一個很廣闊的領域,而且我將提及的其他幾門數學其實是數值方法的一些分支。這些分支包括抽樣法理論,矩陣方程組,數值微分方程組和最優化。

 

推薦的參考書:

Numerical Recipes in C++: The Art ofScientific Computing

William Press, Saul Teukolsky, WilliamVetterling and Brian Flannery

Cambridge University Press

 

6      抽樣法理論和信號處理

在計算機圖形學里我們反復使用儲存在正規二維數組里的數字集合來表示一些對象,例如圖片和曲面。這時,我們就要用抽樣法來表示這些對象。如果要控制這些對象的品質,抽樣法理論就變得尤為重要。抽樣法應用於圖形學的常見例子是當物體被繪制在屏幕上時,它的輪廓呈現鋸齒狀的邊緣。這鋸齒狀的邊緣(被認為是“混淆”現象)是非常讓人分散注意力的,用抽樣法中著名的技術例如回旋,傅立葉變換,空間和頻率的函數表示就能把這個現象減少到最小。這些思想在圖像和音頻處理領域是同樣重要的。

 

推薦的參考書:

The Fourier Transform and Its Applications

Ronald N. Bracewell

McGraw Hill

 

7      矩陣計算

計算機圖形學的許多問題要用到矩陣方程組的數值解法。一些涉及矩陣的問題包括:找出最好的位置與方向以使對象們互相匹配(最小二乘法),創建一個覆蓋所給點集的曲面,並使皺折程度最小(薄板樣條算法),還有材質模擬,例如水和衣服等。在圖形學里矩陣表述相當流行,因此在用於圖形學的數學中我對矩陣方程組的評價是很高的。

 

推薦的參考書:

Matrix Computations

Gene Golub and Charles Van Loan

Johns Hopkins University Press

 

8      物理學(物理模擬)

物理學顯然不是數學的分支,它是自成一家的學科。但是在計算機圖形學的某些領域,物理學和數學是緊密聯系的。在圖形學里,牽涉物理學的問題包括光與物體的表面是怎樣互相影響的,人與動物的移動方式,水與空氣的流動。為了模擬這些自然現象,物理學的知識是必不可少的。這和解微分方程緊密聯系,我將會在下一節提到微分方程。

 

9      微分方程的數值解法(有限元方法)

我相信對於計算機圖形學來說,解微分方程的技巧是非常重要的。像我們剛才討論的,計算機圖形學致力於模擬源於真實世界的物理系統。波浪是怎樣在水里形成的,動物是怎樣在地面上行走的,這就是兩個模擬物理系統的例子。模擬物理系統的問題經常就是怎樣解微分方程的數值解。請注意,微分方程的數值解法與微分方程的符號解法是有很大差異的。符號解法求出沒有誤差的解,而且時常只用於一些非常簡單的方程。有時大學課程里的“微分方程”只教符號解法,不過這並不會對多數計算機圖形學的問題有幫助。

在對物理系統的模擬中,我們把世界細分為許多表示成矢量的小元素。然后這些元素之間的關系就可以用矩陣來描述。雖然要處理的矩陣方程組往往沒有很精確的解,但是取而代之的是執行了一系列的計算,這些計算產生一個表示成數列的近似解。這就是微分方程的數值解法。請注意,矩陣方程的解法與微分方程數值解法的關系是很密切的。

 

10 最優化

在計算機圖形學里,我們常常為了期望的目標尋求一種合適的描述對象或者對象集的方法。例如安排燈的位置使得房間的照明看起來有種特殊的“感覺”,動畫里的人物要怎樣活動四肢才能實現一個特殊的動作,怎樣排版才不會使頁面混亂。以上這些例子可以歸結為最優化問題。十年前的計算機圖形學幾乎沒有最優化技術的文獻,不過最近這個領域越來越重視最優化理論。我認為在計算機圖形學里,最優化的重要性將會日益增加。

 

11 概率論與統計學

計算機圖形學的許多領域都要用到概率論與統計學。當研究者涉足人類學科時,他們當然需要統計學來分析數據。圖形學相關領域涉及人類學科,例如虛擬現實和人機交互(HCI)。另外,許多用計算機描繪真實世界的問題牽涉到各種未知事件的概率。兩個例子:一棵成長期的樹,它的樹枝分杈的概率;虛擬的動物如何決定它的行走路線。最后,一些解高難度方程組的技巧用了隨機數來估計方程組的解。重要的例子:蒙特卡羅方法經常用於光如何傳播的問題。以上僅是一部分在計算機圖形學里使用概率論和統計學的方法。

另外,在機器學習和統計學習中,需要非常多和深入的統計學知識。

 

12 拓撲學

用一句話來形容拓撲學,它研究油炸圈餅與咖啡杯為什么在本質上是相同的。答案是他們都是只有一個洞的曲面。對於計算機圖形學來說,拓撲學的形式(符號表示法)是表達思想的簡便方法,常用於分析一些曲面的性質,在形狀分析、形狀匹配和搜索中得到應用。

 

13 黎曼幾何

黎曼幾何是研究流形曲面上的微積分與微分幾何。不同於三維歐氏空間,它研究的曲面是在流形曲面上,其中用到不同的度量。這部分數學知識有點抽象,但是同樣有效地被用到計算機圖形學中。如共形幾何理論就被發展起來在計算機圖形學中得到廣泛的應用。

 

14 抽象代數

抽象代數就是研究群論,環論和域的代數學。相對於線性代數,內容也比較抽象。在計算機圖形學上也時有用到。

 

15 計算幾何

計算幾何學研究如何用計算機高效地表示與操作幾何體。典型問題如,碰撞檢測,把多邊形分解為三角形,找出最靠近某個位置的點,這個學科包括了運算法則,數據結構和數學。圖形學的研究者,只要涉足創建形體(建模),就要大量用到計算幾何學。

 

推薦的參考書:

Computational Geometry in C

Joseph O'Rourke

Cambridge University Press

 

Computational Geometry: An Introduction

Franco Preparata and Michael Shamos

Springer-Verlag

 

16 其他幾何學

一些其他的幾何學,如仿射幾何、射影幾何在計算機圖形學的某些問題上用得比較多,對工程具有較大的促進應用。

 

17 總結:數學應用和數學理論

對於圖形學來說,以上提到的許多數學學科都有個共同點:比起這些數學的理論價值,我們更傾向於發掘它們的應用價值。不要驚訝。計算機圖形學的許多問題和物理學者與工程師們研究的問題是緊密聯系的,並且物理學者與工程師們使用的數學工具正是計算機圖形學研究者們使用的。多數研究純數學理論的學科從不被用於計算機圖形學。不過這不是絕對的。請注意這些特例:分子生物學正利用節理論來研究DNA分子動力學,亞原子物理學用到了抽象群論。也許有一天,純數學理論也能推動計算機圖形學的發展,誰知道呢?

事實上,文章中所提到一些數學分支,按照我國的教育體制,在數學系本科的學生(或者碩士研究生階段的理工科學生)基本都能接觸到。但是大學所學習的數學比較偏重於證明以構建完備的數學理論框架,而不太注重實際的使用,現在的大學教師授課的方式也是這樣。

我認為,學習數學最好的方式就是使用它,使用它越多,你就覺得它越有用,越有趣,學得就越好,也越快,越扎實。當然,很少有人能精通全部的知識,對於計算機圖形學的學習和實踐,應當采取掌握較為寬廣的數學知識基礎,在需要的時候,對相關的數學知識再進行深入的學習和挖掘;不要因為自身數學知識的匱乏而沮喪,更不能因此而敵視數學,保持對計算機圖形學強烈的興趣和樂觀上進的學習態度是學習計算機圖形學的關鍵。

還有一點需要指出的是,在學習計算機圖形學的過程中,你會發現各個方面的數學知識都會被用到,因此你掌握的數學知識會比較全面,也知道如何在實際中應用。這可能是應用數學在所有學科得到最好的體現。相反,一些做純理論的數學工作者,掌握的數學知識就是他們所研究的一塊,而對其他的數學知識掌握得就不夠好,他們做得比較深入。當然,做應用數學和理論數學都有值得敬仰的地方,一個側重在實際應用,而另一個側重在理論深度,但要做好都不是很容易。數學說到底還是要學老用的。相對來講,做計算機圖形學能看到學到的數學在實際中所用了,“所用即所學”。試想一下,當你能看到自己做的美妙的東西被別人看到且被敬仰的時候,你的成就感一定會很大!

最后說一點的就是,學習計算機圖形學和從事計算機圖形學的研究,除了數學基礎外,還需要較強的計算機編程能力,你務必要掌握和熟練一門編程語言,一般建議C/C++,因為你要實現出你的想法,你必須編程去實現出來,做出漂亮的結果。編程也是很有趣的,只要你有興趣,提高是非常快的!當然,這里我不闡述如何提高編程的能力和水平的方法。“數學”和“編程”,兩手都要抓,兩手都要硬!提醒大家一點的是,如果你對編程興趣不大,或者就不願編程,那你就不適合選擇計算機圖形學,可能更適合選擇其他方向,比如統計學或理論數學。

 

注:

本文由Greg Turk. “Mathematics forComputer Graphics, August 1997.” 及網上的中文翻譯整理擴充而得。

 

18 進階

作者:Dahua

 

感覺數學似乎總是不夠的。這些日子為了解決research中的一些問題,又在圖書館捧起了數學的教科書。從大學到現在,課堂上學的和自學的數學其實不算少了,可是在研究的過程中總是發現需要補充新的數學知識。Learning和Vision都是很多種數學的交匯場。看着不同的理論體系的交匯,對於一個researcher來說,往往是非常exciting的enjoyable的事情。不過,這也代表着要充分了解這個領域並且取得有意義的進展是很艱苦的。記得在兩年前的一次blog里面,提到過和learning有關的數學。今天看來,我對於數學在這個領域的作用有了新的思考。對於Learning的研究,

 

1、Linear Algebra (線性代數) 和 Statistics (統計學) 是最重要和不可缺少的。這代表了Machine Learning中最主流的兩大類方法的基礎。一種是以研究函數和變換為重點的代數方法,比如Dimension reduction,feature extraction,Kernel等,一種是以研究統計模型和樣本分布為重點的統計方法,比如Graphical model, Information theoretical models等。它們側重雖有不同,但是常常是共同使用的,對於代數方法,往往需要統計上的解釋,對於統計模型,其具體計算則需要代數的幫助。以代數和統計為出發點,繼續往深處走,我們會發現需要更多的數學。

 

2、Calculus (微積分),只是數學分析體系的基礎。其基礎性作用不言而喻。Learning研究的大部分問題是在連續的度量空間進行的,無論代數還是統計,在研究優化問題的時候,對一個映射的微分或者梯度的分析總是不可避免。而在統計學中,Marginalization和積分更是密不可分——不過,以解析形式把積分導出來的情況則不多見。

 

3、Partial Differential Equation (偏微分方程),這主要用於描述動態過程,或者仿動態過程。這個學科在Vision中用得比Learning多,主要用於描述連續場的運動或者擴散過程。比如Level set, Optical flow都是這方面的典型例子。

 

4、Functional Analysis (泛函分析),通俗地,可以理解為微積分從有限維空間到無限維空間的拓展——當然了,它實際上遠不止於此。在這個地方,函數以及其所作用的對象之間存在的對偶關系扮演了非常重要的角色。Learning發展至今,也在向無限維延伸——從研究有限維向量的問題到以無限維的函數為研究對象。Kernel Learning 和 Gaussian Process 是其中典型的例子——其中的核心概念都是Kernel。很多做Learning的人把Kernel簡單理解為Kernel trick的運用,這就把kernel的意義嚴重弱化了。在泛函里面,Kernel (Inner Product)是建立整個博大的代數體系的根本,從metric, transform到spectrum都根源於此。

 

5、Measure Theory (測度理論),這是和實分析關系非常密切的學科。但是測度理論並不限於此。從某種意義上說,Real Analysis可以從Lebesgue Measure(勒貝格測度)推演,不過其實還有很多別的測度體系——概率本身就是一種測度。測度理論對於Learning的意義是根本的,現代統計學整個就是建立在測度理論的基礎之上——雖然初級的概率論教科書一般不這樣引入。在看一些統計方面的文章的時候,你可能會發現,它們會把統計的公式改用測度來表達,這樣做有兩個好處:所有的推導和結論不用分別給連續分布和離散分布各自寫一遍了,這兩種東西都可以用同一的測度形式表達:連續分布的積分基於Lebesgue測度,離散分布的求和基於計數測度,而且還能推廣到那種既不連續又不離散的分布中去(這種東西不是數學家的游戲,而是已經在實用的東西,在Dirchlet Process或者Pitman-Yor Process里面會經常看到)。而且,即使是連續積分,如果不是在歐氏空間進行,而是在更一般的拓撲空間(比如微分流形或者變換群),那么傳統的黎曼積分(就是大學一年級在微積分課學的那種)就不work了,你可能需要它們的一些推廣,比如Haar Measure或者Lebesgue-Stieltjes積分。

 

6、Topology(拓撲學),這是學術中很基礎的學科。它一般不直接提供方法,但是它的很多概念和定理是其它數學分支的基石。看很多別的數學的時候,你會經常接觸這樣一些概念:Open set / Closed set,set basis,Hausdauf, continuous function,metric space,Cauchy sequence, neighborhood, compactness, connectivity。很多這些也許在大學一年級就學習過一些,當時是基於極限的概念獲得的。如果,看過拓撲學之后,對這些概念的認識會有根本性的拓展。比如,連續函數,當時是由epison法定義的,就是無論取多小的正數epsilon,都存在xxx,使得xxx。這是需要一種metric去度量距離的,在general topology里面,對於連續函數的定義連坐標和距離都不需要——如果一個映射使得開集的原像是開集,它就是連續的——至於開集是基於集合論定義的,不是通常的開區間的意思。這只是最簡單的例子。當然,我們研究learning也許不需要深究這些數學概念背后的公理體系,但是,打破原來定義的概念的局限在很多問題上是必須的——尤其是當你研究的東西它不是在歐氏空間里面的時候——正交矩陣,變換群,流形,概率分布的空間,都屬於此。

 

7、Differential Manifold (微分流形),通俗地說它研究的是平滑的曲面。一個直接的印象是它是不是可以用來fitting一個surface什么的——當然這算是一種應用,但是這是非常初步的。本質上說,微分流形研究的是平滑的拓撲結構。一個空間構成微分流形的基本要素是局部平滑:從拓撲學來理解,就是它的任意局部都同胚於歐氏空間,從解析的角度來看,就是相容的局部坐標系統。當然,在全局上,它不要求和歐氏空間同胚。它除了可以用於刻畫集合上的平滑曲面外,更重要的意義在於,它可以用於研究很多重要的集合。一個n-維線性空間的全部k-維子空間(k

 

8、Lie Group Theory (李群論),一般意義的群論在Learning中被運用的不是很多,群論在Learning中用得較多的是它的一個重要方向Lie group。定義在平滑流形上的群,並且其群運算是平滑的話,那么這就叫李群。因為Learning和編碼不同,更多關注的是連續空間,因為Lie group在各種群中對於Learning特別重要。各種子空間,線性變換,非奇異矩陣都基於通常意義的矩陣乘法構成李群。在李群中的映射,變換,度量,划分等等都對於Learning中代數方法的研究有重要指導意義。

 

9、Graph Theory(圖論),圖,由於它在表述各種關系的強大能力以及優雅的理論,高效的算法,越來越受到Learning領域的歡迎。經典圖論,在Learning中的一個最重要應用就是graphical models了,它被成功運用於分析統計網絡的結構和規划統計推斷的流程。Graphical model所取得的成功,圖論可謂功不可沒。在Vision里面,maxflow (graphcut)算法在圖像分割,Stereo還有各種能量優化中也廣受應用。另外一個重要的圖論分支就是Algebraic graph theory (代數圖論),主要運用於圖的譜分析,著名的應用包括Normalized Cut和Spectral Clustering。近年來在semi-supervised learning中受到特別關注。

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM