1. 程式人生 > >數字視訊基礎(四)

數字視訊基礎(四)

轉自https://blog.csdn.net/shanghaiqianlun/article/details/26599537

 

3. 常用視訊處理演算法


3.1 影象的縮放
     所謂影象縮放就是創立新的畫素位置並對這些新位置賦灰度值。比如,有一副大小為500x500畫素的影象,想把它放大1.5倍,也即750x750畫素,概念上看,一種最容易的形象化放大方法就是在原始影象上,放一個虛構的750x750的柵格。很顯然柵格的間隔小於1個畫素,因為,我們在一個較小的影象上去擬合它。為了對覆蓋層上的任何電進行灰度賦值,我們在原影象上尋找最靠近的畫素並把它的灰度付給柵格上的新畫素。當對覆蓋柵格的全部點都賦完值之後,就得到放大的影象。這種灰度賦值方法叫最近鄰放大方法。還有一種方法,就是採用4個最鄰近點的雙線性插值來對灰度賦值。當然還有其它多種插值方法。但最常見的就是最近鄰法和雙線性插值法。

下面給出雙線性插值演算法:

                                  

(1)  計算源影象與目標影象寬與高的比例

       w0: 表示源影象的寬度

       h0: 表示源影象的高度

       w1 :表示目標影象的寬度

       h1: 表示目標影象的高度

      floatfw = float(w0-1)/(w1-1);

      floatfh = float(h0-1)/(h1-1);
(2)  針對目標影象的一個點(x, y),計算在源影象中的對應座標,結果為浮點數。
      floatx0 = x * fw;

      floaty0 = y * fh;

      intx1 = int(x0);

      intx2 = x1 + 1;

      inty1 = int(y0);

      inty2 = y1+1;

      所求的源影象中的四個點座標為(x1, y1) (x1, y2) (x2, y1) (x2,y2)

(3)  求周圍四個點所佔的權重比值

      如上圖,

      fx1 = x0 - x1;

      fx2 = 1.0f - fx1;

      fy1 = y0 - y1;

      fy2 = 1.0f - fy1;

      float s1 = fx1*fy1;

      float s2 = fx2*fy1;

      float s3 = fx2*fy2;

      float s4 = fx1*fy2;

我們以value(座標)來代表取得此點的座標值,則:

      value(x0,y0)= value(x2,y2)*s1+value(x1,y2)*s2+value(x1,y1)*s3+value(x2,y1)*s4;

如果 對上述運算不夠明白 的話,可以這樣來求。

我們先要求得(x0,y1) 和(x0,y2)的畫素值。

則:

      floatvalue(x0,y1) = value(x1,y1)*fx2 + value(x2,y1)*fx1;

      floatvalue(x0,y2) = value(x1,y2)*fx2 + value(x2,y2)*fx1;

註釋:離某點越近,離權重越大,故取其與1的差值。

      floatvalue(x0,y0) = value(x0,y1)*fy2 + value(x0,y2)*fy1;

                             

    最近鄰法的需要計算2個畫素之間的距離,兩個畫素(x,y)和(s,t)之間的距離可以有多種表示:

                              

 

3.2 視訊降噪演算法


3.2.1 空域濾波

                           

     一般來說,在M X N的影象f上,用m X n大小的濾波器掩模進行線性濾波由下式給出:

                                     

這裡,    a = (m -1)/2,b=(n-1)/2。

x = 0,1,。。。,M-1;y = 0,1,。。。,N-1

g為濾波獲得的影象。

常用模板:

                                     

                              

        空域濾波會造成影象模糊,改進方法是對灰度差值和畫素距離等資訊改變模板的加權係數。如雙邊濾波演算法。

         中值濾波:對模板覆蓋的區域所有畫素的值做排序,將處於中間的值,作為濾波輸出。

 

3.2.2 時域濾波

                               

       K與| s(x,y,t) – g(x,y,t-Tp) |有關。運動越大,k越趨向1,濾波最弱。靜止影象,k = 0,濾波最強。通過檢測消除運動鬼影。

 

3.2.3時空濾波
         空域濾波只取決於單幀,雖然每一幀看起來比較乾淨,但是幀與幀之間看起來並不是很平靜,顯得噪聲好像還是比較大,並且影象會模糊,主觀感覺不好,對視訊來說,空域濾波並不是很好。時域濾波效果較好,但是,對運動場景,時域濾波會造成鬼影。

         對運動物件,人眼的解析度極低。所以適合使用空域濾波;而對靜止部分,時域濾波會保持原有影象的清晰度,且對噪聲濾波最強,也不會有鬼影。所以我們可以通過運動檢測,自適應選擇空域濾波和時域濾波演算法。

         下面以DM8168的時空濾波器為例來說明:

                           

                       
        temporal_strength:時域濾波強度。如果m大於temporal strength時,就不進行時域濾波,僅執行空域濾波。a0表示

       噪聲的估計是為了考慮在噪聲比較小的時候,空域濾波的強度低一些,噪聲比較大的時候,空域噪聲的強度強一些,以避免影象因空域濾波而帶來的模糊過大。噪聲估計的方法是使用當前輸入影象與上一輸出幀Ip之間的畫素差絕對值的均值來衡量。這個均值越大,說明噪聲越大,否則說明噪聲越下。

 

3.3 去隔行演算法


3.3.1 概述
         前面我們討論過隔行視訊在逐行顯示器上顯示的問題。這一節我們討論如何解決這個問題,這就是去隔行演算法,其實,這個演算法我們幾乎天天都能體會到,因為現在的電視機就需要解決去隔行問題。我們的電視視訊大都是隔行掃描的視訊,而我們的電視機卻由隔行掃描的電視機演變為逐行掃描的電視機了,所以,有視訊去隔行的問題。

       通過下面的幾張示意圖,理解去隔行。

                              

                                

                                

                             

                             

                         

                        

                       

 

 

3.3.2 空域去隔行演算法
(1)行復制

                         

說明:

是空域位置
是輸出“幀”, 是輸入“場”,所以輸出的幀頻應該等於場頻。
是在偶場的偶行,和在奇場的齊行,畫素內容保持不變。
 行數為一場行數的2倍,水平解析度一樣。

                          

(2)線性濾波

                      

 

3.3.3 時空域去隔行演算法
(1)場間行平均

                       

(2)垂直時域中值濾波:

                      

     演算法多種多樣,都是在去隔行效果、影象清晰度、演算法複雜度、硬體複雜度等方面的一種平衡。

 

3.4 視訊增強演算法
      我們經常使用的視訊增強演算法是空間域增強,這種增強演算法是對構成影象的畫素直接進行操作,從而達到增強影象的目的。

一般:

                   g(x, y) = T[f(x, y)]

      其中g(x,y)是處理後的影象,f(x, y)是輸入的影象,T是對f的一種操作運算,其定義是在(x,y)的鄰域。點(x,y)的鄰域是以(x,y)為中心的矩形或正方形子畫素。

                     

      如果T僅僅是對(x,y)處的單個畫素進行操作,則稱為灰度級變換。如果T是對一個(x,y)鄰居區域做運算,如3x3,5x5等鄰域,則稱為模板濾波。

 

3.4.1 基本的灰度變換
(1)灰度反轉(黑熱白熱極性反轉)

        也就是我們在熱像儀中的黑熱和白熱影象。如下圖:對左邊白熱的圖做了反轉變換,變換成黑熱影象:

         s = L – r 這裡r是原畫素灰度值;s是變換後的灰度值;L是最大灰度值。

                                   

                        

     顯然,右邊黑熱影象的細節看得更清楚。

(2)伽瑪校正

         s = c  c和 是正的常數。

                     


顯然,我們從上面我們可以看到,  < 1,可拉伸亮度較低的影象,以看清昏暗部分的細節。而  > 1,可拉伸亮度較高的影象,以看清明亮部分的細節。

                           

                          

 

(3)分段線性變換函式

         可用於拉伸某一灰度範圍的對比度。

                          

 

3.4.2 直方圖均衡
(1)直方圖的概念

        如果對於灰度級[0,L-1]的影象,那麼該影象每個灰度級的畫素個數,我們稱為該影象的直方圖。用離散函式來表示就是:h( ,這裡 是第k級灰度, 是影象中灰度級 的畫素個數。我們經常以影象中畫素的總數(用n表示)來除它的每一個值得到歸一化的直方圖。因此,一個歸一化的直方圖由P( 給出,這裡k=0, 1 … L-1。簡單地說,P( 給出了灰度級 發生的概率估計值。注意,一個歸一化的直方圖,其所有部分之和應等於1。

                     


         從直方圖中我們就可以看出影象質量的好壞,很明顯,直方圖分佈比較均勻的影象具有比較搞得對比度和多變的灰度色調。反過來,如果使一個直方圖不太均勻的影象的直方圖變得相對比較均勻,那麼就可能提高該影象的質量。這就是直方圖均衡影象增強演算法。

 

(2)直方圖均衡

       如果一副影象中灰度級 出現的概率近似為

                    

    這其中n為影象中畫素總和, 為灰度級 的畫素個數,L為影象中的可能灰度級總數,可以證明變換

                   

     使得變換後的影象直方圖均衡化,或直方圖線性化。

                       

 

3.4.3 Retinix演算法
         一般我們可用把一副影象看作入射光(L)和反射光(R)的乘積,L可用看做一種影響影象質量的干擾(如霧霾昏暗光線等等),而R可以看作是不含干擾的清晰影象,也就是說,獲得的影象可以看成是乾淨的影象與噪聲的乘積。

         S(x,y) = R(x,y) * L(x,y)      (1)

其中S為受到噪聲干擾的影象,R是想獲得乾淨的影象,L是噪聲。

對(1)兩邊取對數可得到:

         r(x,y) = s(x,y) + l(x,y)

         s(x,y) = log(S(x,y); r(x,y) =log(R(x,y); l(x,y) = log(L(x,y))

                            

因為S(x,y)已知,所以關鍵是如何求L(x,y)。一般我們通過對S(x,y)進行很強的濾波來獲得近似的L(x,y),從而求解除R(x,y)。