2012-12-15 132 views
1

虛擬頭髮我的當前項目需要我學習人臉檢測/跟蹤和圖像處理,鑑於我在c#中的經驗,我選擇了Emgu CV作爲我的人臉檢測和跟蹤選擇庫。從我迄今爲止學到的知識,我可以進行人臉檢測和跟蹤,以及基本的圖像處理。虛擬頭髮使用Emgu CV - C#

我的目標是能夠將虛擬頭髮放在檢測到的臉上。我想要實現的與[此視頻]類似:http://www.youtube.com/watch?v=BdPmECfUFcI

我想知道的是用於處理檢測到的臉上不同髮型的頭髮定位的技術。我用什麼圖像格式存儲頭髮?

+0

你的問題到底是什麼?這是關於「頭髮」形象的高檔/低檔嗎?是否需要決定如何將「頭髮」圖形與檢測到的頭部對齊?還有別的嗎? – mmgp

+0

@mmgp,是的,我的問題是如何將頭髮的形狀與檢測到的頭部對齊,我相信這也會照顧到頭髮的縮放。 – Syma

+0

兩個不同的問題,一次解決一個問題。假設你現在知道規模。你有頭部的最小邊界框還是軸對齊?如果前者,對齊問題是什麼? – mmgp

回答

1

看完視頻後,我注意到它認爲頭像是一個扁平的矩形,而不是矩形棱鏡(3D對象),所以它不考慮使用透視變換,我也不會考慮它。這是一個限制,但是作爲進行此類展示位置的體面第一步。請注意,這不是考慮透視的簡單問題,您的臉部跟蹤算法還需要能夠處理更復雜的配置(例如眼睛可能不完全可見)。

因此,首先要做的是根據眼睛與x軸所成角度對齊的邊界矩形,如右圖所示(紅色部分表示眼睛之間的連接)。左圖顯示了一個典型的與軸對齊的邊界框,它不適用於此問題。

enter image description here

問題你考慮後的頭是對稱的,所以你知道在上面的圖中的頂部中間點是你頭頂的中間還簡化了。另外,考慮到典型的頭部可能會比頂部的頂部更大,那麼在下圖中,矩形的寬度接近前額的寬度。例如,您也可以考慮只在頭部上半部分的邊界矩形。

enter image description here

現在所有剩下的是在這個矩形定位某個對象。爲此,你需要增加對這個對象的描述來定位,所以它不是純粹的像素。我們可以定義「入口寬度」(EW)和「入口中點」(EM)。這個EW建立了另一個矩形(頭部)所需的寬度來定位它。所以,如果EW小於所需值,那麼在EW較大時分別升高該對象。請注意,頭部矩形的整個寬度通常會高估該對象的位置,因此您可以試驗寬度的百分比。 EM值有助於瞭解如何將這個對象置於頭部。在下圖中,EW是水平的藍色水平虛線,EM是其上的中間點。垂直的藍線表示你想在頭部矩形的頂部部分內移動這個對象的多少EM。

enter image description here

此對象需要其他唯一的特別之處在於被認爲是背景值。因此,在繪製這個對象時,很容易知道是否讓點完全透明(背景值)或完全不透明(其他)。這是我想到的基本概念。

+0

謝謝你的指導方針,現在我對如何解決這個問題有了更好的理解。但有一點我仍然不明白的是電子戰。假設最後一個數字是以透明背景爲png格式,那麼您如何處理從EW邊緣開始的放大/縮小比例,並確保另一個(右側)端部停在頭部矩形的預期(右側)端部?希望你瞭解我的問題? – Syma

+0

以最簡單的方式(如在視頻中),可以升級/縮小整個數字。假設EW =原始png圖中的400像素(我寧願有一個大的初始數字,並且總是隻下調它而不是高檔,因爲這可能會引入人爲因素)。另外假設你想將它放在寬度爲300像素的東西中。由於您必須將半徑縮小50個像素,因此假髮的寬度會減少100,並且高度會相應降低以保持寬高比。現在我想你的另一個問題是EW爲什麼適合這個問題。這很簡單:因爲你計算了EW,所以EW很合適。 – mmgp

+0

也許我現在明白你的疑惑了。假設這個對象的總寬度爲W,w是EW。如果我們需要按照某個比例k改變w,我們調整整個圖像的大小。因此,例如,如果w = 10個像素,並且我們希望將其減半,那麼我們必須將W減半(而不是僅減去5個像素,在這種情況下,如上面註釋中指出的那樣)。這是真正的疑問嗎? – mmgp