How to get XYZ coordinates of all non-zero voxels in a 3D volume?

30 views (last 30 days)
I have an NxMxP matrix that forms a volume. Programs like ImageJ have a function to save the XY coordinates of any pixels above a certain threshold, is there a good way to implement this in 3D in matlab?

Accepted Answer

Ameer Hamza
Ameer Hamza on 18 May 2020
Try something like this
M = randi([0 5], 20, 30, 10); % example matrix
idx = find(M); % find nonzero values in M
[y,x,z] = ind2sub(size(M), idx);
y is the row number, x is column number, and z is the 3D slice number of non-zero entries.

More Answers (1)

Rik
Rik on 18 May 2020
If you want to hide a bit of the implementation that Ameer showed you: I have extended the capabilities of find to more dimensions. You can find my findND function here on the FEX.
M = randi(255, 20, 30, 10); % example matrix
[y,x,z] = findND(M>100);

Products


Release

R2019b

Community Treasure Hunt

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

Start Hunting!