基本插值,向上和向下缩放

时间:2012-01-05 08:48:37

标签: c++ algorithm image interpolation

我有2维阵列,它是单色图像的解释。我想将其调整为特定的已知尺寸。质量不是必不可少的。 如果我需要将其大小调整为2x或4x大小,那就没关系,只需使用最近邻插值,例如放置4个像素而不是一个像素。 基本上,如果我需要将图像插值到x1.5,我将增加x3的大小并将其减小x2。我对吗? 但是,当我需要将图像放大到3倍时,我该怎么办? 在插值数组中,应该如何放置像素? 如果您提供任何信息,代码,链接到其他网站将是很好的。

1 个答案:

答案 0 :(得分:4)

诀窍正在以相反的方式思考:不要试图将源图像的像素放入缩放图像中,而是在源图像中找到应放置在缩放图像中的像素。

它看起来像那样:

float scaleFactor = 3.0f;

for (int y=0; y < scaledImageHeight; y++)
  for (int x=0; x < scaledImageWidth; x++) {
    int sourceImageX = (int)std::max(x * 1.0f / scaleFactor, (float)(sourceImageWidth - 1));
    int sourceImageY = (int)std::max(y * 1.0f / scaleFactor, (float)(sourceImageHeight - 1));
    scaledImage[y * scaledImageWidth + x] = sourceImage[sourceImageY * sourceImageWidth + sourceImageX];
  }

出于演示目的,此代码将图像夹在右下方,因此程序不会因阵列溢出而崩溃(这就是std :: max的用途)。