필터 지우기
필터 지우기

How to find number of points in 3d gridded data

조회 수: 8 (최근 30일)
DP87
DP87 2017년 12월 7일
편집: Cedric 2018년 6월 13일
I have a large dataset of 3D points (x,y,z) and need to divide them into a regular grid of voxel and to count the number of points that fall into each voxel. Because the dataset is very large I need to use some efficient built-in function and avoid to iterate along each cell comparirg the coordinates.
How can I create a 3D grid of voxels? How can I compute the number of points for each cell?
Any help it is appriciate. Thanks in advance

답변 (1개)

saumya jayasundara
saumya jayasundara 2018년 6월 12일
편집: Cedric 2018년 6월 13일
prompt='What is the threshould value for cell size?'; T=input(prompt);
load('Point2.mat');
[m,n] = size(Point);
count=1;
Xmax=Point(count,1);
Xmin=Point(count,1);
Ymax=Point(count,2);
Ymin=Point(count,2);
while count< m
count=count+1;
if Xmax<Point(count,1)
Xmax=Point(count,1);
end
if Xmin>Point(count,1)
Xmin=Point(count,1);
end
if Ymax<Point(count,2)
Ymax=Point(count,2);
end
if Ymin>Point(count,2)
Ymin=Point(count,2);
end
end
Xmax;
Xmin;
Ymax;
Ymin;
corner1=[Xmin,Ymin];
corner2=[Xmax,Ymin];
corner3=[Xmax,Ymax];
corner4=[Xmin,Ymax];
cellx = floor(((Xmax-Xmin)/T)+T);
celly = floor(((Ymax-Ymin)/T)+T);
cell= zeros(cellx,celly);
cellcount=1;
for ycount = 1:celly
for pcount = 1:cellx
cell(pcount,ycount)= cellcount;
cellcount=cellcount+1;
end
end
attribute1=zeros(m,2);
Point=[Point(:,1:3) attribute1];
'Devide Grid'
%for cellcount2= 1:cellcount
for xcount= 1:m
if Point(xcount,4)==0
for cellxc =1:cellx
l=cellxc*T;
if(Xmin+l-T)<=Point(xcount,1)
if Point(xcount,1)<(Xmin+l)
for cellyc= 1:celly
k=cellyc*T;
if (Ymin+k-T)<=Point(xcount,2)
if Point(xcount,2)<(Ymin+k)
Point(xcount,4)=cell(cellxc,cellyc);
break
else
continue
end
else
continue
end
end
else
continue
end
else
continue
end
end
else
continue
end
end
'Devided'
%Point(1:100,:)
%file=fopen('point.txt','w');
%fprintf(file,Point);
%sum=0;
%sumdiv=0;
%for cellcnt= 1:cellcount
% for Pcount2=1:m
% if Point(Pcount2,4)==cellcnt
% sum=sum+Point(Pcount2,3);
% sumdiv=sumdiv+1;
% else
% continue
% end
%end
%avg=sum/sumdiv;
%for Pcount2=1:m
% if Point(Pcount2,4)==cellcnt
% Point(Pcount2,5)=avg;
% else
% continue
%end
%end
%end

카테고리

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!

Translated by