【问题标题】:Bilinear interpolation on fisheye filter鱼眼滤波器的双线性插值
【发布时间】:2015-02-12 01:43:55
【问题描述】:

我必须使用双线性插值实现鱼眼变换。在转换一个像素之后,我不再有整数坐标,我想使用双线性插值将这个像素映射到整数坐标上。问题是我在 inetrnete 上的双线性插值中发现的所有内容(例如参见 Wikipedia)都做了相反的事情:它通过使用具有整数坐标的四个邻居的坐标来给出一个非整数像素的值。我想做相反的事情,即将具有非整数坐标的一个像素映射到具有整数坐标的四个邻居。肯定有一些我遗漏的东西,有助于理解我错在哪里。

编辑: 更清楚一点:假设我有起始图像的像素 (i,j)=(2,2)。鱼眼变换后我得到非整数坐标,例如(2.1,2.2)。我想将此新像素保存到新图像中,但由于非整数坐标,显然我不知道将其保存在哪个像素中。最简单的方法是截断坐标,但是图像质量不是很好:我必须使用双线性插值。尽管如此,我还是不明白它是如何工作的,因为我想将我的非整数像素拆分为具有新(转换后图像)整数坐标的相邻像素,但我发现仅描述了相反的操作,即查找非整数坐标开始来自四个整数像素 (http://en.wikipedia.org/wiki/Bilinear_interpolation)

【问题讨论】:

  • 能否请您更具体一些并添加一个清晰的示例。
  • 已编辑。我希望现在更清楚了。

标签: c++ algorithm image-processing


【解决方案1】:

你的问题有点不清楚。据我了解,您有一个常规图像,您想将其转换为类似鱼眼的图像。为此,我猜你从常规图像中获取每个像素坐标 {xr,yr},使用鱼眼变换获得类鱼眼图像中的相应坐标 {xf,yf}。您想将初始像素强度分配给目标像素,但是您不知道如何执行此操作,因为 {xf,yf} 不是整数值。

如果是这种情况,您实际上是在将问题倒退。您应该从鱼眼图像中的整数像素坐标开始,使用鱼眼逆变换获得常规图像中的浮点像素坐标,并使用双线性插值从最接近的4个整数坐标中估计浮点坐标的强度。

基本流程如下:

  1. 从鱼眼图像中的整数像素坐标(xf,yf) 开始(例如,鱼眼图像中的 (2,3))。您想估计与这些坐标关联的If 的强度。
  2. 通过使用鱼眼逆变换将(xf,yf) 映射到“起始”图像中,找到“起始”图像中的对应点。您在“起始”图像中获得浮点像素坐标(xs,ys)(例如,起始图像中的 (2.2,2.5))。
  3. 使用双线性插值来估计坐标(xs,ys)处的强度Is,基于“起始”图像中最接近的4个整数像素坐标的强度(例如(2,2),(2,3), (3,2), (3,3) 在起始图像中)
  4. 将Is 分配给If
  5. 从第 1 步开始重复。使用下一个整数像素坐标,直到找到鱼眼图像的所有像素的强度。

请注意,推导鱼眼反变换可能有点棘手,具体取决于方程式……但是,这就是必须执行图像重采样的方式。

【讨论】:

  • 我将问题编辑得更清楚(希望如此)。我想你理解我的问题,但我不确定你的解决方案......谢谢
  • @NomeCognome:加倍努力,这是正确的解决方案。
  • 我编辑了我的答案以使其更清晰。你能准确指出你不明白的地方吗?
  • 我已经有了反向和直接鱼眼变换的方程,但我有一些问题不明白哪个是正确使用的(现在我明白了为什么......)。我真的认为我从错误的方向解决问题......但是你谈论鱼眼图像中的整数像素,但我在她转换后没有整数像素。
  • @NomeCognome 您在步骤 1 中选择的整数像素坐标用于存储鱼眼变换后估计的强度。只是,为了估计这种强度,您使用反鱼眼变换来检查它在原始图像中的位置。然后在原始图像中进行双线性插值。
【解决方案2】:

你需要先找到反鱼眼变换,然后使用“backward wrap”从目标图像到源图像。

我会给你一个简单的例子。假设您想将图像扩大 1.5 的非整数因子。所以你有

x_dest = x_source * 1.5, y_dest = y_source * 1.5

现在,如果您遍历原始图像中的坐标,您将在目标图像中获得非整数坐标。例如,(1,1) 将映射到 (1.5, 1.5)。这是您的问题,通常是“前向包装”图像的问题。

相反,您反转转换并编写

x_source = x_dest / 1.5, y_source = y_dest / 1.5

现在您迭代目标图像像素。例如,目标图像中的像素 (4,4) 来自源图像中的 (4/1.5, 4/1.5) = (2.6, 2.6)。这些是非整数坐标,您使用源图像中的 4 个相邻像素来估计此坐标处的颜色(在我们的示例中,像素位于 (2,2)、(2,3)、(3,2) 和 ( 3,3))

【讨论】:

  • 是的,我想我是从错误的方向看问题...我会考虑并尝试了解如何正确解决问题!谢谢。
  • 你的回答战真的很有帮助!谢谢!
猜你喜欢
  • 2016-10-14
  • 2011-08-23
  • 2014-04-26
  • 1970-01-01
  • 2010-10-22
  • 1970-01-01
  • 2016-01-06
  • 2016-12-21
  • 1970-01-01
相关资源
最近更新 更多