Sliding window in a sparse 3d volume
Afficher commentaires plus anciens
Hi, I have a 3d (MxNxL) matrix, and I want to compute for a list of x,y,z (actually all x,y, and a certain z, not for each x,y,z!) a function over a i*j*k window.
The sliding window should be of size(i*j*k) but not all values in the window are the neighborhood, for example, the window can be a sphere of radius r that is bound in that square window, or it could be a cylinder or some kind of other shape.
The results I need is a MxN matrix (2D, so no convn), where for each x,y location I have the result of the function applied on x,y 3d neighborhood. MxN could be very large, I don't want to do it with loops.
Example for a window I want to slide over the 3d volume:
[x,y,z] = meshgrid(1:r,1:r,1:r);
xc = floor(r./2)+1;
yc = floor(r./2)+1;
zc = floor(r./2)+1;
sphere_window = (x-xc).^2 + (y-yc).^2 + (z-zc).^2 <= r.^2;
7 commentaires
Sean de Wolski
le 8 Avr 2013
What does the function look like? It might be something you could do with convn() or similar but we'll have to see the function.
Orly amsalem
le 8 Avr 2013
Image Analyst
le 8 Avr 2013
If you can do it with convn, I'd recommend that. It is highly optimized so it won't be as slow as you think. For example with a 10x10x10 cube, moving it over by 1 voxel only has to read in another 100 voxels, not a thousand.
Orly amsalem
le 8 Avr 2013
Image Analyst
le 8 Avr 2013
Then use conv2().
Orly amsalem
le 8 Avr 2013
Orly amsalem
le 8 Avr 2013
Réponses (0)
Catégories
En savoir plus sur Volume Visualization dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!