CMSIS-DSP
Verison 1.1.0
CMSIS DSP Software Library
|
Functions | |
__STATIC_INLINE float32_t | arm_bilinear_interp_f32 (const arm_bilinear_interp_instance_f32 *S, float32_t X, float32_t Y) |
Floating-point bilinear interpolation. | |
__STATIC_INLINE q31_t | arm_bilinear_interp_q31 (arm_bilinear_interp_instance_q31 *S, q31_t X, q31_t Y) |
Q31 bilinear interpolation. | |
__STATIC_INLINE q15_t | arm_bilinear_interp_q15 (arm_bilinear_interp_instance_q15 *S, q31_t X, q31_t Y) |
Q15 bilinear interpolation. | |
__STATIC_INLINE q7_t | arm_bilinear_interp_q7 (arm_bilinear_interp_instance_q7 *S, q31_t X, q31_t Y) |
Q7 bilinear interpolation. |
Bilinear interpolation is an extension of linear interpolation applied to a two dimensional grid. The underlying function f(x, y)
is sampled on a regular grid and the interpolation process determines values between the grid points. Bilinear interpolation is equivalent to two step linear interpolation, first in the x-dimension and then in the y-dimension. Bilinear interpolation is often used in image processing to rescale images. The CMSIS DSP library provides bilinear interpolation functions for Q7, Q15, Q31, and floating-point data types.
Algorithm
typedef struct { uint16_t numRows; uint16_t numCols; float32_t *pData; } arm_bilinear_interp_instance_f32;
numRows
specifies the number of rows in the table; numCols
specifies the number of columns in the table; and pData
points to an array of size numRows*numCols
values. The data table pTable
is organized in row order and the supplied data values fall on integer indexes. That is, table element (x,y) is located at pTable[x + y*numCols]
where x and y are integers.(x, y)
specify the desired interpolation point. Then define: 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)Note that the coordinates (x, y) contain integer and fractional components. The integer components specify which portion of the table to use while the fractional components control the interpolation processor.
__STATIC_INLINE float32_t arm_bilinear_interp_f32 | ( | const arm_bilinear_interp_instance_f32 * | S, |
float32_t | X, | ||
float32_t | Y | ||
) |
[in,out] | *S | points to an instance of the interpolation structure. |
[in] | X | interpolation coordinate. |
[in] | Y | interpolation coordinate. |
References arm_bilinear_interp_instance_f32::numCols, arm_bilinear_interp_instance_f32::numRows, and arm_bilinear_interp_instance_f32::pData.
__STATIC_INLINE q15_t arm_bilinear_interp_q15 | ( | arm_bilinear_interp_instance_q15 * | S, |
q31_t | X, | ||
q31_t | Y | ||
) |
[in,out] | *S | points to an instance of the interpolation structure. |
[in] | X | interpolation coordinate in 12.20 format. |
[in] | Y | interpolation coordinate in 12.20 format. |
References arm_bilinear_interp_instance_q15::numCols, arm_bilinear_interp_instance_q15::numRows, and arm_bilinear_interp_instance_q15::pData.
__STATIC_INLINE q31_t arm_bilinear_interp_q31 | ( | arm_bilinear_interp_instance_q31 * | S, |
q31_t | X, | ||
q31_t | Y | ||
) |
[in,out] | *S | points to an instance of the interpolation structure. |
[in] | X | interpolation coordinate in 12.20 format. |
[in] | Y | interpolation coordinate in 12.20 format. |
References arm_bilinear_interp_instance_q31::numCols, arm_bilinear_interp_instance_q31::numRows, and arm_bilinear_interp_instance_q31::pData.
__STATIC_INLINE q7_t arm_bilinear_interp_q7 | ( | arm_bilinear_interp_instance_q7 * | S, |
q31_t | X, | ||
q31_t | Y | ||
) |
[in,out] | *S | points to an instance of the interpolation structure. |
[in] | X | interpolation coordinate in 12.20 format. |
[in] | Y | interpolation coordinate in 12.20 format. |
References arm_bilinear_interp_instance_q7::numCols, arm_bilinear_interp_instance_q7::numRows, and arm_bilinear_interp_instance_q7::pData.