count 3D points to construct 3D voxel plot

4 Ansichten (letzte 30 Tage)
hahaha_hahaha
hahaha_hahaha am 12 Sep. 2015
Kommentiert: hahaha_hahaha am 12 Sep. 2015
I am using MATLAB R2015a on OSX 10.10.5. I would like to count number of points in a 3D grid and plot the voxel color coded with the counts. However my code produced a voxel plot that is not consistent with a scattered plots of my data (attached). I have high voxel counts in regions with few data points. Could you point out my error? Thank!
load data
bins = 20;
xedge = linspace(min(data(:,1)),max(data(:,1))+1e14*eps,bins);
yedge = linspace(min(data(:,2)),max(data(:,2))+1e14*eps,bins);
zedge = linspace(min(data(:,3)),max(data(:,3))+1e14*eps,bins);
loc = zeros(size(data));
len = length(xedge)-1;
mid = zeros(len,3);
for i = 1:len
mid(i,1) = (xedge(i)+xedge(i+1))/2;
mid(i,2) = (yedge(i)+yedge(i+1))/2;
mid(i,3) = (zedge(i)+zedge(i+1))/2;
end
[~,loc(:,1)] = histc(data(:,1),xedge);
[~,loc(:,2)] = histc(data(:,2),yedge);
[~,loc(:,3)] = histc(data(:,3),zedge);
hasdata = all(loc>0,2);
sz(1:3) = len;
cnt = accumarray(loc(hasdata,:),1,sz);
figure
subplot(1,2,1)
scatter3(data(:,1),data(:,2),data(:,3))
view(3)
subplot(1,2,2)
[x,y,z] = meshgrid(mid(:,1),mid(:,2),mid(:,3));
[~,I] = max(cnt(:));
[xi,yi,zi] = ind2sub(size(cnt),I);
slice(x,y,z,cnt,mid(xi,1),mid(yi,2),mid(zi,3),'nearest')
view(3)

Akzeptierte Antwort

Walter Roberson
Walter Roberson am 12 Sep. 2015
Your code appears to be well designed.
What I notice when I test with your code is that the slice output appears to be the mirror of the scatter output along the y axis. I am not sure why that is at the moment, but try
slice(x,y,z,permute(cnt,[2 1 3]),mid(xi,1),mid(yi,2),mid(zi,3),'nearest')
If that works for you then the explanation would be rooted in the fact that for matrices, x is the columns and y is the rows

Weitere Antworten (0)

Kategorien

Mehr zu Animation finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by