明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

微軟新成果:為懶人準備的摳圖技術

[摘要]什么叫“摳圖”?顧名思義,所謂摳圖就是從一幅圖片中將某一部分截取出來,和另外的背景進行合成。不要小看這一工作,我們生活中的很多圖像制品都曾經經過這種加工,例如廣告等,需要設計人員將模特照片中的人像部分摳取出來,然后再和背景進行合成。事實上,摳圖在您的生活中也大有用武之地,尤其是隨著數碼相機、掃描儀...

  什么叫“摳圖”?顧名思義,所謂摳圖就是從一幅圖片中將某一部分截取出來,和另外的背景進行合成。不要小看這一工作,我們生活中的很多圖像制品都曾經經過這種加工,例如廣告等,需要設計人員將模特照片中的人像部分摳取出來,然后再和背景進行合成。事實上,摳圖在您的生活中也大有用武之地,尤其是隨著數碼相機、掃描儀等設備的普及,越來越多的人開始樂于對自己手中的照片進行各種各樣的“特殊處理”,譬如把自己的全身像摳取出來放到別的背景中,把戀人的單人照片進行摳圖后與自己的照片合成雙人照等等,都需要用到摳圖! 

  在過去,人們往往使用套索工具進行摳圖操作。作為Adobe公司的知名圖形處理軟件,PhotoShop可以對圖形進行非常精確的處理,無論要摳取的圖形有多復雜,也可以分毫不差地全部截取出來。但是,對于新手來說,PhotoShop的使用略嫌復雜,如果不經過一段時間的培訓和練習,用戶很難掌握操作的要領。為了將圖片中的某一部分取出來,用戶必須沿著對象的邊緣“剪”一圈,如果圖片本身有較多的棱角或者突起,工作的難度就會成倍增加! 

  與PhotoShop相比,Lazy Snapping的使用就要簡單多了,對于絕大多數圖形來說,只需要三步,就可以將我們需要的內容截取出來。 


 
  摳圖三部曲

   讓我們以一幅貓的照片為例來看看這款軟件是如何簡單易用的。首先,我們按住鼠標左鍵,在需要截取的目標——貓的身上,隨意劃條線,這條線既不必準確地沿著貓的身體邊沿部分,也不必要求什么“橫平豎直”,只要是畫在貓身上即可。然后,在貓的身邊,也就是我們不需要的背景上,點住鼠標右鍵劃一道。幾乎在我們劃完這條線的同時,圖片中貓的部分就被套在一個取景框中了。怎么,還有一部分沒有被選中?沒關系,您只要在需要選中的位置再按住鼠標左鍵劃幾下,該部分就可以被選中了。

  如果圖形非常簡單的話,那么只需要做到這一步就可以“大功告成”了。但是現(xiàn)在我們的目標是一只貓,其身體的邊沿存在少數不規(guī)則或者低對比度的邊緣,我們還需要進行第二步:微調。聽到“微調”這個詞,有的朋友可能認為會非常復雜。但事實上,這一步的操作依然非常簡單。您可以通過調節(jié)套住貓身體的取景框來更準確地選取要截取的圖片。如果您想更簡單,也可以選擇軟件的“brush”功能,在不夠準確的地方隨著邊界刷兩下,軟件就會自動將需要截取的目標圖形的邊界準確地勾畫出來。

  完成第二步操作后,圖片中貓的部分已經基本上都被取景框選中了。但如果我們仔細觀察就會發(fā)現(xiàn),在前景和背景顏色不同的時候,背景的顏色往往會滲透到前景上來。在使用PhotoShop摳圖的時候,這就需要做“羽化”操作,以盡量弱化這種情況,但在大多數情況下,羽化并不能完美地解決這一問題,往往需要將前景的邊界收縮,“割”掉那些被背景顏色滲透的部分,也就是說要損失一定的前景。而在Lazy Snapping中,這一操作步驟被極大地增強并簡化了,不論前景和背景的顏色對比度是高還是低,Lazy Snapping都可以非常準確地將前景的顏色清楚地分離出來,既不會缺少一部分,也不會讓背景的顏色滲透到前景中去! 

  不過,如果您細心觀察的話,就會發(fā)現(xiàn),貓的胡須并沒有被選中。這是因為貓的胡須為半透明,而且又長又細,相互之間又比較分散,因此軟件難以自動將其選中。這時就需要用到第三步操作。這一步的操作更加簡單,我們只要用鼠標在貓胡須部位隨意涂抹兩下,將胡須部位覆蓋住,這些胡須就會被選中了。當然,嚴格地說,這并不是第三步操作的主要功能,軟件設計者之所以為軟件添加這一功能,其實更主要地是為了更好地完成前景和背景顏色的分離(Coherent Matting)。


  Lazy Snapping的基礎:Graph Cut

  Graph Cut技術是圖論中的一個概念,也是Lazy snapping這款軟件的核心技術。在軟件的第一步和第二步操作中,對前景的輪廓計算和對細節(jié)部分進行修補的操作,都是基于該技術進行的。

  首先,當一張圖被導入到Lazy snapping中時,軟件會自動采用一種被稱為“水線(watershed)”的算法對該圖進行處理。
  所謂水線,通俗地說,就是把一張圖像的梯度圖想像成為一片凹凸不平的山地,其中,顏色變化小的區(qū)域就是山脊,而顏色變化劇烈的區(qū)域就是山洼。我們知道,每一個山洼周圍必然都是一圈山脊,如果在每一個山洼的最低點打一個洞,然后通過這個洞向山洼里注水,則經過一段時間之后,相鄰山洼里的水必然會越過山脊連接到一起。兩個山洼之間的水連接在一起的這條線,就是水線。通過這些水線,軟件就可以把圖片分為大小不等的若干“碎片”。我們可以注意到,每一個區(qū)域中的顏色基本上都是相同的。

  為什么要先對圖片進行“水線”處理呢?因為我們知道,在計算機中,每一幅圖都是由無數個像素點構成的,當軟件需要分辨出圖像的前景和背景時,就需要對圖像中的所有像素點進行分析,這樣一來工作量會成立方級數增加,大大減緩處理的速度。而采用了“水線”處理之后,圖像中需要分析的就是那些被分割出的區(qū)域了,其數量比像素點要少數十倍,從而大大加快了軟件的處理速度。

  接下來,就該是用戶需要做的工作了——通過劃線,告訴計算機哪些是我們想要的前景,而哪些是我們不想要的背景。如果從像素點的角度來看,一旦我們在圖像上畫了一條線,則這條線經過的像素點被我們稱為“種子點”,這些“種子點”所涉及到的區(qū)域,則被稱為“種子區(qū)域”。接下來,我們就需要借助這些“種子區(qū)域”將圖片分為“前景區(qū)域”和“背景區(qū)域”兩大塊。利用Graph Cut優(yōu)化算法,圖片上所有區(qū)域會被賦予惟一的屬性,不屬于“前景區(qū)域”就一定會屬于“背景區(qū)域”。

  在經過“水線”處理后的圖片中,我們把相鄰的區(qū)域連接在一起。而接下來Graph Cut優(yōu)化算法要做的,就是嘗試將每個非“種子區(qū)域”分別與“前景區(qū)域”(或“背景區(qū)域”)之間的通路“打斷”。如果全部通路都可以被打斷,則軟件猜測該區(qū)域不屬于“前景區(qū)域”,反之則可能屬于。這樣,經過一番運算后,軟件就可以將圖形分為“前景區(qū)域”和“背景區(qū)域”兩大部分了,也就將我們所需要的前景的大致輪廓勾勒了出來。

  Graph Cut 優(yōu)化的準則,考慮了每一個區(qū)域的顏色與種子區(qū)域之間的顏色相似性,顏色越像“前景區(qū)域”就越可能被分在前景。同時它也考慮了相鄰區(qū)域的顏色差別,顏色差別越大這兩個區(qū)域越可能被分開。這個優(yōu)化問題可以用圖論中極大流(極小割)的方法很快解決。

  對于一張結構較為簡單的圖形來說,如果其前景和背景的對比非常明顯,且前景的形狀較為簡單,則經過前面的處理后,前景圖形就已經被“摳”出來了。不過,如果圖片的內容較為復雜,且前景和背景之間的對比度不是很明顯的話,則需要對圖片進行進一步的微調。

  所謂進一步處理,其實就是將前景與背景之間的“邊界”清晰地確定下來。由于在此之前我們已經確定了前景的大致輪廓,因此在這里我們只對前景和背景相交處的邊界附近進行處理,也就是已經確定好的“前景區(qū)域”和“背景區(qū)域”之間的那一塊地帶。

  要說明的是,在前一步操作中,軟件通過“水線”算法將圖像分為一塊塊區(qū)域以加快處理的速度。而現(xiàn)在,由于要對圖像的邊緣部分進行調整,軟件處理的對象又變成了像素而不再是區(qū)域,以滿足處理精度方面的要求。


  無心插柳柳成蔭

  “這是一款‘懶人’用的摳圖工具。”微軟亞洲研究院的兩位研究員孫劍和李寅笑著對記者說。確實,從這款軟件的名字“Lazy Snapping”我們就不難看出,為那些需要經常進行摳圖操作的“懶人”們造福,正是這款軟件設計的目的,不過,這卻不是最開始時設計這款軟件的初衷。用研究員李寅的話來說,這完全是一個無心插柳柳成蔭的“偶然”結果! 

  最初,李寅和孫劍都是在制作IBR(Image-based Rendering基于圖形的繪制)項目,例如同心拼圖等。在這一項目的制作過程中,李寅發(fā)現(xiàn),如果想使最終的制作結果取得較好的效果,就必須將每一個圖形的邊界都定義得非常準確。為此,在最初,他們設計了一個軟件,專門用于將圖片分成很多層,將圖片前景和背景中的各種顏色都非常清晰、準確地分開,這在當時需要耗費大量的人工。由此,李寅想到,在處理圖像的過程中,雖然有部分工作因為對細節(jié)部分要求非常高而不得不通過人去手動處理,但大多數工作完全不需要過多的人為參與應該就可以完成,那么,為什么不將這部分工作交給計算機去做呢?  

  正是這一想法最終導致了Lazy Snapping的誕生。為了使工作可以更加簡化、快速,研究人員不僅要使軟件的精確度大幅度提高,從而在極大程度上提升了計算的速度;更為重要的是,讓使用者可以隨時看到自己操作的結果,并且及時進行修改。當他們完成了軟件的初步設計,尤其是將軟件的處理速度和操作簡易度大幅提高后,他們發(fā)現(xiàn),這個軟件已不再是最初設想的那種只能用于工作輔助的工具,而變成了一款足以獨立出來完成摳圖工作的專業(yè)軟件。接下來,研究人員不斷加強這款軟件的精確度和流暢程度,使軟件可以越來越迅速、準確地完成所需的工作! 

  在研發(fā)過程中,人們發(fā)現(xiàn),由于現(xiàn)有的算法是對全圖進行優(yōu)化,因此軟件在處理過程中容易產生錯誤。于是研究人員開始為軟件添加一些更加人性化的設計,允許用戶對局部圖形進行調整,使得軟件的處理結果可以更加準確。隨著軟件的日漸完善,研究人員又為其添加了處理半透明邊緣的能力,例如處理貓的胡須等,效果也非常好。至此,Lazy Snapping的雛形就已經大致完成了。

  在軟件初步完成后,研究人員開始征集志愿者對其進行對比測試,對比的對象是PhotoShop。當然,對比的只是PhotoShop中的摳圖功能這一部分。測試的方法很簡單,他們將志愿人員分為兩組,一組是曾經使用過PhotoShop的,一組則是沒有使用過的。然后,對每一位人員分別進行兩段時間為5分鐘的培訓,其內容則分別為PhotoShop的摳圖功能和Lazy Snapping的使用。

  然后,每一個人分別使用兩個工具對兩組圖形進行摳取,一組要求做到最好的質量,另一組要求在一分鐘內完成任務。從測試結果來看,志愿人員掌握Lazy Snapping的速度要明顯快于掌握PhotoShop,而兩個軟件在處理精度上的差別則不是很大。不過,專業(yè)用戶表示,軟件雖然可以通過非常簡單的操作實現(xiàn)精度較高的處理,但其“可參與度”較低,無法進行更進一步的細致操作。 通過這次用戶調查,研究人員不僅獲得了信心,也掌握了進一步發(fā)展的方向。



Photoshop默認保存的文件格式,可以保留所有有圖層、色版、通道、蒙版、路徑、未柵格化文字以及圖層樣式等。