【阅读笔记】基于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主页,欢迎访问

我的知乎主页,欢迎访问

相关推荐
Pandaconda12 分钟前
【Golang 面试题】每日 3 题(二十一)
开发语言·笔记·后端·面试·职场和发展·golang·go
Zhichao_9741 分钟前
【UE5 C++课程系列笔记】21——弱指针的简单使用
笔记·ue5
wjm0410061 小时前
贪心算法概述
算法·贪心算法
我搞slam2 小时前
全覆盖路径规划算法之BCD源码实现(The Boustrophedon Cellular Decomposition)
c++·算法·图搜索算法
Rossy Yan2 小时前
【C++数据结构——查找】二分查找(头歌实践教学平台习题)【合集】
开发语言·数据结构·c++·算法·查找·头歌实践教学平台·合集
Naiva2 小时前
ESP32-C3 入门笔记08:多帧数据解析
笔记·notepad++
埃菲尔铁塔_CV算法3 小时前
BOOST 在计算机视觉方面的应用及具体代码分析(二)
c++·人工智能·算法·机器学习·计算机视觉
Smark.3 小时前
(leetcode算法题)137. 只出现一次的数字 II
算法·leetcode
DB_UP3 小时前
基于XGBoost的集成学习算法
算法·机器学习·集成学习
刘大猫264 小时前
《docker基础篇:4.Docker镜像》包括是什么、分层的镜像、UnionFS(联合文件系统)、docker镜像的加载原理、为什么docker镜像要采用这种
人工智能·算法·计算机视觉