# Detection of Household Furniture Storage Space in Depth Images
## 3 Methods
### Empty Storage Volume Detection Algorithm  
The empty storage volume detection algorithm provides ground truth annotation of storage volumes in empty 3D furniture models. Furniture models are assumed to be in form of a triangular mesh, rectangular in shape with edges aligned with the axes of the mesh coordinate system. In general, empty storage volume can be considered as unoccupied space within or on top of furniture supported by a hard, flat, horizontal surface, referred to in this paper as a _supporting surface_. A supporting surface must be a part of the furniture, which is presumably rectangular in shape. Therefore, the ground truth annotations are cuboids enclosing empty volumes inside or on the top of furniture.  
The 3D mesh models are rasterized into a \(n\times n\times n\) binary 3D voxel grid, which is used as input to the algorithm. The voxelized form allows straight-forward voxel classification into voxels occupied by furniture structure and unoccupied voxels. Voxels that are not occupied by the furniture structure indicate free space that could potentially be used as empty storage volume. In addition, it is possible to detect groups of unoccupied voxels above a layer of occupied voxels, which indicate storage volumes above a supporting surface. Based on this idea, we propose an empty storage volume detection algorithm consisting of four steps:  
1. Creating voxelized representation of the input mesh
2. Detection of free space;
3. Detection of empty storage volume candidates in the free space;
4. Empty storage volume candidate pruning Bounding box fine-tunning.  
Each of these steps is further explained below.  
```
Input: CAD models of empty furniture \(M_{CAD}\) and clutter set Output: furniture model depth image \(I_{3D}\) with set of annotated oriented bounding boxes of storage volumes \(OBB\) procedure\(\textsc{Voxelization}(M_{CAD})\)\(\triangleright\) Process I Transform \(M_{CAD}\) from mesh to voxel sapce return\(M_{boxel}\) end procedure procedure Empty storage volume detection(\(M_{boxel}\))\(\triangleright\) Process I Step 1. Compute occupancy grid Step 2. Compute occupancy distances Step 3. Detect free space cores Step 4. Detect empty storage volumes \(ESV\) Step 5. Prune empty storage volumes Step 6. Transform empty storage volumes from voxel to mesh space Step 7. Adjust detected axis-aligned bounding boundig boxes \(AABB\) to enclosed storage volumes return\(AABB\) end procedure procedure Synthetic scene generator(\(M_{CAD}\), \(AABB\), clutter set) \(\triangleright\) Process II Step 1. Scale \(M_{CAD}\) using a random scale Step 2. Add random items from \(clutterset\) to each \(AABB\) Step 3. Place \(M_{CAD}\) on a horizontal plane representing the floor Step 4. With \(P(wall)\) generate vertical plane behind \(M_{CAD}\) representing a wall Step 5. Position virtual camera at \(T_{PoV}\) facing \(M_{CAD}\) Step 6. Render depth images \(I_{3D}\) Step 7. Superpose simulated camera noise to \(I_{3D}\) Step 8. Get oriented bounding boxes \(OBB\) from \(AABB\) and \(C_{PoV}\) return\(I_{3D}\), \(OBB\) end procedure
```  
**Algorithm 1** Synthetic dataset generator.