Kd-Tree/Octree Search

1. Kd-tree/Octree๋ฅผ ์ด์šฉํ•œ ์ ๊ตฐ ํƒ์ƒ‰ ๋ฐ ๋ฐฐ๊ฒฝ ์ œ๊ฑฐ

ํŠน์ • ์ ์„ ๊ธฐ์ค€์œผ๋กœ ๊ฐ€๊นŒ์ด ์žˆ๋Š” ์ ๋“ค์€ ๋ฌด์—‡์ธ์ง€? ์ขŒํ‘œ๋Š” ์–ด๋–ป๊ฒŒ ๋˜๋Š”์ง€ ์•Œ๊ณ  ์‹ถ์„ ๋•Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค(efficiently query for objects at or near a location). ์ด๋Ÿฌํ•œ ํƒ์ƒ‰๋“ค์€ ์ ๊ตฐ์—์„œ ์ด์›ƒ ์  ๋“ค๊ณผ์˜ ๋น„๊ต๋ฅผ ํ†ตํ•œ ํŠน์ง• ์ถ”์ถœ์— ํฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ์ด์ „์— ์‚ดํŽด๋ณด์•˜๋˜ filters์™ธ์—๋„ ํ–ฅํ›„, surface, features, registration๋“ฑ๋„ ํƒ์ƒ‰ ๊ธฐ๋Šฅ์— ๋ฐ”ํƒ•์„ ๋‘๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. PCL์—์„œ๋Š” ๋‹ค์–‘ํ•œ ํƒ์ƒ‰ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • BruteForce :simple brute force search algorithm

  • OrganizedNeighbor : KNN search in organized point clouds

  • KdTree

  • Octree

  • FlannSearch

๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์€ ๋ชจ๋“  ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜ ์ •๋ณด๋ฅผ array์— ์ €์žฅํ•˜๊ณ , ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ํƒ์ƒ‰ํ•ด์„œ ์ฐพ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋งค ์ˆœ๊ฐ„ ๋งค ํฌ์ธํŠธ์— ๋Œ€ํ•˜์—ฌ ๊ฒ€์ƒ‰ํ•  ๊ฒฝ์šฐ ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ณต๊ฐ„์„ ๋ถ„ํ• ํ•˜์—ฌ ๊ตฌ์กฐํ™”ํ•˜์—ฌ ํƒ์ƒ‰์„ ํ•˜๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค. Spatial partitioning ํšจ์œจ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด space-partitioning data structure๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. spatial data structure๋Š” ์œ„์น˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ฒด์ž…๋‹ˆ๋‹ค. ์ด ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ฒŒ ๋˜๋ฉด ํšจ์œจ์ ์œผ๋กœ ๋ ˆ์ธ์ง€ ์„œ์น˜์™€ ๊ทผ์ ‘ ์ด์›ƒ ํƒ์ƒ‰์ด ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค.

[๊ทธ๋ฆผ 1] Grid, Quadtree, Octree, k-d Tree

๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ spatial partitions ๋ฐฉ๋ฒ•์€ ์•ž์—์„œ ๋ฐฐ์šด ๊ทธ๋ฆฌ๋“œ(2D)/๋ณต์…€(3D)์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฒฉ์ž๋ฅผ ํ†ตํ•œ ์ ‘๊ทผ๋ฒ•์€ ๊ณจ๊ณ ๋ฃจ ๋ถ„์‚ฐ๋˜์–ด ์žˆ๋Š” ์ ์— ๋Œ€ํ•ด์„œ ๊ตฌํ˜„ํ•˜๊ธฐ ์‰ฌ์šด ํ•ด๋ฒ•์ด์ง€๋งŒ, ์ ์ ˆํ•œ ํฌ๊ธฐ๋ฅผ ์„ ์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ๋นˆ๊ณต๊ฐ„์œผ๋กœ ์ธํ•œ ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„์™€ ๊ณ„์‚ฐ ํšจ์œจ์„ฑ์ด ๋–จ์–ด ์ง‘๋‹ˆ๋‹ค. ๊ณต๊ฐ„์„ ์กฐ๊ธˆ ๋” ์ ์ ˆํžˆ ๋‚˜๋ˆ„๋Š” ๋ฐฉ๋ฒ•์€ ๊ณต๊ฐ„๋ถ„ํ•  ํŠธ๋ฆฌ(Space-partitioning trees)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋Œ€ํ‘œ์ ์ธ ๋ฐฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • k-d trees

  • Octrees(3D)

1.1. Kd-TRee๊ธฐ๋ฐ˜ ๊ฒ€์ƒ‰

BST(Binary Search Tree)๋ฅผ ๋‹ค์ฐจ์› ๊ณต๊ฐ„์œผ๋กœ ํ™•์žฅํ•œ ๊ฒƒ์œผ๋กœ, ๊ฐ ๋…ธ๋“œ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ณต๊ฐ„์˜ K ์ฐจ์› ํฌ์ธํŠธ์ธ ์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ BST์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ ํŠธ๋ฆฌ์˜ ๋ ˆ๋ฒจ ์ฐจ์›์„ ๋ฒˆ๊ฐˆ์•„ ๊ฐ€๋ฉฐ ๋น„๊ตํ•œ๋‹ค๋Š” ์ ์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค. [๊ทธ๋ฆผ 2]๋Š” BST์™€ 2D, 3D kd-tree ๋ฅผ ํ‘œํ˜„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

[๊ทธ๋ฆผ 2] 2D, 3D, Kd-tree

Last updated

Was this helpful?