Closed qpc001 closed 7 months ago
@qpc001 Thank you for asking. This is to efficiently find the upper bound of the child node. The score of parent node must be higher than children's score.
The parent node gets +1 for each elements of coordinate and branches to child nodes. If query points that does not fit into a voxel at the parent node's pose enters a voxel at the child node's position, the upper bound will not be maintained. So, considering the branching movement, we fill neighbor voxel (-1 side voxel) manually.
If it is difficult to understand, I will show you a diagram.
@qpc001 Thank you for asking. This is to efficiently find the upper bound of the child node. The score of parent node must be higher than children's score.
The parent node gets +1 for each elements of coordinate and branches to child nodes. If query points that does not fit into a voxel at the parent node's pose enters a voxel at the child node's position, the upper bound will not be maintained. So, considering the branching movement, we fill neighbor voxel (-1 side voxel) manually.
If it is difficult to understand, I will show you a diagram.
It seem to be difficult to understand, if can share a diagram will be better.
OK. Please let me know when I create the material.
Thank you for waiting. I'm currently creating materials for the presentation. Please wait for a while.
Thank you for waiting. I'm currently creating materials for the presentation. Please wait for a while.
Hi KOKIAOKI
Thanks for your amazing work about 3d_bbs. Could you finish the materials about 'diagram' from [qpc001]? my email donghq6@163.com.
Thanks again.
haiqing Dong
@iDonghq Thank you for contacting me!
@qpc001 @iDonghq Sorry for the delay reply. I will share the preliminary diagram.
Please look at attached pdf. This is 2D explanation for easy understanding. (a) Voxels that have target points are filled (b) Parents nodes are branched. Input points are transformed from pose of the parent node (red) to children nodes (blue). Score is the number of input points that in the filled voxels. When input points are transformed into each pose of children, the upper bound is the maximum value of the score of children nodes. But it requires four node score calculations. (c) To calculate upperbound efficiently, we fill the voxels belonging to the negative direction of each component of the voxel (orange voxel). This considere the translational movement (dotted arrows) due to the branching. As you can see, the number of the points that is in the filled voxles (upper bound) exceeds the children's score and upper bound requires only one calculation.
I hope you understand it well. If there are any questions, please tell me in this thread. Thank you.
@iDonghq Thank you for contacting me!
@qpc001 @iDonghq Sorry for the delay reply. I will share the preliminary diagram.
Please look at attached pdf. This is 2D explanation for easy understanding. (a) Voxels that have target points are filled (b) Parents nodes are branched. Input points are transformed from pose of the parent node (red) to children nodes (blue). Score is the number of input points that in the filled voxels. When input points are transformed into each pose of children, the upper bound is the maximum value of the score of children nodes. But it requires four node score calculations. (c) To calculate upperbound efficiently, we fill the voxels belonging to the negative direction of each component of the voxel (orange voxel). This considere the translational movement (dotted arrows) due to the branching. As you can see, the number of the points that is in the filled voxles (upper bound) exceeds the children's score and upper bound requires only one calculation.
I hope you understand it well. If there are any questions, please tell me in this thread. Thank you.
Great!!! Thank you very much.
Ohh, I see. It also correlates to the function ' void branch(std::vector
Thank you for your answer.
The calculating coords is used .floor() to get lower bound.
But why create_neighbor_coords still using (-1) to get neighbor, not (+1) ?