1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2 <html xmlns="http://www.w3.org/1999/xhtml">
4 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5 <title>CMSIS DSP Software Library: Bilinear Interpolation</title>
6 <link href="tabs.css" rel="stylesheet" type="text/css"/>
7 <link href="search/search.css" rel="stylesheet" type="text/css"/>
8 <script type="text/javaScript" src="search/search.js"></script>
9 <link href="doxygen.css" rel="stylesheet" type="text/css"/>
11 <body onload='searchBox.OnSelectItem(0);'>
12 <!-- Generated by Doxygen 1.7.2 -->
13 <script type="text/javascript"><!--
14 var searchBox = new SearchBox("searchBox", "search",false,'Search');
16 <div class="navigation" id="top">
19 <li><a href="index.html"><span>Main Page</span></a></li>
20 <li><a href="modules.html"><span>Modules</span></a></li>
21 <li><a href="annotated.html"><span>Data Structures</span></a></li>
22 <li><a href="files.html"><span>Files</span></a></li>
23 <li><a href="examples.html"><span>Examples</span></a></li>
25 <div id="MSearchBox" class="MSearchBoxInactive">
27 <img id="MSearchSelect" src="search/mag_sel.png"
28 onmouseover="return searchBox.OnSearchSelectShow()"
29 onmouseout="return searchBox.OnSearchSelectHide()"
31 <input type="text" id="MSearchField" value="Search" accesskey="S"
32 onfocus="searchBox.OnSearchFieldFocus(true)"
33 onblur="searchBox.OnSearchFieldFocus(false)"
34 onkeyup="searchBox.OnSearchFieldChange(event)"/>
35 </span><span class="right">
36 <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
45 <a href="#func-members">Functions</a> </div>
46 <div class="headertitle">
47 <h1>Bilinear Interpolation<br/>
49 [<a class="el" href="group__group_interpolation.html">Interpolation Functions</a>]</small>
52 <div class="contents">
53 <table class="memberdecls">
54 <tr><td colspan="2"><h2><a name="func-members"></a>
55 Functions</h2></td></tr>
56 <tr><td class="memItemLeft" align="right" valign="top">static __INLINE <a class="el" href="arm__math_8h.html#a4611b605e45ab401f02cab15c5e38715">float32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group___bilinear_interpolate.html#gab49a4c0f64854903d996d01ba38f711a">arm_bilinear_interp_f32</a> (const <a class="el" href="structarm__bilinear__interp__instance__f32.html">arm_bilinear_interp_instance_f32</a> *S, <a class="el" href="arm__math_8h.html#a4611b605e45ab401f02cab15c5e38715">float32_t</a> X, <a class="el" href="arm__math_8h.html#a4611b605e45ab401f02cab15c5e38715">float32_t</a> Y)</td></tr>
57 <tr><td class="memItemLeft" align="right" valign="top">static __INLINE <a class="el" href="arm__math_8h.html#adc89a3547f5324b7b3b95adec3806bc0">q31_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group___bilinear_interpolate.html#ga202a033c8a2ad3678b136f93153b6d13">arm_bilinear_interp_q31</a> (<a class="el" href="structarm__bilinear__interp__instance__q31.html">arm_bilinear_interp_instance_q31</a> *S, <a class="el" href="arm__math_8h.html#adc89a3547f5324b7b3b95adec3806bc0">q31_t</a> X, <a class="el" href="arm__math_8h.html#adc89a3547f5324b7b3b95adec3806bc0">q31_t</a> Y)</td></tr>
58 <tr><td class="memItemLeft" align="right" valign="top">static __INLINE <a class="el" href="arm__math_8h.html#ab5a8fb21a5b3b983d5f54f31614052ea">q15_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group___bilinear_interpolate.html#gaa8dffbc2a01bb7accf231384498ec85e">arm_bilinear_interp_q15</a> (<a class="el" href="structarm__bilinear__interp__instance__q15.html">arm_bilinear_interp_instance_q15</a> *S, <a class="el" href="arm__math_8h.html#adc89a3547f5324b7b3b95adec3806bc0">q31_t</a> X, <a class="el" href="arm__math_8h.html#adc89a3547f5324b7b3b95adec3806bc0">q31_t</a> Y)</td></tr>
59 <tr><td class="memItemLeft" align="right" valign="top">static __INLINE <a class="el" href="arm__math_8h.html#ae541b6f232c305361e9b416fc9eed263">q7_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group___bilinear_interpolate.html#gade8db9706a3ae9ad03b2750a239d2ee6">arm_bilinear_interp_q7</a> (<a class="el" href="structarm__bilinear__interp__instance__q7.html">arm_bilinear_interp_instance_q7</a> *S, <a class="el" href="arm__math_8h.html#adc89a3547f5324b7b3b95adec3806bc0">q31_t</a> X, <a class="el" href="arm__math_8h.html#adc89a3547f5324b7b3b95adec3806bc0">q31_t</a> Y)</td></tr>
61 <hr/><a name="_details"></a><h2>Detailed Description</h2>
62 <p>Bilinear interpolation is an extension of linear interpolation applied to a two dimensional grid. The underlying function <code>f(x, y)</code> 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.</p>
63 <p><b>Algorithm</b> </p>
64 <dl class="user"><dt><b></b></dt><dd>The instance structure used by the bilinear interpolation functions describes a two dimensional data table. For floating-point, the instance structure is defined as: <pre>
70 } <a class="el" href="structarm__bilinear__interp__instance__f32.html" title="Instance structure for the floating-point bilinear interpolation function.">arm_bilinear_interp_instance_f32</a>;
72 <dl class="user"><dt><b></b></dt><dd>where <code>numRows</code> specifies the number of rows in the table; <code>numCols</code> specifies the number of columns in the table; and <code>pData</code> points to an array of size <code>numRows*numCols</code> values. The data table <code>pTable</code> is organized in row order and the supplied data values fall on integer indexes. That is, table element (x,y) is located at <code>pTable[x + y*numCols]</code> where x and y are integers.</dd></dl>
73 <dl class="user"><dt><b></b></dt><dd>Let <code>(x, y)</code> specify the desired interpolation point. Then define: <pre>
77 <dl class="user"><dt><b></b></dt><dd>The interpolated output point is computed as: <pre>
78 f(x, y) = f(XF, YF) * (1-(x-XF)) * (1-(y-YF))
79 + f(XF+1, YF) * (x-XF)*(1-(y-YF))
80 + f(XF, YF+1) * (1-(x-XF))*(y-YF)
81 + f(XF+1, YF+1) * (x-XF)*(y-YF)
82 </pre> 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.</dd></dl>
83 <dl class="user"><dt><b></b></dt><dd>if (x,y) are outside of the table boundary, Bilinear interpolation returns zero output. </dd></dl>
84 <hr/><h2>Function Documentation</h2>
85 <a class="anchor" id="gab49a4c0f64854903d996d01ba38f711a"></a><!-- doxytag: member="arm_math.h::arm_bilinear_interp_f32" ref="gab49a4c0f64854903d996d01ba38f711a" args="(const arm_bilinear_interp_instance_f32 *S, float32_t X, float32_t Y)" -->
87 <div class="memproto">
88 <table class="memname">
90 <td class="memname">static __INLINE <a class="el" href="arm__math_8h.html#a4611b605e45ab401f02cab15c5e38715">float32_t</a> arm_bilinear_interp_f32 </td>
92 <td class="paramtype">const <a class="el" href="structarm__bilinear__interp__instance__f32.html">arm_bilinear_interp_instance_f32</a> * </td>
93 <td class="paramname"> <em>S</em>, </td>
96 <td class="paramkey"></td>
98 <td class="paramtype"><a class="el" href="arm__math_8h.html#a4611b605e45ab401f02cab15c5e38715">float32_t</a> </td>
99 <td class="paramname"> <em>X</em>, </td>
102 <td class="paramkey"></td>
104 <td class="paramtype"><a class="el" href="arm__math_8h.html#a4611b605e45ab401f02cab15c5e38715">float32_t</a> </td>
105 <td class="paramname"> <em>Y</em> </td>
110 <td></td><td><code> [static]</code></td>
116 <p>Floating-point bilinear interpolation. </p>
117 <dl><dt><b>Parameters:</b></dt><dd>
118 <table class="params">
119 <tr><td class="paramdir">[in,out]</td><td class="paramname">*S</td><td>points to an instance of the interpolation structure. </td></tr>
120 <tr><td class="paramdir">[in]</td><td class="paramname">X</td><td>interpolation coordinate. </td></tr>
121 <tr><td class="paramdir">[in]</td><td class="paramname">Y</td><td>interpolation coordinate. </td></tr>
125 <dl class="return"><dt><b>Returns:</b></dt><dd>out interpolated value. </dd></dl>
127 <p>Definition at line <a class="el" href="arm__math_8h_source.html#l06739">6739</a> of file <a class="el" href="arm__math_8h_source.html">arm_math.h</a>.</p>
131 <a class="anchor" id="ga202a033c8a2ad3678b136f93153b6d13"></a><!-- doxytag: member="arm_math.h::arm_bilinear_interp_q31" ref="ga202a033c8a2ad3678b136f93153b6d13" args="(arm_bilinear_interp_instance_q31 *S, q31_t X, q31_t Y)" -->
132 <div class="memitem">
133 <div class="memproto">
134 <table class="memname">
136 <td class="memname">static __INLINE <a class="el" href="arm__math_8h.html#adc89a3547f5324b7b3b95adec3806bc0">q31_t</a> arm_bilinear_interp_q31 </td>
138 <td class="paramtype"><a class="el" href="structarm__bilinear__interp__instance__q31.html">arm_bilinear_interp_instance_q31</a> * </td>
139 <td class="paramname"> <em>S</em>, </td>
142 <td class="paramkey"></td>
144 <td class="paramtype"><a class="el" href="arm__math_8h.html#adc89a3547f5324b7b3b95adec3806bc0">q31_t</a> </td>
145 <td class="paramname"> <em>X</em>, </td>
148 <td class="paramkey"></td>
150 <td class="paramtype"><a class="el" href="arm__math_8h.html#adc89a3547f5324b7b3b95adec3806bc0">q31_t</a> </td>
151 <td class="paramname"> <em>Y</em> </td>
156 <td></td><td><code> [static]</code></td>
162 <p>Q31 bilinear interpolation. </p>
163 <dl><dt><b>Parameters:</b></dt><dd>
164 <table class="params">
165 <tr><td class="paramdir">[in,out]</td><td class="paramname">*S</td><td>points to an instance of the interpolation structure. </td></tr>
166 <tr><td class="paramdir">[in]</td><td class="paramname">X</td><td>interpolation coordinate in 12.20 format. </td></tr>
167 <tr><td class="paramdir">[in]</td><td class="paramname">Y</td><td>interpolation coordinate in 12.20 format. </td></tr>
171 <dl class="return"><dt><b>Returns:</b></dt><dd>out interpolated value. </dd></dl>
173 <p>Definition at line <a class="el" href="arm__math_8h_source.html#l06806">6806</a> of file <a class="el" href="arm__math_8h_source.html">arm_math.h</a>.</p>
177 <a class="anchor" id="gaa8dffbc2a01bb7accf231384498ec85e"></a><!-- doxytag: member="arm_math.h::arm_bilinear_interp_q15" ref="gaa8dffbc2a01bb7accf231384498ec85e" args="(arm_bilinear_interp_instance_q15 *S, q31_t X, q31_t Y)" -->
178 <div class="memitem">
179 <div class="memproto">
180 <table class="memname">
182 <td class="memname">static __INLINE <a class="el" href="arm__math_8h.html#ab5a8fb21a5b3b983d5f54f31614052ea">q15_t</a> arm_bilinear_interp_q15 </td>
184 <td class="paramtype"><a class="el" href="structarm__bilinear__interp__instance__q15.html">arm_bilinear_interp_instance_q15</a> * </td>
185 <td class="paramname"> <em>S</em>, </td>
188 <td class="paramkey"></td>
190 <td class="paramtype"><a class="el" href="arm__math_8h.html#adc89a3547f5324b7b3b95adec3806bc0">q31_t</a> </td>
191 <td class="paramname"> <em>X</em>, </td>
194 <td class="paramkey"></td>
196 <td class="paramtype"><a class="el" href="arm__math_8h.html#adc89a3547f5324b7b3b95adec3806bc0">q31_t</a> </td>
197 <td class="paramname"> <em>Y</em> </td>
202 <td></td><td><code> [static]</code></td>
208 <p>Q15 bilinear interpolation. </p>
209 <dl><dt><b>Parameters:</b></dt><dd>
210 <table class="params">
211 <tr><td class="paramdir">[in,out]</td><td class="paramname">*S</td><td>points to an instance of the interpolation structure. </td></tr>
212 <tr><td class="paramdir">[in]</td><td class="paramname">X</td><td>interpolation coordinate in 12.20 format. </td></tr>
213 <tr><td class="paramdir">[in]</td><td class="paramname">Y</td><td>interpolation coordinate in 12.20 format. </td></tr>
217 <dl class="return"><dt><b>Returns:</b></dt><dd>out interpolated value. </dd></dl>
219 <p>Definition at line <a class="el" href="arm__math_8h_source.html#l06882">6882</a> of file <a class="el" href="arm__math_8h_source.html">arm_math.h</a>.</p>
223 <a class="anchor" id="gade8db9706a3ae9ad03b2750a239d2ee6"></a><!-- doxytag: member="arm_math.h::arm_bilinear_interp_q7" ref="gade8db9706a3ae9ad03b2750a239d2ee6" args="(arm_bilinear_interp_instance_q7 *S, q31_t X, q31_t Y)" -->
224 <div class="memitem">
225 <div class="memproto">
226 <table class="memname">
228 <td class="memname">static __INLINE <a class="el" href="arm__math_8h.html#ae541b6f232c305361e9b416fc9eed263">q7_t</a> arm_bilinear_interp_q7 </td>
230 <td class="paramtype"><a class="el" href="structarm__bilinear__interp__instance__q7.html">arm_bilinear_interp_instance_q7</a> * </td>
231 <td class="paramname"> <em>S</em>, </td>
234 <td class="paramkey"></td>
236 <td class="paramtype"><a class="el" href="arm__math_8h.html#adc89a3547f5324b7b3b95adec3806bc0">q31_t</a> </td>
237 <td class="paramname"> <em>X</em>, </td>
240 <td class="paramkey"></td>
242 <td class="paramtype"><a class="el" href="arm__math_8h.html#adc89a3547f5324b7b3b95adec3806bc0">q31_t</a> </td>
243 <td class="paramname"> <em>Y</em> </td>
248 <td></td><td><code> [static]</code></td>
254 <p>Q7 bilinear interpolation. </p>
255 <dl><dt><b>Parameters:</b></dt><dd>
256 <table class="params">
257 <tr><td class="paramdir">[in,out]</td><td class="paramname">*S</td><td>points to an instance of the interpolation structure. </td></tr>
258 <tr><td class="paramdir">[in]</td><td class="paramname">X</td><td>interpolation coordinate in 12.20 format. </td></tr>
259 <tr><td class="paramdir">[in]</td><td class="paramname">Y</td><td>interpolation coordinate in 12.20 format. </td></tr>
263 <dl class="return"><dt><b>Returns:</b></dt><dd>out interpolated value. </dd></dl>
265 <p>Definition at line <a class="el" href="arm__math_8h_source.html#l06962">6962</a> of file <a class="el" href="arm__math_8h_source.html">arm_math.h</a>.</p>
270 <!--- window showing the filter options -->
271 <div id="MSearchSelectWindow"
272 onmouseover="return searchBox.OnSearchSelectShow()"
273 onmouseout="return searchBox.OnSearchSelectHide()"
274 onkeydown="return searchBox.OnSearchSelectKey(event)">
275 <a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark"> </span>Defines</a></div>
277 <!-- iframe showing the search results (closed by default) -->
278 <div id="MSearchResultsWindow">
279 <iframe src="" frameborder="0"
280 name="MSearchResults" id="MSearchResults">
284 <hr class="footer"/><address class="footer"><small>Generated on Fri Jul 15 2011 13:16:22 for CMSIS DSP Software Library by 
285 <a href="http://www.doxygen.org/index.html">
286 <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.2 </small></address>