# How to compute the density of a 3D point cloud?

190 次查看（过去 30 天）
Ali 2020-7-12

I'm trying to write a program that operates on 3D point clouds (.ply, .pcd), I need to know the density of the given point cloud file and compare it with a threshold or certain percentage to decide for some operations. How can I do that?
I have found this for 3D point clouds on the web:
Two methods can be used to compute the density:
• either 'Precise': the density is estimated by counting for each point the number of neighbors N (inside a sphere of radius R)
• or 'Approximate': the density is simply estimated by determining the distance to the nearest neighbor (which is generally much faster). This distance is considered as being equivalent to the above spherical neighborhood radius R (and N = 1).
However I'm not sure how to put this into matlab code, I guess I should use pcfitplane for sphere fitting and findNearestNeighbors. Would appreciate a step by step example.

### 采纳的回答

You can just directly apply the definition you gave considering that the density is N/Volume. The easiest is the second one, which would be:
K = 1;
for idx=1:length(AllPoints)
[~,r] = findNearestNeighbors(AllPoints,AllPoints(idx,:),K);
density(idx) = 1/(4*pi*r.^3/3);
end
The first one is a little more complicated but at the same time not so much:
R = 1; % depends on your data
for idx=1:length(AllPoints)
Distances = sqrt( sum( (AllPoints-AllPoints(idx,:)).^2 ,2) );
Ninside = length( find(Distances<=R) );
density(idx) = Ninside/(4*pi*R.^3/3);
end
##### 6 个评论显示 5更早的评论隐藏 5更早的评论
Ali 2020-7-12
I did try my suggested order and indeed your statement is true, no difference in results. I appreciate your time and help.

### 类别

Help CenterFile Exchange 中查找有关 Point Cloud Processing 的更多信息

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!