【阅读笔记】基于FPGA的红外图像二阶牛顿插值算法的实现

图像缩放技术在图像显示、传输、分析等多个领域中扮演着重要角色。随着数字图像处理技术的发展,对图像缩放质量的要求也越来越高。二阶牛顿插值因其在处理图像时能够较好地保持边缘特征和减少细节模糊,成为了图像缩放中的一个研究热点。

一、 二阶牛顿插值的基本原理

牛顿插值公式是一种基于商差的插值方法,它通过已知的数据点构造一个多项式函数来推断未知的数据点。牛顿插值多项式公式如下:

N ( x ) = f ( x 0 ) + Δ f ( x 0 ) 1 ! ( x − x 0 ) + Δ 2 f ( x 0 ) 2 ! ( x − x 0 ) 2 + . . . + Δ 2 f ( x 0 ) n ! ( x − x 0 ) n N(x) = f(x_0) + \frac{\Delta f(x_0)}{1!}(x - x_0) + \frac{\Delta^2 f(x_0)}{2!}(x - x_0)^2+...+\frac{\Delta^2 f(x_0)}{n!}(x - x_0)^n N(x)=f(x0)+1!Δf(x0)(x−x0)+2!Δ2f(x0)(x−x0)2+...+n!Δ2f(x0)(x−x0)n

阶数 n n n的取值越大,插值余项就越小,得到的插值就越精确。

但是考虑到算法的复杂度以及 FPGA的资源有限等实际问题 ,通常 n n n值取的比较小,一般取2,对于二阶牛顿插值,其基本形式如下:

N ( x ) = f ( x 0 ) + Δ f ( x 0 ) 1 ! ( x − x 0 ) + Δ 2 f ( x 0 ) 2 ! ( x − x 0 ) 2 N(x) = f(x_0) + \frac{\Delta f(x_0)}{1!}(x - x_0) + \frac{\Delta^2 f(x_0)}{2!}(x - x_0)^2 N(x)=f(x0)+1!Δf(x0)(x−x0)+2!Δ2f(x0)(x−x0)2

其中, Δ f ( x 0 ) \Delta f(x_0) Δf(x0)表示一阶差分, \\Delta\^2 f(x_0) 表示二阶差分。通过这些差分,牛顿插值能够提供一个多项式,该多项式不仅通过所有已知点,而且能够预测中间值。

二、二阶牛顿插值

在图像缩放中,二阶牛顿插值可以用于计算新像素点的值。具体步骤如下:

2.1 水平方向插值

首先,对原始图像进行水平方向的插值计算,以得到中间图像。对于目标像素点( p(x_0, y_0) ),根据其在水平方向上映射到原始图像中的位置,选择邻域内相关性最大的一组源像素点,通过二阶牛顿插值算法t计算水平方向的目标像素值。

计算f的像素值,可以用f1、f2、f3个原始像素点,或者f2、f3、f4三个原始像素点,两个方式插值公式分别为:

F 1 = f 1 + Δ f 1 t + Δ 2 f 1 2 ! ( t − 1 ) 2 F_1=f_1+\Delta f_1t+\frac{\Delta^2 f_1}{2!}(t-1)^2 F1=f1+Δf1t+2!Δ2f1(t−1)2

F 2 = f 2 + Δ f 2 ( t − 1 ) + Δ 2 f 2 2 ! ( t − 1 ) ( t − 2 ) F_2=f_2+\Delta f_2(t-1)+\frac{\Delta^2 f_2}{2!}(t-1)(t-2) F2=f2+Δf2(t−1)+2!Δ2f2(t−1)(t−2)

其中, Δ f 1 \Delta f_1 Δf1表示一阶差分, \\Delta\^2 f_1 表示二阶差分。

将 t = 1 + Δ x t=1+\Delta x t=1+Δx带入上式,公式化简后得到下式:

F 1 = 1 2 ( Δ x 2 − Δ x ) f 1 + ( − Δ x 2 + 1 ) f 2 + 1 2 ( Δ x 2 + Δ x ) f 3 F_1=\frac{1}{2}(\Delta x^2-\Delta x)f_1+(-\Delta x^2+1)f_2+\frac{1}{2}(\Delta x^2+\Delta x)f_3 F1=21(Δx2−Δx)f1+(−Δx2+1)f2+21(Δx2+Δx)f3

F 2 = 1 2 ( Δ x 2 − Δ x ) f 4 + ( 1 2 Δ x 2 − 3 2 Δ x + 1 ) f 2 + ( − Δ x 2 + 2 Δ x ) f 3 F_2=\frac{1}{2}(\Delta x^2-\Delta x)f_4+(\frac{1}{2}\Delta x^2-\frac{3}{2}\Delta x+1)f_2+(-\Delta x^2+2\Delta x)f_3 F2=21(Δx2−Δx)f4+(21Δx2−23Δx+1)f2+(−Δx2+2Δx)f3

当 f点处于边缘位置时,如果接近 f2 ,则希望计算目标像素的像素值更接近 f2 的像素值,如果接近 f3,则希望计算目标像素的像素值更接近f3 的像素值。

对比 F 1 、 F 2 F1、F2 F1、F2数值,差值越小表示相似度越大,则用其插值公式

2.2 垂直方向插值

接着,对中间图像进行垂直方向的插值计算,则采用对应方向的源像素插值计算得到目标像素值。

三、结论

该算法在一定程度上可以消除边缘模糊的现象,不会 出现锯齿,而且算法相对 简单,同时还增加了边缘信息的白适应保护功能,使得差值后的图像质量更高。同时没有使用外部存储器进行数据缓存,减少资源,并且缩短了一帧的延迟时间。

四、效果对比

仿真对比bicubic、二阶牛顿插值结果,放大系数1.5。二阶牛顿插值算法可有效改善边缘模糊和锯齿效应

bicubic结果如下:

二阶牛顿插值结果如下:

测试代码路径:

https://github.com/AomanHao/ISP_Image_Interpolation/tree/master/Interpolation

参考文献


我的个人博客主页,欢迎访问

我的CSDN主页,欢迎访问

我的GitHub主页,欢迎访问

我的知乎主页,欢迎访问

相关推荐
聚客AI8 小时前
🙋‍♀️Transformer训练与推理全流程:从输入处理到输出生成
人工智能·算法·llm
大怪v10 小时前
前端:人工智能?我也会啊!来个花活,😎😎😎“自动驾驶”整起!
前端·javascript·算法
惯导马工12 小时前
【论文导读】ORB-SLAM3:An Accurate Open-Source Library for Visual, Visual-Inertial and
深度学习·算法
骑自行车的码农14 小时前
【React用到的一些算法】游标和栈
算法·react.js
博笙困了14 小时前
AcWing学习——双指针算法
c++·算法
moonlifesudo14 小时前
322:零钱兑换(三种方法)
算法
NAGNIP1 天前
大模型框架性能优化策略:延迟、吞吐量与成本权衡
算法
美团技术团队1 天前
LongCat-Flash:如何使用 SGLang 部署美团 Agentic 模型
人工智能·算法
Fanxt_Ja2 天前
【LeetCode】算法详解#15 ---环形链表II
数据结构·算法·leetcode·链表
侃侃_天下2 天前
最终的信号类
开发语言·c++·算法