问题标签 [bicubic]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
262 浏览

image-processing - 如何将内核转换为矩阵表示法?

我试图理解双三次卷积算法,但无法理解内核是如何作为一个宽函数给出的,

以分段函数形式给出的内核

变成了这个矩阵:

这个矩阵

我知道到达矩阵 a 被设置为 -0.5。无论我如何看待它,我都无法得出所示的非对称矩阵。

我已经浏览了Keys 的论文,但他没有扩展到矩阵表示法,我一直在努力解决如何到达那里。

任何见解将不胜感激。

0 投票
0 回答
396 浏览

python - Python中的精确轮廓查找算法

我手头的任务是在点云中找到特定的轮廓。需要尽可能准确地确定它们。因此必须使用高阶多项式插值。我有由网格中的点组成的数据,每个点都有自己的高度。

我用matplotlib.contours函数找到轮廓非常成功。然后我直接用matplotlib.cntr(C++算法)来确定具体的轮廓。但由于该文件使用行进平方算法(线性插值),找到轮廓的精度不够好。

我正在寻找解决此问题的替代方法。一个建议的解决方案是

  • 使用双三次插值来查找特定点周围的解析函数。
  • 其次是函数导数的计算。
  • 然后使用导数函数来确定导数保持在 0 的方向(使用点作为视点)。通过在该方向移动一小段距离,高度应保持不变。

使用这个算法应该找到一个轮廓。这个算法会起作用吗,在实现它时我可以走捷径吗(通过使用已经实现的功能)?

实现这个算法需要我付出相当大的努力,而且它可能只在理论上有效。我猜数字误差应该仍然存在(导数可能不完全是 0)并且最终甚至可能超过当前误差(使用行进方块)。我想考虑其他更简单、更快的方法来解决这个问题。

还有什么其他算法可以用来解决它?

有没有人遇到过类似的问题?你是怎么解决的?

0 投票
1 回答
378 浏览

c# - C# 中的双三次插值工作有点错误

我有一个在互联网上找到的用于调整图像大小的代码,但是有一个问题。我得到它的宽度和高度偏移 -1px。

我试图添加该偏移量,但它只是删除第一行,然后删除 1 px。

我期待得到这样的东西:Original

但我得到的这张图片在宽度和高度上有问题的偏移 -1px:问题输出

0 投票
0 回答
229 浏览

python - 双三次插值的 2 倍上采样

我想了解双三次插值是如何工作的,为此我选择了最简单的例子,2x upsample。

所以我知道我从一个图像数组开始,假设它是:

1 5 6 8 7
3 4 8 9 7
9 8 7 5 4
3 2 5 4 7

由于我想要 2x 上采样,我将在列和行之间添加 0:

1 0 5 0 6 0 8 0 7
0 0 0 0 0 0 0 0 0
3 0 4 0 8 0 9 0 7
0 0 0 0 0 0 0 0 0
9 0 8 0 7 0 5 0 4
0 0 0 0 0 0 0 0 0
3 0 2 0 5 0 4 0 7

我知道如何在新图像上获得 4,4 的像素。首先,我需要使用 1 5 6 8 进行三次插值并获得 P1,然后 P2 使用 2 4 8 9,然后 P3 使用 9 8 7 5 和 P4 使用 3 2 5 4。最后我需要对像素强度进行三次插值P1 P2 P3 P4。我主要关心的是让像素达到 4,5 或 5,4

现在我用 Python 编写这段代码:

感谢!

0 投票
0 回答
154 浏览

c++ - 带有热图像的 C++ 双三次插值

目前我在 STM32 上使用 MLX90641 传感器来获取温度网格。网格本身是 18x12 像素。我想将此网格双三次插值到 31x23 的网格,我认为这是最合乎逻辑的吗?

我的数学/微积分知识足以掌握双三次插值的概念。但是我无法弄清楚让它在代码中工作。

使用的语言是 C++ 和https://www.paulinternet.nl/?page=bicubic作为来源。

我是否循环遍历我的双精度数组并在每个值上调用函数 bicubicInterpolate?为什么他们使用参数double x,double y?

谁能帮我将此功能应用于我的双网格[192]?

谢谢!

0 投票
1 回答
151 浏览

c - CUDA 和 C 中的双三次插值 / 双三次插值如何应用于整个图像?

我目前正在用 C 语言为 Matlab 编写一个 MEX 文件,以首先旋转图像,然后对其进行双三次插值。在研究时,我在https://www.paulinternet.nl/?page=bicubic上发现了 C++ 中双三次插值的部分实现。但是,那里的代码只插入一个 4 x 4 的区域,并且只返回一个插值而不是足够的值来填充初始区域。

谁能告诉我如何将双三次插值应用于整个图像?图像是否被分成 4x4 块,然后进行插值?如何获取图像整个区域的值?另外,函数“bicubicInterpolate”中的“x”和“y”到底是什么?

我试图从这篇文章“https://stackoverflow.com/questions/20923956/bicubic-interpolation”的代码中看出这一点,但我不明白分数是如何计算的。

感谢您的帮助。

0 投票
0 回答
35 浏览

python - 为什么各种python库的双三次插值有区别?如何计算特定轴上的双三次插值?

我有两个问题。

  1. 为什么 PIL、CV2 和 skimage 的双三次结果彼此不同?虽然差异很小,但作为一种确定性方法,我想它应该对所有人都一样。
  2. 我想在矩阵的特定轴上计算双三次。例如,如果x.shape => (?,256,256,?),现在我想使用双三次调整x.shape => (?,512,512,?)的大小。有什么办法吗?PIL 和 CV2 对此不起作用。skimage 需要完整的形状,这在代码中引入了进一步的复杂性。顺便说一句,上面的 x 是一个 tensorflow 张量,因此如果有的话,更优选基于 tesorflow 的双三次调整大小。
0 投票
0 回答
64 浏览

c++ - 使用官方公式进行三次插值失败

当 a=-0.5 像往常一样时,我正在尝试使用下一个公式来实现三次插值方法。

我的线性插值和最近邻插值效果很好,但由于某种原因,三次插值因白色像素而失败,有时会将它们变成绿松石色,有时会弄乱另一种颜色。

例如使用旋转:(注意:请仔细查看右图,您会发现问题) 在此处输入图像描述

另一个具有更多黑色像素的示例。它几乎看起来很完美,但看狗的舌头。(强烈的白色像素再次变成绿松石色) 在此处输入图像描述

您可以看到我的线性插值实现效果很好:

由于实际旋转有效,我想我在代码中有一个我没有注意到的小错误,或者可能是数字错误或双/浮点错误。需要注意的是,我正常读取图像并将目标图像存储如下:

说明:

  1. 在我的三次插值函数中,srcPoint(newX 和 newY)是逆变换的“着陆点”。

  2. 在我的逆变换中,我没有使用像素的矩阵乘法,现在我只是使用旋转公式。这对于“数字错误”可能很重要。例如:

这是我的三次插值代码

我希望这里的人能够帮助我,谢谢!