# Real-Time 3D Reconstruction Pipeline for Room-Scale, Immersive, Medical Teleconsultation
## 6 Evaluation
### Performance Characteristics
#### 6.3.2 Full System Performance  
To process a stream of depth images in real time, our method must keep up with the recording speed of 30 frames per second. Our playback system feeds images into the reconstruction pipeline as fast as possible, allowing observed frame rates above 30 FPS, which we achieve on average through our recording using the _LOD_ preset, and only misses by 2 FPS for _unsimplified-_ and _simplified-low-detail_ (Table 3), which is due to a slight CPU bottleneck (Table 2) in mesh extraction.  
\begin{table}
\begin{tabular}{c c c c c} \hline \hline \multirow{2}{*}{**QEF Threshold**} & \multirow{2}{*}{**GPU (ms)**} & \multirow{2}{*}{**Vertices**} & \multirow{2}{*}{**Triangles**} & \multicolumn{2}{c}{**Memory (MiB)**} \\ \cline{3-4}  & & & & **rel.** & **abs.** \\ \hline
0 & 0 & 117,228 & 414,820 & 100\% & 7.43 \\ \(1\times 10^{-5}\) & 10.88 & 117,055 & 409,582 & 99\% & 7.37 \\ \(5\times 10^{-5}\) & 10.65 & 87,338 & 295,169 & 72\% & 5.38 \\ \(1\times 10^{-4}\) & 10.97 & 72,736 & 239,102 & 59\% & 4.4 \\ \(1\times 10^{-3}\) & 11.16 & 57,611 & 169,441 & 44\% & 3.26 \\ \(1\times 10^{-2}\) & 12.3 & 53,933 & 157,055 & 41\% & 3.03 \\ \hline \hline \end{tabular}
\end{table}
Table 1: Simplification Benchmarks. Simplification run time and resulting mesh size for the first frame of our recording (Section 6). The memory requirement is calculated by assuming a simple indexed mesh representation requiring 24 bytes per vertex for position and normal and 12 bytes per triangle.  
\begin{table}
\begin{tabular}{c c c c} \hline \hline \multirow{2}{*}{**Processing Stage**} & \multicolumn{3}{c}{**Run Time (ms)**} \\ \cline{2-4}  & **Min.** & **Avg.** & **Max.** \\ \hline Temporal filter (6 images) & 0.065 & 0.125 & 15.147 \\ \hline Octree generation & 0.527 & 5.691 & 5.839 \\ \hline PCA surface sample reconstruction & 0.012 & 11.642 & 41.65 \\ \hline Simplification & 0.096 & 10.814 & 11.677 \\ \hline mesh extraction (14 CPU cores) & 30.347 & 37.809 & 55.196 \\ \hline Mesh finalization & 0.783 & 0.825 & 0.882 \\ \hline \hline \end{tabular}
\end{table}
Table 2: Pipeline Benchmarks. Run time of each processing stage using the _simplified-low-detail_ preset. GPU times captured using the NVIDIA Nsight Compute gpu_time_active metric. Approximately 1500 samples recorded for our entire recording (Section 6).  
The latency figures (Table 3) are larger than necessary due to our usage of a ring buffer (Figure 3) that queues up to 2 frames to fully saturate the mesh extraction process. If the mesh extraction is not saturated and, therefore, no frames are queued up, like in the \(LOD\) preset, latency is the sum of all serial processing steps (Table 2) with some communication overhead.  
Figure 17: Mesh Extraction Benchmarks. CPU scaling measurements of our mesh extraction: (**a**) effective utilization calculated as a fraction of time spent on tasks relative to the total active CPU time, (**b**) box plot of the total run time with respect to multiple CPU threads using the _unsimplified-low-detail_ preset and (**c**) _simplified-low-detail_ preset. Using all samples of our recording (Section 6). Box plot whiskers denote the 99 th percentile of 1728 measurements.