隔行掃描之消除鋸齒(1)

 

隔行掃描是一項很重要的技術,有着廣泛的應用。

 

一幀圖像的數據量是相當大的,即使做過壓縮處理,對它進行一次隔行掃描,便可把數據減少爲原來的一半,然後再進行數據的傳輸,在解碼端再對進行隔行掃描的數據進行恢復處理,即通過已知的一半數據來恢復未知的一半數據,其最爲簡單的方法就是進行一次平均插值,通過其最近的兩個像素來得出當前像素的值。

 

原圖像

 

 

隔行掃描的代碼如下

 

void GetHalfPixels(BYTE* BufSrc, BYTE* BufDst, int SrcWidth, int SrcHeight)
{
 for( int i=0; i<SrcHeight; i+=2)
 {
  for (int j=0; j<SrcWidth; j++)
  {
   memcpy(BufDst+(i/2)*SrcWidth*3, BufSrc+(i*SrcWidth*3), SrcWidth*3);
  }
 }
}

 

隔行掃描

簡單平均插值的代碼如下(這裏只是對一行插值的代碼,通過其上下行的數據得到中間行的數據:

 

for(int j=0;j<=SrcWidth;j++)
    {
           *(BufDst+(i*SrcWidth*3)+j) = (*(BufSrc+(i-1)/2*SrcWidth*3+j)+*(BufSrc+(i+1)/2*SrcWidth*3+j))/2;
    }

 

插值圖像

 

很明顯,此圖像有明顯的鋸齒;

 

消除鋸齒的方法很多,一般是通過插值法來實現的,插值又分爲線性插值和非線性插值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章