现在的位置: 首页 > 综合 > 正文

隔行扫描之消除锯齿(1)

2012年04月08日 ⁄ 综合 ⁄ 共 635字 ⁄ 字号 评论关闭

 

隔行扫描是一项很重要的技术,有着广泛的应用。

 

一帧图像的数据量是相当大的,即使做过压缩处理,对它进行一次隔行扫描,便可把数据减少为原来的一半,然后再进行数据的传输,在解码端再对进行隔行扫描的数据进行恢复处理,即通过已知的一半数据来恢复未知的一半数据,其最为简单的方法就是进行一次平均插值,通过其最近的两个像素来得出当前像素的值。

 

原图像

 

 

隔行扫描的代码如下

 

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;
    }

 

插值图像

 

很明显,此图像有明显的锯齿;

 

消除锯齿的方法很多,一般是通过插值法来实现的,插值又分为线性插值和非线性插值。

抱歉!评论已关闭.