# Optimization of the 3D Point Cloud Registration Algorithm Based on FPFH Features
## 2 Rough Surface Matching Based on Octree and Edge Feature Point Algorithm
### Point Cloud Filtering Processing  
When collecting point cloud data, there will be some useless data points, called noise points, due to the wear and tear of equipment, lighting conditions, and other uncontrollable factors. Because their existence will affect the subsequent registration process, it is necessary to filter the collected point cloud data. The original point cloud statistical filtering method may remove some points with local features while removing noise, which will have a certain impact on the subsequent registration process. Based on the original statistical filtering, this paper introduces the voxel idea and divides the point cloud data into many small voxel units, which enhances the accuracy of the filtering process and improves the efficiency of point cloud filtering. The improved ideas are summarized as follows:  
1) Determination of the side length of the voxel unit. When measuring point cloud data, the density of point cloud data obtained from different angles is also very different. The density of the point cloud is shown in Figure 7. The point cloud density is introduced to calculate the voxel side length. The specific method is as follows:  
\[s =\frac{1}{\rho} \tag{1}\] \[\partial =\frac{N}{v}\] (2) \[L^{\prime} =s^{3}\sqrt{\frac{1}{\partial}} \tag{3}\]  
Figure 5: Based on octree sampling. Figure 6: Sampling algorithm in this paper. In Equation (1), \(\rho\) is the surface density of the point cloud, and \(s\) is the specific density. In Equation (2), \(N\) is the volume of the point cloud used, \(v\) is the volume of one block after the point cloud data are partitioned, and \(\partial\) is the number of blocks of the point cloud. In Equation (3), \(L^{\prime}\) is the side length of the voxel to be estimated. Synthesizing the above equation, the voxel side length can be determined as:  
\[L^{\prime}=\frac{1}{\rho}\sqrt[]{\frac{v}{N}} \tag{4}\]  
2) Determination of the number of voxel units. According to Equation (4), the number X of voxel units can be determined as follows:  
\[X=\frac{v}{L^{\prime 3}}=N\times\rho^{3} \tag{5}\]  
3) Determination of \(d_{i}\), the distance between each neighborhood point and the center of gravity point. After calculating the barycenter coordinate \(p_{m}=(x_{m},y_{m},z_{m})\) of each voxel unit, take its mean value and record it as \(N=(\overline{x_{m}},\overline{y_{m}},\overline{z_{m}})\), construct a new set of data points, and then calculate the distance \(d_{i}\):  
\[d_{i}=\sqrt{\left(x_{i}-\overline{x_{m}}\right)^{2}+\left(y_{i}-\overline{y_{ m}}\right)^{2}+\left(z_{i}-\overline{z_{m}}\right)^{2}} \tag{6}\]  
4) Calculate the average distance between each point in the neighborhood and the N point, and calculate the mean \(\mu\) and variance \(\sigma^{2}\):  
\[\overline{d}=\frac{\sum\limits_{i=1}^{n}d_{i}}{n} \tag{7}\]  
\[s =\frac{1}{\rho} \tag{1}\]0  
\[s =\frac{1}{\rho} \tag{1}\]1  
5) Set the distance threshold. Calculate the distance threshold by using the results obtained from Equations (8) and (9). The expression can be written as:  
\[s =\frac{1}{\rho} \tag{1}\]2  
In Equation (10), k is the scaling coefficient, and the value is related to the number of points in the point cloud data. 6) Screening fractions of noise points. The screening conditions are as follows:  
\[s =\frac{1}{\rho} \tag{1}\]3  
Traverse the whole sampled point cloud data, remove the noise points that meet the above conditions, and output the point cloud data after the removal. \[s =\frac{1}{\rho} \tag{1}\]4 Visualization diagram of cloud density. This paper uses the teapot point cloud data set, Stanford bunny point cloud data set, and free-form surface data set for verification. There are 4,000 random noise points in each of the three point cloud data sets. Through the following experiments, we can see the difference between using a single statistical filtering method and the filtering algorithm used in this paper.