aboutsummaryrefslogtreecommitdiff
path: root/21.02/_inference_test_image_8cpp_source.xhtml
blob: b897370dc22dae1ff324ef6763397246f97b43f5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
<!-- Copyright (c) 2020 ARM Limited. -->
<!--                                 -->
<!-- SPDX-License-Identifier: MIT    -->
<!--                                 -->
<!-- HTML header for doxygen 1.8.13-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="robots" content="NOINDEX, NOFOLLOW" />
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmNN: tests/InferenceTestImage.cpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/x-mathjax-config">
  MathJax.Hub.Config({
    extensions: ["tex2jax.js"],
    jax: ["input/TeX","output/HTML-CSS"],
});
</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="stylesheet.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <img alt="ArmNN" src="Arm_NN_horizontal_blue.png" style="max-width: 10rem; margin-top: .5rem; margin-left 10px"/>
  <td style="padding-left: 0.5em;">
   <div id="projectname">
   &#160;<span id="projectnumber">21.02</span>
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('_inference_test_image_8cpp_source.xhtml','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="headertitle">
<div class="title">InferenceTestImage.cpp</div>  </div>
</div><!--header-->
<div class="contents">
<a href="_inference_test_image_8cpp.xhtml">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">// Copyright © 2017 Arm Ltd. All rights reserved.</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">// SPDX-License-Identifier: MIT</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_inference_test_image_8hpp.xhtml">InferenceTestImage.hpp</a>&quot;</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;</div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_assert_8hpp.xhtml">armnn/utility/Assert.hpp</a>&gt;</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_ignore_unused_8hpp.xhtml">armnn/utility/IgnoreUnused.hpp</a>&gt;</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_numeric_cast_8hpp.xhtml">armnn/utility/NumericCast.hpp</a>&gt;</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;</div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="preprocessor">#include &lt;fmt/format.h&gt;</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="preprocessor">#include &lt;array&gt;</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;</div><div class="line"><a name="l00015"></a><span class="lineno"><a class="line" href="_inference_test_image_8cpp.xhtml#a18372412ad2fc3ce1e3240b3cf0efe78">   15</a></span>&#160;<span class="preprocessor">#define STB_IMAGE_IMPLEMENTATION</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="preprocessor">#include &lt;stb/stb_image.h&gt;</span></div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"><a class="line" href="_inference_test_image_8cpp.xhtml#aa6a7b41350a14f718b619164bc2b8fdf">   18</a></span>&#160;<span class="preprocessor">#define STB_IMAGE_RESIZE_IMPLEMENTATION</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#include &lt;stb/stb_image_resize.h&gt;</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;</div><div class="line"><a name="l00021"></a><span class="lineno"><a class="line" href="_inference_test_image_8cpp.xhtml#aefe397a94e8feddc652f92ef40ce9597">   21</a></span>&#160;<span class="preprocessor">#define STB_IMAGE_WRITE_IMPLEMENTATION</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#include &lt;stb/stb_image_write.h&gt;</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="keyword">namespace</span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;{</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> GetImageChannelIndex(<a class="code" href="_inference_test_image_8hpp.xhtml#a5f7592b0a8fa09208cd32721cf207110">ImageChannelLayout</a> channelLayout, <a class="code" href="_inference_test_image_8hpp.xhtml#a65983f8cb907d873f2328bb8307c296a">ImageChannel</a> channel)</div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;{</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;    <span class="keywordflow">switch</span> (channelLayout)</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;    {</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="_inference_test_image_8hpp.xhtml#a5f7592b0a8fa09208cd32721cf207110aabe0e112dd5f40f1de00eccbf99798a3">ImageChannelLayout::Rgb</a>:</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(channel);</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="_inference_test_image_8hpp.xhtml#a5f7592b0a8fa09208cd32721cf207110a103b58155b4c5cc09249629e7ccd5dc2">ImageChannelLayout::Bgr</a>:</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;        <span class="keywordflow">return</span> 2u - <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(channel);</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;    <span class="keywordflow">default</span>:</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="class_unknown_image_channel_layout.xhtml">UnknownImageChannelLayout</a>(fmt::format(<span class="stringliteral">&quot;Unknown layout {}&quot;</span>, static_cast&lt;int&gt;(channelLayout)));</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;    }</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;}</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">float</span> Lerp(<span class="keywordtype">float</span> a, <span class="keywordtype">float</span> b, <span class="keywordtype">float</span> w)</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;{</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;    <span class="keywordflow">return</span> w * b + (1.f - w) * a;</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;}</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> PutData(std::vector&lt;float&gt; &amp; data,</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;                    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> width,</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;                    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> x,</div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;                    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> y,</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;                    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c,</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;                    <span class="keywordtype">float</span> value)</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;{</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;    data[(3*((y*width)+x)) + c] = value;</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;}</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;std::vector&lt;float&gt; ResizeBilinearAndNormalize(<span class="keyword">const</span> <a class="code" href="class_inference_test_image.xhtml">InferenceTestImage</a> &amp; image,</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;                                              <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputWidth,</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;                                              <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputHeight,</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;                                              <span class="keyword">const</span> <span class="keywordtype">float</span> scale,</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;                                              <span class="keyword">const</span> std::array&lt;float, 3&gt;&amp; mean,</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;                                              <span class="keyword">const</span> std::array&lt;float, 3&gt;&amp; stddev)</div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;{</div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;    std::vector&lt;float&gt; out;</div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;    out.resize(outputWidth * outputHeight * 3);</div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;    <span class="comment">// We follow the definition of TensorFlow and AndroidNN: the top-left corner of a texel in the output</span></div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;    <span class="comment">// image is projected into the input image to figure out the interpolants and weights. Note that this</span></div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;    <span class="comment">// will yield different results than if projecting the centre of output texels.</span></div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;</div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputWidth = image.<a class="code" href="class_inference_test_image.xhtml#a4ec823e49ce46950b3d4cee1efff050b">GetWidth</a>();</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputHeight = image.<a class="code" href="class_inference_test_image.xhtml#a0983225e32025d901ce6547170892f56">GetHeight</a>();</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;    <span class="comment">// How much to scale pixel coordinates in the output image to get the corresponding pixel coordinates</span></div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;    <span class="comment">// in the input image.</span></div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">float</span> scaleY = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">float</span>&gt;(inputHeight) / armnn::numeric_cast&lt;float&gt;(outputHeight);</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">float</span> scaleX = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">float</span>&gt;(inputWidth) / armnn::numeric_cast&lt;float&gt;(outputWidth);</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;    uint8_t rgb_x0y0[3];</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;    uint8_t rgb_x1y0[3];</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;    uint8_t rgb_x0y1[3];</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;    uint8_t rgb_x1y1[3];</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> y = 0; y &lt; outputHeight; ++y)</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;    {</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;        <span class="comment">// Corresponding real-valued height coordinate in input image.</span></div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">float</span> iy = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">float</span>&gt;(y) * scaleY;</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;        <span class="comment">// Discrete height coordinate of top-left texel (in the 2x2 texel area used for interpolation).</span></div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">float</span> fiy = floorf(iy);</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> y0 = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(fiy);</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;        <span class="comment">// Interpolation weight (range [0,1])</span></div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">float</span> yw = iy - fiy;</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> x = 0; x &lt; outputWidth; ++x)</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;        {</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;            <span class="comment">// Real-valued and discrete width coordinates in input image.</span></div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;            <span class="keyword">const</span> <span class="keywordtype">float</span> ix = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">float</span>&gt;(x) * scaleX;</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;            <span class="keyword">const</span> <span class="keywordtype">float</span> fix = floorf(ix);</div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;            <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> x0 = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(fix);</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;            <span class="comment">// Interpolation weight (range [0,1]).</span></div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;            <span class="keyword">const</span> <span class="keywordtype">float</span> xw = ix - fix;</div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;</div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;            <span class="comment">// Discrete width/height coordinates of texels below and to the right of (x0, y0).</span></div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;            <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> x1 = std::min(x0 + 1, inputWidth - 1u);</div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;            <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> y1 = std::min(y0 + 1, inputHeight - 1u);</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;            std::tie(rgb_x0y0[0], rgb_x0y0[1], rgb_x0y0[2]) = image.<a class="code" href="class_inference_test_image.xhtml#a97a4644e316893df9dd2ab73cdd08d33">GetPixelAs3Channels</a>(x0, y0);</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;            std::tie(rgb_x1y0[0], rgb_x1y0[1], rgb_x1y0[2]) = image.<a class="code" href="class_inference_test_image.xhtml#a97a4644e316893df9dd2ab73cdd08d33">GetPixelAs3Channels</a>(x1, y0);</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;            std::tie(rgb_x0y1[0], rgb_x0y1[1], rgb_x0y1[2]) = image.<a class="code" href="class_inference_test_image.xhtml#a97a4644e316893df9dd2ab73cdd08d33">GetPixelAs3Channels</a>(x0, y1);</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;            std::tie(rgb_x1y1[0], rgb_x1y1[1], rgb_x1y1[2]) = image.<a class="code" href="class_inference_test_image.xhtml#a97a4644e316893df9dd2ab73cdd08d33">GetPixelAs3Channels</a>(x1, y1);</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;            <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> c=0; c&lt;3; ++c)</div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;            {</div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;                <span class="keyword">const</span> <span class="keywordtype">float</span> ly0 = Lerp(<span class="keywordtype">float</span>(rgb_x0y0[c]), <span class="keywordtype">float</span>(rgb_x1y0[c]), xw);</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;                <span class="keyword">const</span> <span class="keywordtype">float</span> ly1 = Lerp(<span class="keywordtype">float</span>(rgb_x0y1[c]), <span class="keywordtype">float</span>(rgb_x1y1[c]), xw);</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;                <span class="keyword">const</span> <span class="keywordtype">float</span> l = Lerp(ly0, ly1, yw);</div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;                PutData(out, outputWidth, x, y, c, ((l / scale) - mean[c]) / stddev[c]);</div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;            }</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;        }</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;    }</div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;    <span class="keywordflow">return</span> out;</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;}</div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;} <span class="comment">// namespace</span></div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;</div><div class="line"><a name="l00127"></a><span class="lineno"><a class="line" href="class_inference_test_image.xhtml#a9583c8d35e13002b79d9e65434e0b685">  127</a></span>&#160;<a class="code" href="class_inference_test_image.xhtml#a9583c8d35e13002b79d9e65434e0b685">InferenceTestImage::InferenceTestImage</a>(<span class="keywordtype">char</span> <span class="keyword">const</span>* filePath)</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160; : m_Width(0u)</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160; , m_Height(0u)</div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160; , m_NumChannels(0u)</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;{</div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;    <span class="keywordtype">int</span> width;</div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;    <span class="keywordtype">int</span> height;</div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;    <span class="keywordtype">int</span> channels;</div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;    <span class="keyword">using</span> StbImageDataPtr = std::unique_ptr&lt;unsigned char, decltype(&amp;stbi_image_free)&gt;;</div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;    StbImageDataPtr stbData(stbi_load(filePath, &amp;width, &amp;height, &amp;channels, 0), &amp;stbi_image_free);</div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;</div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;    <span class="keywordflow">if</span> (stbData == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;    {</div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="class_inference_test_image_load_failed.xhtml">InferenceTestImageLoadFailed</a>(fmt::format(<span class="stringliteral">&quot;Could not load the image at {}&quot;</span>, filePath));</div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;    }</div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;    <span class="keywordflow">if</span> (width == 0 || height == 0)</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;    {</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="class_inference_test_image_load_failed.xhtml">InferenceTestImageLoadFailed</a>(fmt::format(<span class="stringliteral">&quot;Could not load empty image at {}&quot;</span>, filePath));</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;    }</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;</div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;    m_Width = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(width);</div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;    m_Height = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(height);</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;    m_NumChannels = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(channels);</div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;</div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sizeInBytes = <a class="code" href="class_inference_test_image.xhtml#acd495024dcb50f4081d5c05a1e66d210">GetSizeInBytes</a>();</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;    m_Data.resize(sizeInBytes);</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;    memcpy(m_Data.data(), stbData.get(), sizeInBytes);</div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;}</div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;</div><div class="line"><a name="l00158"></a><span class="lineno"><a class="line" href="class_inference_test_image.xhtml#a97a4644e316893df9dd2ab73cdd08d33">  158</a></span>&#160;std::tuple&lt;uint8_t, uint8_t, uint8_t&gt; <a class="code" href="class_inference_test_image.xhtml#a97a4644e316893df9dd2ab73cdd08d33">InferenceTestImage::GetPixelAs3Channels</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> x, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> y)<span class="keyword"> const</span></div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;    <span class="keywordflow">if</span> (x &gt;= m_Width || y &gt;= m_Height)</div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;    {</div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="class_inference_test_image_out_of_bounds_access.xhtml">InferenceTestImageOutOfBoundsAccess</a>(fmt::format(<span class="stringliteral">&quot;Attempted out of bounds image access. &quot;</span></div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;            <span class="stringliteral">&quot;Requested ({0}, {1}). Maximum valid coordinates ({2}, {3}).&quot;</span>, x, y, (m_Width - 1), (m_Height - 1)));</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;    }</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;</div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> pixelOffset = x * <a class="code" href="class_inference_test_image.xhtml#a5a1e22b2882917bcd82a14328ff2c5d6">GetNumChannels</a>() + y * <a class="code" href="class_inference_test_image.xhtml#a4ec823e49ce46950b3d4cee1efff050b">GetWidth</a>() * <a class="code" href="class_inference_test_image.xhtml#a5a1e22b2882917bcd82a14328ff2c5d6">GetNumChannels</a>();</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;    <span class="keyword">const</span> uint8_t* <span class="keyword">const</span> pixelData = m_Data.data() + pixelOffset;</div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(pixelData &lt;= (m_Data.data() + <a class="code" href="class_inference_test_image.xhtml#acd495024dcb50f4081d5c05a1e66d210">GetSizeInBytes</a>()));</div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;</div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;    std::array&lt;uint8_t, 3&gt; outPixelData;</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;    outPixelData.fill(0);</div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;</div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> maxChannelsInPixel = std::min(<a class="code" href="class_inference_test_image.xhtml#a5a1e22b2882917bcd82a14328ff2c5d6">GetNumChannels</a>(), static_cast&lt;unsigned int&gt;(outPixelData.size()));</div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c = 0; c &lt; maxChannelsInPixel; ++c)</div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;    {</div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;        outPixelData[c] = pixelData[c];</div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;    }</div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;    <span class="keywordflow">return</span> std::make_tuple(outPixelData[0], outPixelData[1], outPixelData[2]);</div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;}</div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;</div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;</div><div class="line"><a name="l00183"></a><span class="lineno"><a class="line" href="class_inference_test_image.xhtml#a746dbda8e529cdc8450f81fabb604250">  183</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_inference_test_image.xhtml#a746dbda8e529cdc8450f81fabb604250">InferenceTestImage::StbResize</a>(<a class="code" href="class_inference_test_image.xhtml">InferenceTestImage</a>&amp; im, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> newWidth, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> newHeight)</div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;{</div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;    std::vector&lt;uint8_t&gt; newData;</div><div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;    newData.resize(newWidth * newHeight * im.<a class="code" href="class_inference_test_image.xhtml#a5a1e22b2882917bcd82a14328ff2c5d6">GetNumChannels</a>() * im.GetSingleElementSizeInBytes());</div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;</div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;    <span class="comment">// armnn::numeric_cast&lt;&gt;() is used for user-provided data (protecting about overflows).</span></div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;    <span class="comment">// static_cast&lt;&gt; is ok for internal data (assumes that, when internal data was originally provided by a user,</span></div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;    <span class="comment">// a armnn::numeric_cast&lt;&gt;() handled the conversion).</span></div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">int</span> nW = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(newWidth);</div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">int</span> nH = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(newHeight);</div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">int</span> w = <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(im.<a class="code" href="class_inference_test_image.xhtml#a4ec823e49ce46950b3d4cee1efff050b">GetWidth</a>());</div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">int</span> h = <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(im.<a class="code" href="class_inference_test_image.xhtml#a0983225e32025d901ce6547170892f56">GetHeight</a>());</div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">int</span> numChannels = <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(im.<a class="code" href="class_inference_test_image.xhtml#a5a1e22b2882917bcd82a14328ff2c5d6">GetNumChannels</a>());</div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">int</span> res = stbir_resize_uint8(im.m_Data.data(), w, h, 0, newData.data(), nW, nH, 0, numChannels);</div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;    <span class="keywordflow">if</span> (res == 0)</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;    {</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="class_inference_test_image_resize_failed.xhtml">InferenceTestImageResizeFailed</a>(<span class="stringliteral">&quot;The resizing operation failed&quot;</span>);</div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;    }</div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;</div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;    im.m_Data.swap(newData);</div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;    im.m_Width = newWidth;</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;    im.m_Height = newHeight;</div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;}</div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;</div><div class="line"><a name="l00209"></a><span class="lineno"><a class="line" href="class_inference_test_image.xhtml#a4a6637c2a2952a14cb3a426133b67a73">  209</a></span>&#160;std::vector&lt;float&gt; <a class="code" href="class_inference_test_image.xhtml#a4a6637c2a2952a14cb3a426133b67a73">InferenceTestImage::Resize</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> newWidth,</div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;                                              <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> newHeight,</div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;                                              <span class="keyword">const</span> <a class="code" href="structarmnn_1_1_check_location.xhtml">armnn::CheckLocation</a>&amp; location,</div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;                                              <span class="keyword">const</span> <a class="code" href="class_inference_test_image.xhtml#ae7a403f69a7717c1eaae1d74b7bb7bce">ResizingMethods</a> meth,</div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;                                              <span class="keyword">const</span> std::array&lt;float, 3&gt;&amp; mean,</div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;                                              <span class="keyword">const</span> std::array&lt;float, 3&gt;&amp; stddev,</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;                                              <span class="keyword">const</span> <span class="keywordtype">float</span> scale)</div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;{</div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;    std::vector&lt;float&gt; out;</div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;    <span class="keywordflow">if</span> (newWidth == 0 || newHeight == 0)</div><div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;    {</div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="class_inference_test_image_resize_failed.xhtml">InferenceTestImageResizeFailed</a>(fmt::format(<span class="stringliteral">&quot;None of the dimensions passed to a resize &quot;</span></div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;            <span class="stringliteral">&quot;operation can be zero. Requested width: {0}. Requested height: {1}.&quot;</span>, newWidth, newHeight));</div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;    }</div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;</div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;    <span class="keywordflow">switch</span> (meth) {</div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="class_inference_test_image.xhtml#ae7a403f69a7717c1eaae1d74b7bb7bceaecd472e37d2e3d8542fd5e9ff63e3450">ResizingMethods::STB</a>:</div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;        {</div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;            <a class="code" href="class_inference_test_image.xhtml#a746dbda8e529cdc8450f81fabb604250">StbResize</a>(*<span class="keyword">this</span>, newWidth, newHeight);</div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;        }</div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="class_inference_test_image.xhtml#ae7a403f69a7717c1eaae1d74b7bb7bcea773b27aa8d21604182ba90d029ad2e13">ResizingMethods::BilinearAndNormalized</a>:</div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;        {</div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;            out = ResizeBilinearAndNormalize(*<span class="keyword">this</span>, newWidth, newHeight, scale, mean, stddev);</div><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;        }</div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;        <span class="keywordflow">default</span>:</div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;            <span class="keywordflow">throw</span> <a class="code" href="class_inference_test_image_resize_failed.xhtml">InferenceTestImageResizeFailed</a>(fmt::format(<span class="stringliteral">&quot;Unknown resizing method asked ArmNN only&quot;</span></div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;                                                             <span class="stringliteral">&quot; supports {STB, BilinearAndNormalized} {}&quot;</span>,</div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;                                                             location.<a class="code" href="structarmnn_1_1_check_location.xhtml#a5e3562cda960da001597e7dd5679b140">AsString</a>()));</div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;    }</div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;    <span class="keywordflow">return</span> out;</div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;}</div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;</div><div class="line"><a name="l00243"></a><span class="lineno"><a class="line" href="class_inference_test_image.xhtml#a98be3e32f21051eca5de5728c9cd43bc">  243</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_inference_test_image.xhtml#a98be3e32f21051eca5de5728c9cd43bc">InferenceTestImage::Write</a>(<a class="code" href="class_inference_test_image.xhtml#afe2346f1f07296902bc8d84beb69b45d">WriteFormat</a> format, <span class="keyword">const</span> <span class="keywordtype">char</span>* filePath)<span class="keyword"> const</span></div><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">int</span> w = <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(<a class="code" href="class_inference_test_image.xhtml#a4ec823e49ce46950b3d4cee1efff050b">GetWidth</a>());</div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">int</span> h = <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(<a class="code" href="class_inference_test_image.xhtml#a0983225e32025d901ce6547170892f56">GetHeight</a>());</div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">int</span> numChannels = <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(<a class="code" href="class_inference_test_image.xhtml#a5a1e22b2882917bcd82a14328ff2c5d6">GetNumChannels</a>());</div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;    <span class="keywordtype">int</span> res = 0;</div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;</div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;    <span class="keywordflow">switch</span> (format)</div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;    {</div><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="class_inference_test_image.xhtml#afe2346f1f07296902bc8d84beb69b45daf8fd4f1b5b05c6b1cc6a661141fd4f54">WriteFormat::Png</a>:</div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;        {</div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;            res = stbi_write_png(filePath, w, h, numChannels, m_Data.data(), 0);</div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;        }</div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="class_inference_test_image.xhtml#afe2346f1f07296902bc8d84beb69b45da021d8346462df53d4272607b0f41a8d8">WriteFormat::Bmp</a>:</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;        {</div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;            res = stbi_write_bmp(filePath, w, h, numChannels, m_Data.data());</div><div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;        }</div><div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="class_inference_test_image.xhtml#afe2346f1f07296902bc8d84beb69b45da38f4e5f66749f755f54ef67faa2058dc">WriteFormat::Tga</a>:</div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;        {</div><div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;            res = stbi_write_tga(filePath, w, h, numChannels, m_Data.data());</div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;        }</div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;    <span class="keywordflow">default</span>:</div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="class_inference_test_image_write_failed.xhtml">InferenceTestImageWriteFailed</a>(fmt::format(<span class="stringliteral">&quot;Unknown format {}&quot;</span>, static_cast&lt;int&gt;(format)));</div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;    }</div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;</div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;    <span class="keywordflow">if</span> (res == 0)</div><div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;    {</div><div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="class_inference_test_image_write_failed.xhtml">InferenceTestImageWriteFailed</a>(fmt::format(<span class="stringliteral">&quot;An error occurred when writing to file {}&quot;</span>,</div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;                                                        filePath));</div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;    }</div><div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;}</div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;</div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> TProcessValueCallable&gt;</div><div class="line"><a name="l00279"></a><span class="lineno"><a class="line" href="_inference_test_image_8cpp.xhtml#ada9c94c9ae0a7082f648f75f50d57be1">  279</a></span>&#160;std::vector&lt;float&gt; <a class="code" href="_inference_test_image_8cpp.xhtml#ada9c94c9ae0a7082f648f75f50d57be1">GetImageDataInArmNnLayoutAsFloats</a>(<a class="code" href="_inference_test_image_8hpp.xhtml#a5f7592b0a8fa09208cd32721cf207110">ImageChannelLayout</a> channelLayout,</div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;    <span class="keyword">const</span> <a class="code" href="class_inference_test_image.xhtml">InferenceTestImage</a>&amp; image,</div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;    TProcessValueCallable processValue)</div><div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;{</div><div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> h = image.<a class="code" href="class_inference_test_image.xhtml#a0983225e32025d901ce6547170892f56">GetHeight</a>();</div><div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> w = image.<a class="code" href="class_inference_test_image.xhtml#a4ec823e49ce46950b3d4cee1efff050b">GetWidth</a>();</div><div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;</div><div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;    std::vector&lt;float&gt; imageData;</div><div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;    imageData.resize(h * w * 3);</div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;</div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j = 0; j &lt; h; ++j)</div><div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;    {</div><div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; w; ++i)</div><div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;        {</div><div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;            uint8_t r, g, b;</div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;            std::tie(r, g, b) = image.<a class="code" href="class_inference_test_image.xhtml#a97a4644e316893df9dd2ab73cdd08d33">GetPixelAs3Channels</a>(i, j);</div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;</div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;            <span class="comment">// ArmNN order: C, H, W</span></div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;            <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> rDstIndex = GetImageChannelIndex(channelLayout, <a class="code" href="_inference_test_image_8hpp.xhtml#a65983f8cb907d873f2328bb8307c296aae1e1d3d40573127e9ee0480caf1283d6">ImageChannel::R</a>) * h * w + j * w + i;</div><div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;            <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> gDstIndex = GetImageChannelIndex(channelLayout, <a class="code" href="_inference_test_image_8hpp.xhtml#a65983f8cb907d873f2328bb8307c296aadfcf28d0734569a6a693bc8194de62bf">ImageChannel::G</a>) * h * w + j * w + i;</div><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;            <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> bDstIndex = GetImageChannelIndex(channelLayout, <a class="code" href="_inference_test_image_8hpp.xhtml#a65983f8cb907d873f2328bb8307c296aa9d5ed678fe57bcca610140957afab571">ImageChannel::B</a>) * h * w + j * w + i;</div><div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;</div><div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;            imageData[rDstIndex] = processValue(<a class="code" href="_inference_test_image_8hpp.xhtml#a65983f8cb907d873f2328bb8307c296aae1e1d3d40573127e9ee0480caf1283d6">ImageChannel::R</a>, <span class="keywordtype">float</span>(r));</div><div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;            imageData[gDstIndex] = processValue(<a class="code" href="_inference_test_image_8hpp.xhtml#a65983f8cb907d873f2328bb8307c296aadfcf28d0734569a6a693bc8194de62bf">ImageChannel::G</a>, <span class="keywordtype">float</span>(g));</div><div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;            imageData[bDstIndex] = processValue(<a class="code" href="_inference_test_image_8hpp.xhtml#a65983f8cb907d873f2328bb8307c296aa9d5ed678fe57bcca610140957afab571">ImageChannel::B</a>, <span class="keywordtype">float</span>(b));</div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;        }</div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;    }</div><div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;</div><div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;    <span class="keywordflow">return</span> imageData;</div><div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;}</div><div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;</div><div class="line"><a name="l00310"></a><span class="lineno"><a class="line" href="_inference_test_image_8hpp.xhtml#a3f8ac82c346c723f775a383d22239182">  310</a></span>&#160;std::vector&lt;float&gt; <a class="code" href="_inference_test_image_8cpp.xhtml#a3f8ac82c346c723f775a383d22239182">GetImageDataInArmNnLayoutAsNormalizedFloats</a>(<a class="code" href="_inference_test_image_8hpp.xhtml#a5f7592b0a8fa09208cd32721cf207110">ImageChannelLayout</a> layout,</div><div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;    <span class="keyword">const</span> <a class="code" href="class_inference_test_image.xhtml">InferenceTestImage</a>&amp; image)</div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;{</div><div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="_inference_test_image_8cpp.xhtml#ada9c94c9ae0a7082f648f75f50d57be1">GetImageDataInArmNnLayoutAsFloats</a>(layout, image,</div><div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;        [](<a class="code" href="_inference_test_image_8hpp.xhtml#a65983f8cb907d873f2328bb8307c296a">ImageChannel</a> channel, <span class="keywordtype">float</span> value)</div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;        {</div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;            <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a>(channel);</div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;            <span class="keywordflow">return</span> value / 255.f;</div><div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;        });</div><div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;}</div><div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;</div><div class="line"><a name="l00321"></a><span class="lineno"><a class="line" href="_inference_test_image_8hpp.xhtml#a16f15d88afcc9c6bba231cc72bdd8cbf">  321</a></span>&#160;std::vector&lt;float&gt; <a class="code" href="_inference_test_image_8cpp.xhtml#a16f15d88afcc9c6bba231cc72bdd8cbf">GetImageDataInArmNnLayoutAsFloatsSubtractingMean</a>(<a class="code" href="_inference_test_image_8hpp.xhtml#a5f7592b0a8fa09208cd32721cf207110">ImageChannelLayout</a> layout,</div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;    <span class="keyword">const</span> <a class="code" href="class_inference_test_image.xhtml">InferenceTestImage</a>&amp; image,</div><div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;    <span class="keyword">const</span> std::array&lt;float, 3&gt;&amp; mean)</div><div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;{</div><div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="_inference_test_image_8cpp.xhtml#ada9c94c9ae0a7082f648f75f50d57be1">GetImageDataInArmNnLayoutAsFloats</a>(layout, image,</div><div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;        [layout, &amp;mean](<a class="code" href="_inference_test_image_8hpp.xhtml#a65983f8cb907d873f2328bb8307c296a">ImageChannel</a> channel, <span class="keywordtype">float</span> value)</div><div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;        {</div><div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;            <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channelIndex = GetImageChannelIndex(layout, channel);</div><div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;            <span class="keywordflow">return</span> value - mean[channelIndex];</div><div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;        });</div><div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;}</div><div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;</div><div class="line"><a name="l00333"></a><span class="lineno"><a class="line" href="_inference_test_image_8hpp.xhtml#a0b39a9dcbed4124b88b7b58f5d77096f">  333</a></span>&#160;std::vector&lt;float&gt; <a class="code" href="_inference_test_image_8cpp.xhtml#a0b39a9dcbed4124b88b7b58f5d77096f">GetImageDataAsNormalizedFloats</a>(<a class="code" href="_inference_test_image_8hpp.xhtml#a5f7592b0a8fa09208cd32721cf207110">ImageChannelLayout</a> layout,</div><div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;                                                  <span class="keyword">const</span> <a class="code" href="class_inference_test_image.xhtml">InferenceTestImage</a>&amp; image)</div><div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;{</div><div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;    std::vector&lt;float&gt; imageData;</div><div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> h = image.<a class="code" href="class_inference_test_image.xhtml#a0983225e32025d901ce6547170892f56">GetHeight</a>();</div><div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> w = image.<a class="code" href="class_inference_test_image.xhtml#a4ec823e49ce46950b3d4cee1efff050b">GetWidth</a>();</div><div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;</div><div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> rDstIndex = GetImageChannelIndex(layout, <a class="code" href="_inference_test_image_8hpp.xhtml#a65983f8cb907d873f2328bb8307c296aae1e1d3d40573127e9ee0480caf1283d6">ImageChannel::R</a>);</div><div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> gDstIndex = GetImageChannelIndex(layout, <a class="code" href="_inference_test_image_8hpp.xhtml#a65983f8cb907d873f2328bb8307c296aadfcf28d0734569a6a693bc8194de62bf">ImageChannel::G</a>);</div><div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> bDstIndex = GetImageChannelIndex(layout, <a class="code" href="_inference_test_image_8hpp.xhtml#a65983f8cb907d873f2328bb8307c296aa9d5ed678fe57bcca610140957afab571">ImageChannel::B</a>);</div><div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;</div><div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;    imageData.resize(h * w * 3);</div><div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> offset = 0;</div><div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;</div><div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j = 0; j &lt; h; ++j)</div><div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;    {</div><div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; w; ++i)</div><div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;        {</div><div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;            uint8_t r, g, b;</div><div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;            std::tie(r, g, b) = image.<a class="code" href="class_inference_test_image.xhtml#a97a4644e316893df9dd2ab73cdd08d33">GetPixelAs3Channels</a>(i, j);</div><div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;</div><div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;            imageData[offset+rDstIndex] = float(r) / 255.0f;</div><div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;            imageData[offset+gDstIndex] = float(g) / 255.0f;</div><div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;            imageData[offset+bDstIndex] = float(b) / 255.0f;</div><div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;            offset += 3;</div><div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;        }</div><div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;    }</div><div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;</div><div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;    <span class="keywordflow">return</span> imageData;</div><div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;}</div><div class="ttc" id="class_inference_test_image_xhtml_afe2346f1f07296902bc8d84beb69b45d"><div class="ttname"><a href="class_inference_test_image.xhtml#afe2346f1f07296902bc8d84beb69b45d">InferenceTestImage::WriteFormat</a></div><div class="ttdeci">WriteFormat</div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_image_8hpp_source.xhtml#l00054">InferenceTestImage.hpp:54</a></div></div>
<div class="ttc" id="class_unknown_image_channel_layout_xhtml"><div class="ttname"><a href="class_unknown_image_channel_layout.xhtml">UnknownImageChannelLayout</a></div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_image_8hpp_source.xhtml#l00045">InferenceTestImage.hpp:45</a></div></div>
<div class="ttc" id="_ignore_unused_8hpp_xhtml"><div class="ttname"><a href="_ignore_unused_8hpp.xhtml">IgnoreUnused.hpp</a></div></div>
<div class="ttc" id="class_inference_test_image_xhtml_ae7a403f69a7717c1eaae1d74b7bb7bcea773b27aa8d21604182ba90d029ad2e13"><div class="ttname"><a href="class_inference_test_image.xhtml#ae7a403f69a7717c1eaae1d74b7bb7bcea773b27aa8d21604182ba90d029ad2e13">InferenceTestImage::ResizingMethods::BilinearAndNormalized</a></div></div>
<div class="ttc" id="_inference_test_image_8hpp_xhtml_a65983f8cb907d873f2328bb8307c296aadfcf28d0734569a6a693bc8194de62bf"><div class="ttname"><a href="_inference_test_image_8hpp.xhtml#a65983f8cb907d873f2328bb8307c296aadfcf28d0734569a6a693bc8194de62bf">ImageChannel::G</a></div></div>
<div class="ttc" id="class_inference_test_image_xhtml_a98be3e32f21051eca5de5728c9cd43bc"><div class="ttname"><a href="class_inference_test_image.xhtml#a98be3e32f21051eca5de5728c9cd43bc">InferenceTestImage::Write</a></div><div class="ttdeci">void Write(WriteFormat format, const char *filePath) const</div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_image_8cpp_source.xhtml#l00243">InferenceTestImage.cpp:243</a></div></div>
<div class="ttc" id="class_inference_test_image_xhtml_a5a1e22b2882917bcd82a14328ff2c5d6"><div class="ttname"><a href="class_inference_test_image.xhtml#a5a1e22b2882917bcd82a14328ff2c5d6">InferenceTestImage::GetNumChannels</a></div><div class="ttdeci">unsigned int GetNumChannels() const</div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_image_8hpp_source.xhtml#l00077">InferenceTestImage.hpp:77</a></div></div>
<div class="ttc" id="structarmnn_1_1_check_location_xhtml_a5e3562cda960da001597e7dd5679b140"><div class="ttname"><a href="structarmnn_1_1_check_location.xhtml#a5e3562cda960da001597e7dd5679b140">armnn::CheckLocation::AsString</a></div><div class="ttdeci">std::string AsString() const</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00029">Exceptions.hpp:29</a></div></div>
<div class="ttc" id="_inference_test_image_8hpp_xhtml_a65983f8cb907d873f2328bb8307c296aa9d5ed678fe57bcca610140957afab571"><div class="ttname"><a href="_inference_test_image_8hpp.xhtml#a65983f8cb907d873f2328bb8307c296aa9d5ed678fe57bcca610140957afab571">ImageChannel::B</a></div></div>
<div class="ttc" id="class_inference_test_image_xhtml_afe2346f1f07296902bc8d84beb69b45daf8fd4f1b5b05c6b1cc6a661141fd4f54"><div class="ttname"><a href="class_inference_test_image.xhtml#afe2346f1f07296902bc8d84beb69b45daf8fd4f1b5b05c6b1cc6a661141fd4f54">InferenceTestImage::WriteFormat::Png</a></div></div>
<div class="ttc" id="class_inference_test_image_xhtml_ae7a403f69a7717c1eaae1d74b7bb7bceaecd472e37d2e3d8542fd5e9ff63e3450"><div class="ttname"><a href="class_inference_test_image.xhtml#ae7a403f69a7717c1eaae1d74b7bb7bceaecd472e37d2e3d8542fd5e9ff63e3450">InferenceTestImage::ResizingMethods::STB</a></div></div>
<div class="ttc" id="class_inference_test_image_write_failed_xhtml"><div class="ttname"><a href="class_inference_test_image_write_failed.xhtml">InferenceTestImageWriteFailed</a></div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_image_8hpp_source.xhtml#l00039">InferenceTestImage.hpp:39</a></div></div>
<div class="ttc" id="_inference_test_image_8hpp_xhtml_a65983f8cb907d873f2328bb8307c296aae1e1d3d40573127e9ee0480caf1283d6"><div class="ttname"><a href="_inference_test_image_8hpp.xhtml#a65983f8cb907d873f2328bb8307c296aae1e1d3d40573127e9ee0480caf1283d6">ImageChannel::R</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
<div class="ttc" id="_inference_test_image_8hpp_xhtml_a65983f8cb907d873f2328bb8307c296a"><div class="ttname"><a href="_inference_test_image_8hpp.xhtml#a65983f8cb907d873f2328bb8307c296a">ImageChannel</a></div><div class="ttdeci">ImageChannel</div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_image_8hpp_source.xhtml#l00113">InferenceTestImage.hpp:113</a></div></div>
<div class="ttc" id="class_inference_test_image_load_failed_xhtml"><div class="ttname"><a href="class_inference_test_image_load_failed.xhtml">InferenceTestImageLoadFailed</a></div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_image_8hpp_source.xhtml#l00021">InferenceTestImage.hpp:21</a></div></div>
<div class="ttc" id="_numeric_cast_8hpp_xhtml"><div class="ttname"><a href="_numeric_cast_8hpp.xhtml">NumericCast.hpp</a></div></div>
<div class="ttc" id="_inference_test_image_8hpp_xhtml"><div class="ttname"><a href="_inference_test_image_8hpp.xhtml">InferenceTestImage.hpp</a></div></div>
<div class="ttc" id="class_inference_test_image_xhtml_afe2346f1f07296902bc8d84beb69b45da021d8346462df53d4272607b0f41a8d8"><div class="ttname"><a href="class_inference_test_image.xhtml#afe2346f1f07296902bc8d84beb69b45da021d8346462df53d4272607b0f41a8d8">InferenceTestImage::WriteFormat::Bmp</a></div></div>
<div class="ttc" id="_inference_test_image_8cpp_xhtml_a3f8ac82c346c723f775a383d22239182"><div class="ttname"><a href="_inference_test_image_8cpp.xhtml#a3f8ac82c346c723f775a383d22239182">GetImageDataInArmNnLayoutAsNormalizedFloats</a></div><div class="ttdeci">std::vector&lt; float &gt; GetImageDataInArmNnLayoutAsNormalizedFloats(ImageChannelLayout layout, const InferenceTestImage &amp;image)</div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_image_8cpp_source.xhtml#l00310">InferenceTestImage.cpp:310</a></div></div>
<div class="ttc" id="class_inference_test_image_xhtml_a4ec823e49ce46950b3d4cee1efff050b"><div class="ttname"><a href="class_inference_test_image.xhtml#a4ec823e49ce46950b3d4cee1efff050b">InferenceTestImage::GetWidth</a></div><div class="ttdeci">unsigned int GetWidth() const</div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_image_8hpp_source.xhtml#l00075">InferenceTestImage.hpp:75</a></div></div>
<div class="ttc" id="_inference_test_image_8cpp_xhtml_a16f15d88afcc9c6bba231cc72bdd8cbf"><div class="ttname"><a href="_inference_test_image_8cpp.xhtml#a16f15d88afcc9c6bba231cc72bdd8cbf">GetImageDataInArmNnLayoutAsFloatsSubtractingMean</a></div><div class="ttdeci">std::vector&lt; float &gt; GetImageDataInArmNnLayoutAsFloatsSubtractingMean(ImageChannelLayout layout, const InferenceTestImage &amp;image, const std::array&lt; float, 3 &gt; &amp;mean)</div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_image_8cpp_source.xhtml#l00321">InferenceTestImage.cpp:321</a></div></div>
<div class="ttc" id="class_inference_test_image_xhtml_a746dbda8e529cdc8450f81fabb604250"><div class="ttname"><a href="class_inference_test_image.xhtml#a746dbda8e529cdc8450f81fabb604250">InferenceTestImage::StbResize</a></div><div class="ttdeci">void StbResize(InferenceTestImage &amp;im, const unsigned int newWidth, const unsigned int newHeight)</div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_image_8cpp_source.xhtml#l00183">InferenceTestImage.cpp:183</a></div></div>
<div class="ttc" id="structarmnn_1_1_check_location_xhtml"><div class="ttname"><a href="structarmnn_1_1_check_location.xhtml">armnn::CheckLocation</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00014">Exceptions.hpp:14</a></div></div>
<div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
<div class="ttc" id="class_inference_test_image_xhtml_ae7a403f69a7717c1eaae1d74b7bb7bce"><div class="ttname"><a href="class_inference_test_image.xhtml#ae7a403f69a7717c1eaae1d74b7bb7bce">InferenceTestImage::ResizingMethods</a></div><div class="ttdeci">ResizingMethods</div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_image_8hpp_source.xhtml#l00062">InferenceTestImage.hpp:62</a></div></div>
<div class="ttc" id="_inference_test_image_8cpp_xhtml_a0b39a9dcbed4124b88b7b58f5d77096f"><div class="ttname"><a href="_inference_test_image_8cpp.xhtml#a0b39a9dcbed4124b88b7b58f5d77096f">GetImageDataAsNormalizedFloats</a></div><div class="ttdeci">std::vector&lt; float &gt; GetImageDataAsNormalizedFloats(ImageChannelLayout layout, const InferenceTestImage &amp;image)</div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_image_8cpp_source.xhtml#l00333">InferenceTestImage.cpp:333</a></div></div>
<div class="ttc" id="class_inference_test_image_xhtml"><div class="ttname"><a href="class_inference_test_image.xhtml">InferenceTestImage</a></div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_image_8hpp_source.xhtml#l00051">InferenceTestImage.hpp:51</a></div></div>
<div class="ttc" id="class_inference_test_image_out_of_bounds_access_xhtml"><div class="ttname"><a href="class_inference_test_image_out_of_bounds_access.xhtml">InferenceTestImageOutOfBoundsAccess</a></div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_image_8hpp_source.xhtml#l00027">InferenceTestImage.hpp:27</a></div></div>
<div class="ttc" id="class_inference_test_image_resize_failed_xhtml"><div class="ttname"><a href="class_inference_test_image_resize_failed.xhtml">InferenceTestImageResizeFailed</a></div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_image_8hpp_source.xhtml#l00033">InferenceTestImage.hpp:33</a></div></div>
<div class="ttc" id="_assert_8hpp_xhtml"><div class="ttname"><a href="_assert_8hpp.xhtml">Assert.hpp</a></div></div>
<div class="ttc" id="class_inference_test_image_xhtml_a97a4644e316893df9dd2ab73cdd08d33"><div class="ttname"><a href="class_inference_test_image.xhtml#a97a4644e316893df9dd2ab73cdd08d33">InferenceTestImage::GetPixelAs3Channels</a></div><div class="ttdeci">std::tuple&lt; uint8_t, uint8_t, uint8_t &gt; GetPixelAs3Channels(unsigned int x, unsigned int y) const</div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_image_8cpp_source.xhtml#l00158">InferenceTestImage.cpp:158</a></div></div>
<div class="ttc" id="class_inference_test_image_xhtml_acd495024dcb50f4081d5c05a1e66d210"><div class="ttname"><a href="class_inference_test_image.xhtml#acd495024dcb50f4081d5c05a1e66d210">InferenceTestImage::GetSizeInBytes</a></div><div class="ttdeci">unsigned int GetSizeInBytes() const</div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_image_8hpp_source.xhtml#l00079">InferenceTestImage.hpp:79</a></div></div>
<div class="ttc" id="class_inference_test_image_xhtml_a0983225e32025d901ce6547170892f56"><div class="ttname"><a href="class_inference_test_image.xhtml#a0983225e32025d901ce6547170892f56">InferenceTestImage::GetHeight</a></div><div class="ttdeci">unsigned int GetHeight() const</div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_image_8hpp_source.xhtml#l00076">InferenceTestImage.hpp:76</a></div></div>
<div class="ttc" id="_inference_test_image_8hpp_xhtml_a5f7592b0a8fa09208cd32721cf207110"><div class="ttname"><a href="_inference_test_image_8hpp.xhtml#a5f7592b0a8fa09208cd32721cf207110">ImageChannelLayout</a></div><div class="ttdeci">ImageChannelLayout</div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_image_8hpp_source.xhtml#l00121">InferenceTestImage.hpp:121</a></div></div>
<div class="ttc" id="_inference_test_image_8hpp_xhtml_a5f7592b0a8fa09208cd32721cf207110aabe0e112dd5f40f1de00eccbf99798a3"><div class="ttname"><a href="_inference_test_image_8hpp.xhtml#a5f7592b0a8fa09208cd32721cf207110aabe0e112dd5f40f1de00eccbf99798a3">ImageChannelLayout::Rgb</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a375ca3cff9f1b005d1412dc5f3cf5b6e"><div class="ttname"><a href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_unsigned&lt; Source &gt;::value &amp;&amp;std::is_unsigned&lt; Dest &gt;::value, Dest &gt; numeric_cast(Source source)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00035">NumericCast.hpp:35</a></div></div>
<div class="ttc" id="class_inference_test_image_xhtml_a4a6637c2a2952a14cb3a426133b67a73"><div class="ttname"><a href="class_inference_test_image.xhtml#a4a6637c2a2952a14cb3a426133b67a73">InferenceTestImage::Resize</a></div><div class="ttdeci">std::vector&lt; float &gt; Resize(unsigned int newWidth, unsigned int newHeight, const armnn::CheckLocation &amp;location, const ResizingMethods meth=ResizingMethods::STB, const std::array&lt; float, 3 &gt; &amp;mean={{0.0, 0.0, 0.0}}, const std::array&lt; float, 3 &gt; &amp;stddev={{1.0, 1.0, 1.0}}, const float scale=255.0f)</div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_image_8cpp_source.xhtml#l00209">InferenceTestImage.cpp:209</a></div></div>
<div class="ttc" id="class_inference_test_image_xhtml_afe2346f1f07296902bc8d84beb69b45da38f4e5f66749f755f54ef67faa2058dc"><div class="ttname"><a href="class_inference_test_image.xhtml#afe2346f1f07296902bc8d84beb69b45da38f4e5f66749f755f54ef67faa2058dc">InferenceTestImage::WriteFormat::Tga</a></div></div>
<div class="ttc" id="class_inference_test_image_xhtml_a9583c8d35e13002b79d9e65434e0b685"><div class="ttname"><a href="class_inference_test_image.xhtml#a9583c8d35e13002b79d9e65434e0b685">InferenceTestImage::InferenceTestImage</a></div><div class="ttdeci">InferenceTestImage(const char *filePath)</div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_image_8cpp_source.xhtml#l00127">InferenceTestImage.cpp:127</a></div></div>
<div class="ttc" id="_inference_test_image_8hpp_xhtml_a5f7592b0a8fa09208cd32721cf207110a103b58155b4c5cc09249629e7ccd5dc2"><div class="ttname"><a href="_inference_test_image_8hpp.xhtml#a5f7592b0a8fa09208cd32721cf207110a103b58155b4c5cc09249629e7ccd5dc2">ImageChannelLayout::Bgr</a></div></div>
<div class="ttc" id="_inference_test_image_8cpp_xhtml_ada9c94c9ae0a7082f648f75f50d57be1"><div class="ttname"><a href="_inference_test_image_8cpp.xhtml#ada9c94c9ae0a7082f648f75f50d57be1">GetImageDataInArmNnLayoutAsFloats</a></div><div class="ttdeci">std::vector&lt; float &gt; GetImageDataInArmNnLayoutAsFloats(ImageChannelLayout channelLayout, const InferenceTestImage &amp;image, TProcessValueCallable processValue)</div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_image_8cpp_source.xhtml#l00279">InferenceTestImage.cpp:279</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="dir_59425e443f801f1f2fd8bbe4959a3ccf.xhtml">tests</a></li><li class="navelem"><a class="el" href="_inference_test_image_8cpp.xhtml">InferenceTestImage.cpp</a></li>
    <li class="footer">Generated on Thu Feb 25 2021 17:27:54 for ArmNN by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
  </ul>
</div>
</body>
</html>