最近在学点云相关的东西,废话不对说,说说最近学到了什么。
首先点云这玩意是3D的,他和2D不同。2D里面一些算法不仅仅是对空间距离进行运算,更多的是像素的运算,比如双边滤波,高斯滤波,均值滤波,这些滤波,他们依赖的是像素空间或者是距离空间的移位加权和,或者模板匹配,用到的是卷积或者是二次行求导等等等等方法。
在 点云中,首先第一点我们如果去找某个点附近的值,这里就是我这两天学到的KD_TREE和OCTREE,其实这个就是二叉树和八叉树,对于学个算法的应该早就熟悉的不能再熟悉了。
但是,以前之前知道理论或者是简单实现一下相关功能,比如下面,我简单实现了一下二叉树的功能。
class BinaryTree {
private:
struct Node {
int data;
Node* left;
Node* right;
Node(int value) : data(value), left(nullptr), right(nullptr) {}
};
Node* root;
Node* insertNode(Node* root, int value) {
if (root == nullptr) {
return new Node(value);
}
if (value < root->data) {
root->left = insertNode(root->left, value);
} else {
root->right = insertNode(root->right, value);
}
return root;
}
bool searchNode(Node* root, int value) {
if (root == nullptr) {
return false;
}
if (value == root->data) {
return true;
} else if (value < root->data) {
return searchNode(root->left, value);
} else {
return searchNode(root->right, value);
}
}
void inorderTraversal(Node* root) {
if (root == nullptr) {
return;
}
inorderTraversal(root->left);
std::cout << root->data << " ";
inorderTraversal(root->right);
}
public:
BinaryTree() : root(nullptr) {}
void insert(int value) {
root = insertNode(root, value);
}
bool search(int value) {
return searchNode(root, value);
}
void inorder() {
inorderTraversal(root);
std::cout << std::endl;
}
};
但是