隔行掃描是一項很重要的技術,有着廣泛的應用。
一幀圖像的數據量是相當大的,即使做過壓縮處理,對它進行一次隔行掃描,便可把數據減少爲原來的一半,然後再進行數據的傳輸,在解碼端再對進行隔行掃描的數據進行恢復處理,即通過已知的一半數據來恢復未知的一半數據,其最爲簡單的方法就是進行一次平均插值,通過其最近的兩個像素來得出當前像素的值。
原圖像
隔行掃描的代碼如下
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;
}
插值圖像
很明顯,此圖像有明顯的鋸齒;
消除鋸齒的方法很多,一般是通過插值法來實現的,插值又分爲線性插值和非線性插值。