双线性插值是线性插值在二维网格上的扩展。 底层函数 f(x, y)
获取一个规则网格,然后插值处理决定值落在网格中的哪个点。 双线性插值等价于两次线性插值,首先是x轴,然后是y轴。 双线性插值常用在图像处理的缩放图像上。 CSI DSP库提供Q7,Q15,Q31和浮点数据类型的双线性插值。
算法
- 双线性插值函数使用的结构体实例描述了一个二维数据表。 对于浮点来说,结构体实例定义如下:
typedef struct
{
uint16_t numRows;
uint16_t numCols;
float32_t *pData;
} csky_bilinear_interp_instance_f32;
- 其中
numRows
指定表的行数, numCols
指定表的列数, pData
指向一个大小为 numRows*numCols
数组. 数据表 pTable
按行排列,按整数值索引。 就是说,表元素 (x,y) 落在 pTable[x + y*numCols]
,其中 x 和 y 是整数.
- 令
(x, y)
指定要插值的点,则定义:
XF = floor(x)
YF = floor(y)
- 插值的输出点计算如下:
f(x, y) = f(XF, YF) * (1-(x-XF)) * (1-(y-YF))
+ f(XF+1, YF) * (x-XF)*(1-(y-YF))
+ f(XF, YF+1) * (1-(x-XF))*(y-YF)
+ f(XF+1, YF+1) * (x-XF)*(y-YF)
注意,坐标 (x, y) 包括整数和小数部分。 整数部分指定使用表哪部分,小数控制插值处理
- 如果 (x,y) 超出了表的边界,双线性插值结果返回0。
- 参数
-
[in,out] | S | 指向插值结构体实例 |
[in] | X | 插值坐标 |
[in] | Y | 插值坐标 |
- 返回
- 插值结果
- 参数
-
[in,out] | S | 指向插值结构体实例 |
[in] | X | 12.20格式插值坐标 |
[in] | Y | 12.20格式插值坐标 |
- 返回
- 插值结果
- 参数
-
[in,out] | S | 指向插值结构体实例 |
[in] | X | 12.20格式插值坐标. |
[in] | Y | 12.20格式插值坐标 |
- 返回
- 插值结果
- 参数
-
[in,out] | S | 指向插值结构体实例 |
[in] | X | 12.20格式插值坐标 |
[in] | Y | 12.20格式插值坐标 |
- 返回
- 插值结果