Finding index location in volume?
3 views (last 30 days)
Show older comments
Syed Abdul Salam
on 16 Sep 2019
Commented: Syed Abdul Salam
on 16 Sep 2019
For instance, I have
x = 2000:0.5:2004; y = 45000:0.3:45009; z = 10:0.2:12;
which are axes of a volume, x has length of 9, y has 31 and z has 11.
Now a volume filled of nan values and given by;
C = rand(9,31,11)*nan;
I want to fill this volume with values when new values come up, it will have x, y, z and the corresponding value. So, I need to find the closest index location and fill the value there. E.g.
x =2002.13, y = 45006.811, z = 11.36 have value of 10000 so i want to fill the corresponding C(x,y,z) = 10000;
here I need to find the index for x = 2002, y = 45006.9, z = 11.4 and fill the value 10000 there in C.
how can I use the values converted to closed index in the volume. Thanks
0 Comments
Accepted Answer
Andrei Bobrov
on 16 Sep 2019
x = 2000:0.5:2004;
y = 45000:0.3:45009;
z = 10:0.2:12;
x0 = 2002.13;
y0 = 45006.811;
z0 = 11.36;
C = nan(9,31,11);
C0 = 1000;
[~,ii] = min(abs(x - x0));
[~,jj] = min(abs(y - y0));
[~,k] = min(abs(z - z0));
C(ii,jj,k) = C0;
More Answers (1)
Nicolas B.
on 16 Sep 2019
Hi,
for your case, I would write your code like that:
x = 2000:0.5:2004; y = 45000:0.3:45009; z = 10:0.2:12;
% no need to use rand() to generate a table of NaN and it's more flexible with automatic size
C = NaN(length(x), length(y), length(z));
% your points
pts = [2002.13, 45006.811, 11.36];
% your coordinates
[~, xc] = min(abs(x - pts(1)));
[~, yc] = min(abs(y - pts(2)));
[~, zc] = min(abs(z - pts(3)));
% your value
C(xc, yc, zc) = my_value;
Do it help you?
See Also
Categories
Find more on 3-D Volumetric Image Processing in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!