双线性插值可放大位图图像

f0r*_*fun 7 c++ interpolation cuda image-processing image-resizing

我是一名学生,我的任务是通过调用CUDA的并行性来优化图像的双线性插值.

图像以24位.bmp格式给出.我已经有一个.bmp的阅读器,并已将像素存储在一个数组中.

现在我需要在阵列上执行双线性插值.我不明白它背后的数学(即使在浏览了wiki文章和其他Google结果之后).因此,我无法提出算法.

是否有人可以帮助我链接到一维阵列上现有的双线性插值算法?或者也许链接到一个开源图像处理库,利用双线性和双三次插值来缩放图像?

nsa*_*ers 37

理解双线性插值的最简单方法是理解1D中的线性插值.

这第一个数字应该给你回忆中学数学.鉴于一些位置一个在我们想知道F(一),我们采取了邻近的"已知"值,并在两者之间装线.

1D中的线性插值.

所以我们只使用旧的中学方程式y = mx + b和y-y1 = m(x-x1).没有什么花哨.

我们基本上将这个概念延伸到2-D以获得双线性插值.我们可以通过三次插值来解决为任何a,b找到f(a,b)的问题.仔细研究下一个数字.不要被所有标签吓倒.它实际上非常简单.

双线性插值为三维1D插值.

对于双线性插值,我们再次使用相邻点.现在有四个,因为我们是二维的.诀窍是一次一维地攻击问题.

我们将(a,b)投射到两侧并首先计算两个(一维!)插值线.

  • f(a,y j)其中y j保持不变
  • f(a,y j + 1)其中y j + 1保持不变.

现在只有最后一步.取你计算的两个点,f(a,y j)f(a,y j + 1),并在它们之间插入一条线.那是蓝色的,在图中从左到右,经过f(a,b).沿着最后一行插值可以得到最终答案.

我将为你留下2-D案例的数学.如果你从图表中工作并不难.自己完成它将帮助你真正了解正在发生的事情.

最后一点注意事项,前两个插值选择哪一侧并不重要.您可以选择顶部和底部,然后在这两者之间完成第三条插补线.答案是一样的.


Ale*_*nze 9

通过用积分因子缩放边来放大图像时,可以将结果视为原始图像,并在原始像素之间插入额外的像素.

查看图像调整示例中的图片.

维基百科f(x,y)=...本文中的公式为您提供了一种计算f插入像素颜色的方法:

在此输入图像描述

对于每个插入的像素,您可以组合它周围的4个原始像素(Q11,Q12,Q21,Q22)的颜色.组合取决于插入的像素与周围原始像素之间的距离,它们中的一个与它们中的一个越近,它们的颜色越接近:

在此输入图像描述

原始像素显示为红色.插入的像素显示为绿色.

这就是主意.

如果您使用非积分因子缩放边,公式仍然有效,但现在您需要重新计算所有像素颜色,因为您不能只采用原始像素并只是在它们之间插入额外的像素.