KOKIAOKI / 3d_bbs

MIT License
172 stars 28 forks source link

Why function create_neighbor_coords using (-1) ? #12

Closed qpc001 closed 7 months ago

qpc001 commented 8 months ago

The calculating coords is used .floor() to get lower bound.

But why create_neighbor_coords still using (-1) to get neighbor, not (+1) ?

KOKIAOKI commented 8 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 commented 8 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.

It seem to be difficult to understand, if can share a diagram will be better.

KOKIAOKI commented 8 months ago

OK. Please let me know when I create the material.

KOKIAOKI commented 7 months ago

Thank you for waiting. I'm currently creating materials for the presentation. Please wait for a while.

iDonghq commented 7 months ago

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

KOKIAOKI commented 7 months ago

@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.

multi-voxel-upperbound-1page.pdf

iDonghq commented 7 months ago

@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.

multi-voxel-upperbound-1page.pdf

Great!!! Thank you very much.

qpc001 commented 7 months ago

Ohh, I see. It also correlates to the function ' void branch(std::vector& b ...)'.

Thank you for your answer.