① 求教三種數字圖像插值演算法
何東健的《數字圖像處理》光碟第六章有前兩種的程序
完整程序已發你郵箱
核心代碼如下:
for(y = 0; y < nNewHeight; y++)
{
//指向新圖像第y行
//注意此處寬度和高度是新圖像的寬度和高度
pNewTemp = pNewBits;
pNewTemp += (nNewHeight - 1 - y) * nNewWidthBytes;
//針對圖像每列進行操作
for(x = 0; x < nNewWidth; x++)
{
//計算該像素在源圖像中的坐標
int y0 = (long) (y / fYZoomRatio + 0.5);
int x0 = (long) (x / fXZoomRatio + 0.5);
//判斷是否在源圖范圍內
if( (x0 >= 0) && (x0 < nOldWidth) &&
(y0 >= 0) && (y0 < nOldHeight))
{
//用雙線性插值
if(bBilinear)
{
unsigned char *pTemp = Interpolation (nOldWidth, nOldHeight,
(float)x0, (float)y0,
nOldWidthBytes, nMovedBits, pOldBits);
//復制像素
memcpy(pNewTemp, pTemp, nMovedBits);
delete [] pTemp ;
}
else
//最近鄰插值
{
//指向源圖像第y0行,第x0個像素
//注意此處寬度和高度應該互換
pOldTemp = pOldBits;
pOldTemp += (nOldHeight - 1 - y0) * nOldWidthBytes;
pOldTemp += x0 * nMovedBits;
//復制像素
memcpy(pNewTemp, pOldTemp, nMovedBits);
}
}
pNewTemp += nMovedBits;
}
}