excel学习库

excel表格_excel函数公式大全_execl从入门到精通

数字图像处理之双线性插值

双线性插值是指在两个方向上应用线性插值。因此,它使用 4 个最近邻,取它们的加权平均值来产生输出

那么,我们首先讨论什么是线性插值以及它是如何执行的?

线性插值意味着我们使用线性多项式来估计值。假设我们有 2 个点,其值为 10 和 20,并且我们想要猜测它们之间的值。简单的线性插值看起来像这样

最接近的值给予更多的权重(参见上图中的1/3和2/3)。对于 2D(例如图像),我们必须沿行执行此操作两次,然后沿列执行此操作两次,这就是为什么它被称为双线性插值。

双线性插值算法:

假设我们有 4 个像素位于 (0,0)、(1,0)、(0,1) 和 (1,1),并且我们想要找到 (0.3,0.4) 处的值。

  1. 首先,通过线性插值沿行查找值,即位置 A:(0,0.4) 和 B:(1,0.4) 处的值。

  2. 得到A和B处的值后,对A和B之间的点(0.3,0.4)进行线性插值,这就是最终结果。

让我们看看如何对图像执行此操作。我们从之前的博客中获取相同的 2×2 图像,并希望将其放大 2 倍,如下所示

与我们在上一篇博客中采用的假设相同,像素的大小为 1 并且位于中心。

  • 让我们以“P1”为例。首先,我们找到 P1 在输入图像中的位置。通过将 4×4 图像投影到输入 2×2 图像上,我们得到 P1 的坐标为 (0.25,0.25)。(更多详情,请参阅此处

  • 由于 P1 是边界像素并且其左侧没有值,因此 OpenCV 复制了边界像素。这意味着原始边缘的行或列将被复制到额外的边框(填充)。OpenCV 有不同的方法来添加边框,您可以在此处查看

  • 所以,现在我们的输入图像(边界复制后)看起来像这样。请注意,红色值显示输入图像。

  • 为了找到 P1 的值,我们首先可视化 P1 在输入图像(上一步图像)中的位置。下图显示了左上角的2×2输入图像区域以及P1在其中的位置。

图片1
  • 在应用双线性插值之前,让我们看看权重是如何分布的。

MatlabOpenCV的插值结果不同,因为它们的权重分布不同这里我只针对OpenCV进行解释。

在 OpenCV 中,权重根据以下方程分布

fx = (float)((dx+0.5)*scale_x - 0.5);

sx = cvFloor(fx); fx -= sx;

其中 dx 是未知像素的列索引,fx 是分配给右侧像素的权重,1-fx 分配给左侧像素。Scale_x 是输入宽度与输出宽度的比率。类似地,对于 y,dy 是行索引,scale_y 是现在的高度比。

了解了权重是如何计算后,让我们再次回到问题上来。

  • 对于P1,行索引和列索引均为dx,且dy =0,因此fx = 0.75且fy =0.75。

  • 我们对 A 和 B 都应用权重 fx 的线性插值(参见 Image-1)为 0.75*10(右)+ 0.25*10 = 10(在上面的算法中进行了解释)

  • 现在,对于 P1,在 A 和 B 之间应用线性插值,权重 fy 为 0.75*10(B) +0.25*10(A) = 10

  • 所以,我们得到 P1 = 10。同样,对其他像素重复此操作。

我们得到的最终结果如下图所示:

这会产生比最近邻更平滑的结果,但是对于边缘等尖锐过渡的结果并不理想。

在下一篇博客中,我们将讨论双三次插值。希望您喜欢阅读。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2024年12月    »
1
2345678
9101112131415
16171819202122
23242526272829
3031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
      友情链接