1. 程式人生 > >影象演算法研究---Luma-Key,Chroma-Key摳圖

影象演算法研究---Luma-Key,Chroma-Key摳圖

在開始之前先確定數值以及符號約定
預設的影象空間是:RGB空間
使用和Shake一樣的float表示顏色數值,顏色範圍從 [0-1] 0:表示純白 1:表示純黑,0.5表示50%灰。
紅色使用  (1,0,0) 符號表示。
R 表示 紅通道
G 表示 綠通道
B 表示 藍通道
使用Apple Shake作為試驗軟體。
一.          Key 的基礎概念
什麼是Mattes:
Mattes 控制其他影象透明與不透明的影象。Mattes通常是隻包含一個通道,是一幅黑白影象,通常黑色的區域代表完全透明,而白色區域代表完全不透明,而灰色區域表示著半透明。
數字合成中的一個重要的操作就是從一幅影象中提取所要的前景,讓它與背景分離起來,這個過程就叫做提取Mattes,也叫做Keying,也就是我們所說的摳像。
摳像的方法有很多種,實際上每種合成軟體中都提供了很多商業外掛,而我們這裡要描述的不是這些商業的外掛的使用方法,而且數字合成中的一些基本基礎知識和基本摳像手段,以及這些摳像手段的原理及應用。
選擇那種摳像手段要取決於你的素材,而且拍的攝素材對前期的拍攝有一些要求,所以在摳像之前先要對素材進行分析。分析它的亮度範圍,分析它的色彩,分析它的遮擋關係,分析它的拍攝裝置(電影膠片攝影機器,廣播Dv攝影機等),分析要提取的範圍以及背景等,通常一種摳像手段是很難達到要求的,這時候就需要多種手段並用,達到最終目的,但是在應用之前首先要了解這些基本手段的原理,這樣才能夠靈活的使用它們,這也是本文所要達到的目的。
如果使用技術手段無法達到要求的時候,可以使用手繪Mask的方式進行手工提取,如果對於動態的序列幀,那麼就要對每一幀進行Mask動畫,但是這些工作量是非常大的,可以使用軟體摳像得到“大約”Matte,結合手繪Mask,就能減輕工作量。
為了更好的進行後期的摳像,在前期拍攝的時候,為了更好的提取所要的區域,通常使用藍屏或者綠屏做為背景,為什麼選用藍屏或者綠屏呢?這有很多的解釋,大家可以看使用通道操作進行摳像的部分可以有所瞭解。
下面我們講介紹幾種摳像基礎方法:
二.          Luma-Key (亮度摳像)
亮度摳像主要是基於影象的暗部和亮部來建立Matte的。
工作原理:
首先把一幅含有RGB通道的影象轉換為單通道的黑白影象,這幅黑白影象就代表著這幅影象的亮部和暗部區域。下面將設定兩個數值lowValue,hightValue,只要黑白影象的數值大於hightValue,那麼將會把這個數值設定為純白色,如果小於lowValue就設定為純黑色。下圖形象化的展示了上面文字。

1.jpg

三維的山峰表示了黑白影象的亮度分佈範圍,山峰高出的區域代表影象畫素的亮度越高。
使用2圖的一個切割刀,可以對原來的影象的亮度區域進行修改。
通過對黑白影象亮度區域進行操作,可以得到Matte,通常這個不會那麼的完美,然後對這個使用影象亮度得到的Matte進行二次處理,或者和其他方法生成的Matte進行合成,就能夠生成想要的Matte.
1.     使一幅RGB影象轉換為單通道的BW(黑白)影象。
亮度方程
L (亮度)= 0.29*R+0.59*G+0.12*B
使用Shake ColorX節點,實現公式。

2.jpg

 
解釋:使用ColorX節點可以對RGBAZ通道進行表示式控制。
表示使用29%的紅加上59%的綠加上12%的藍構成一幅黑白影象,
因為眼睛對綠色比較敏感,所以綠色所佔的比重要高於其他色成分。
    2 .對這幅黑白影象進行處理
       現在已經把影象的亮度資訊提出出來了,現在對這個黑白的亮度影象進行處理,就   得到想要的Matte.
       Shake 已經提供的LumaKey 不過在這裡我們使用shake其他節點
       來實現和完善一個MyLumakey。
       下圖是Shake節點網及解釋
3.jpg

提示:如果想對亮度黑白影象進行更加多的控制,可以使用Shake-〉Color-〉Lookup節點,可以用曲線調節整幅影象,如果想實現Expand的效果必須同時對RGB曲線同時進行調節。
  總結:Lumakey 的原理流程如下。

4.jpg

三.          Chroma-Key (色度摳像)
理解RGB三維空間:
大家在初中時候剛學習初等幾何時候,接觸過座標系的概念,方便的把代數問題視覺化,方便分析問題,普通的立體空間座標系,一般用xyz來表示,橫,豎,縱三個方向,如果使用畫素的RGB數值來表示三個向量方向,就可以組成一個新的座標系,這個座標系通常稱為RGB空間,因為RGB數值可以在顯示器上表示顏色,這樣把整個RGB空間使用顏色畫素完全填充,下圖就是顯示結果。可以看到一個立方體,實際上還有很多顏色空間。比如大家比較熟悉的hsv。

RGB_Space.jpg

下圖就是hsv空間,可以看到一個類似錐體的立體模型,不同形狀說明他們軸向實現的方程是不一樣的。

HSV.jpg

如果把一幅使用RGB表示的影象放入這個空間中,就可以通過這個座標系來觀察和分析整幅影象的紅綠藍顏色分佈了,因為引入了立體座標系,所以可以使用研究立體幾何的方法來研究和處理影象了。這裡將介紹Chroma-Key的一些原理,其中很多的概念和思路,大家可以借鑑一下,或者說發展一下,特別是對以後學習3D摳象有一個更加好的基礎。

picinrgb.jpg

一幅影象在rgb空間的分佈
點距離公式:
在高中時候肯定都學過兩點在2d和3d座標系中的距離公式,我們把它應用在我們的RGB空間中。
    假設在xyz座標系中有兩點p1(r1,g1,b1),p2(r2,g2,b2),距離為D.
RGB 空間中兩點之間距離公式:

dist-rgb.jpg

考慮一下P1,P2這兩個畫素點,如果這兩個畫素顏色接近,也就是他們的RGB數值接近,那麼D就會接近零,反映在顏色上就是接近黑色,如果兩個畫素點的顏色差異很大,也就是
RGB 數值之間差比較大,那麼D就會很大,因為我們實現約定了,RGB範圍在0-1之間,所以,最大距離如果大於1,那麼就顯示為白色,如果小於0,將顯示為黑色。
我們在拍攝時候藍屏,或者綠屏目的就是為了使前景和背景差異很大,所以上面的這個公式就能夠幫助我們生成一張距離圖。因為距離是單一浮點數,所以產生的這張圖是單通道黑白的。

ShakeScreenSnapz002.jpg

一張Distance map.
這張圖片假設公式中,P1點在前景,P2點是背景藍色的一張單一顏色影象,對這兩張圖片求距離得到的。女孩後面的黑色說明藍布與我們要提出的顏色相近,所以距離接近黑色,女孩身上很少的藍色,所以距離就接近白色,我們可以驚奇的發現,可以使用任何一種顏色作為比較色來提取這樣的距離圖。
有這樣一個“大約“Matte,我們可以對這個影象進行調色處理,比如增加對比度,可以繪製遮罩等進行處理。
理解了上面的一些以後,關於Chroma-Key的一些解釋就很好理解了。
Chroma-Key  顧名思義就是通過色調來提取Matte,上面我們說過,如果我們預先對我們的影象進行調色處理,對於想要的畫素,加大他與不想要的畫素顏色之間的距離,對於不想要的畫素,減小與不想要畫素的顏色之間的距離,就可以達到提取matte的目的。
Chroma-Key 是首先把影象轉換到HSV空間,然後對整幅影象進行調節,調節它的色調的偏移,範圍,飽和度偏移,範圍等,來達到上述目的。在Shake  中有一個很好的hsv調節工具,就是HueCurves,可以使用hue曲線對影象進行精細調節。
下圖就是HueCurves節點的引數區。

ShakeScreenSnapz003.jpg

下面我們把上面的理論總結一下,在shake中實現我們調節功能更加強大的MyChroma-Key。

MyChromaKey.jpg

這裡的ContrastLum是對影象進行對比度處理,可以在此段區域內,對Distance Map進行調色處理,使用HueCurves進行調節時候,比如可以降低bHue的紅色範圍數值,因為前景女孩穿的是含紅量高的衣服,比如可以增加rHue的紅色範圍數值,讓女孩前景的顏色更加遠離背景。
這也是很多商業摳象軟體的基本原理,因為摳象實際是把分佈在RGB空間中的一些部分給剔除掉的過程,比如Infeno中就使用三維來顯示一幅影象分佈,中間的三維物體表示剔出的區域,這樣對這個三維物體進行引數調節或者“建模“處理,就可以得到想要的matte。
大家可以按照這個思路,使用立體幾何的公式或者概念,加上Shake提供的方便的表示式節點,可以試驗出更加有意思的摳象或者調色技術.