數字圖像處理與CG有多大聯繫?與遊戲引擎有多大聯繫?
計算機圖形學的渲染部分,是把一些圖形渲染至屏幕(或其他輸出設備如印表機)。屏幕通常是光柵圖像(Raster graphics),這是一種數字圖像的表示方式。我們可以想像,畫每個像素時,其實就是對圖形(如三維的虛擬場景)做一個採樣過程(sample)。採樣是數字圖像的學問。如果簡單地對每個像素採樣一次,圖形的邊緣會出現鋸齒,解決方法之一是對每像素採樣多次(稱為超採樣/Supersampling)。
此外,三維渲染經常會用到紋理映射(Texture mapping),紋理本身也是數字圖像。查找紋理(texture lookup)其實也是一個採樣過程。計算機圖形中使用紋理過濾(http://en.wikipedia.org/wiki/Texture_filtering)去改善採樣的品質。一些計算機圖形的演算法,例如陰影貼圖(Shadow mapping),也需要用到特殊的過濾技術。
在渲染的最後階段,可能會需要一些圖像處理,這些通常稱作後期處理(post processing)。直接使用數字圖像技術的例如有色調映射(http://en.wikipedia.org/wiki/Tone_mapping)、調色(Color grading)、伽瑪校正(Gamma correction)、增加銳度/信噪等等。除此以外,計算機圖形還會使用一些專門的後處理,如屏幕空間動態模糊(Screen space motion blur)、屏幕空間環境光遮蔽(Screen space ambient occlusion)等。
還有一些特殊情況,計算機圖形會使用到數字圖像技術,例如渲染海洋時,可使用到快速傅里葉變換(Fast Fourier transform)去模擬波浪的運動[1]。
圖形渲染是遊戲引擎中的一個重要部分,自然有使用到計算機圖形中的數字圖像技術。
[1] Tessendorf, Jerry. "Simulating ocean water." Simulating Nature: Realistic and Interactive Techniques. SIGGRAPH 1 (2001). https://evasion.imag.fr/Membres/Fabrice.Neyret/images/fluids-nuages/waves/Jonathan/articlesCG/simulating-ocean-water-01.pdf參加本人回答 計算機視覺,計算機圖形學和數字圖像處理,三者之間的聯繫和區別是什麼?
匿名用戶的回答的抽象化程度比較高,我來舉兩個實際的例子大家感受下。
基於圖像的輪廓線查找演算法在一些卡通風格的場景的繪製中,我們很可能會需要動態地查找一個任意的三維模型的輪廓線。這時有至少兩種方案:
- 一種是在 3D 空間中,根據模型表面的一些特徵(法向、曲率或其它)來查找輪廓線,這就是純圖形學(狹義的)的方法;
- 另一種方法是先把 3D 模型在一個虛擬畫布上簡單地渲染出來(比方說用 OpenGL 的馮模型),在渲染得到的圖像上,根據像素的亮度變化特徵(比如亮度梯度大小)來查找輪廓線。
第二種方法就是圖像處理演算法在圖形學中的一種應用。優點在於,演算法的性能和模型的面片數量關係不大(這得益於成熟的硬體加速技術),和虛擬畫布的大小很相關,可以很簡單地通過縮放虛擬畫布來實現對輪廓線查找精度的控制,如果採用第一種方法,演算法性能和面片數量很相關,但優點是可以很方便地對輪廓線進行矢量化,便於後處理。
基於筆刷的非真實感繪製演算法
在非真實感圖形學這個領域,有一個研究方向是將照片(半)自動轉變為繪畫,比如油畫、水彩、鋼筆畫等等。這裡很顯然就會大量用到圖像處理的技術(平時我們也會把這些技術稱為計算機視覺技術,因為通常圖像處理技術和低級視覺相關)。
比方說,一個簡單的油畫生成演算法可能會是這樣的:- 準備一個油畫筆刷庫,包含了不同形狀的真實筆刷在畫布上繪製的樣本圖片;
- 給定一張新的照片,先對照片做一定的抽象化,比如在圖像空間中合併顏色類似的區域,同一個區域中的像素的顏色相同;
- 一步一步地將筆刷庫中的筆畫添加到一個新的虛擬畫布上,使得畫布上的繪製結果和抽象化過的照片儘可能相似。
在以上過程中,會用到圖像抽象化演算法,圖像相似性評價演算法,這些演算法的某些實現方式可以認為是屬於圖像處理的。
以上是兩個使用了圖像處理演算法的圖形學演算法的實例,事實上,圖形學中還有很多這樣的例子,可以說,圖像處理和圖形學的聯繫是很緊密的,許多圖形學的演算法都會用到圖像處理的演算法。而且,如果你在開發圖形學相關的應用,很可能你就會不知不覺地在使用一些圖像處理演算法,比方說把RGB像素轉換成HSV像素,把紋理圖片進行插值之後貼到模型表面等等。
抽象地總結圖像處理和現代圖形學的關係很難,即使總結了一般人也比較難懂,所以我覺得舉幾個例子會比較好。
最後,我對遊戲引擎的了解不多,和遊戲引擎的關係還是看其它答案吧。圖形學:
圖像處理:
所以遊戲引擎可以這麼做:後面一步在遊戲引擎中叫「後處理」,用來生成基於數字圖像處理技術的特效CG指計算機圖形學
另外,顛倒一下:,這是計算機視覺(經人補充,cv不止3d重建的內容)另外說一下,不少人口中的CG實際上與CGI產生了混淆。CGI才是泛指通過計算機手段生成的圖像及其相關技術。沒多大聯繫……數字圖像處理指的是對圖片進行降噪、還原、增強、提取特徵值(模式識別)等等,主要目的是提高圖像的質量、可視性。CG和遊戲引擎不太了解,但和圖像處理關係不大
嗯,如果你問的是狹義那個數字圖像處理,有些遊戲引擎需要實現部分圖像特效,可以視為內含了數字圖像處理引擎。像常見的「擴大縮小」「旋轉」「色彩處理」都是遊戲引擎里的功能。
但是兩者機理完全相反。
遊戲里實際上是構築了一個虛擬的世界,圖像上所有的物體信息事先都有了。而數字圖像處理,你有的只是一個現實世界的截圖,所有的信息你都沒有,需要從圖像中辨識。舉一個不太合適的例子。
比如HGAME里的一個畫面,有馬賽克的,要去掉馬賽克你只要把那部分特效關掉就可以了。數字圖像處理的話,就得進行數字分析,盡量恢復原始信息。如果你說的是廣義的,那計算機圖形本身就涵蓋了一切數字圖像技術。推薦閱讀:
※計算機圖形學當前熱點是什麼?
※如何理解OpenGL中著色器,渲染管線,光柵化等概念?
※什麼類型的人需要學習 OpenGL?
※想用C++實現一個軟體渲染器,類似DX和OpenGL,除了《3D遊戲編程大師技巧》,或者什麼網站推薦?
※現階段應該怎麼學習計算機圖形學呢?