Sliding window in a sparse 3d volume
Mostrar comentarios más antiguos
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 comentarios
Sean de Wolski
el 8 de Abr. de 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
el 8 de Abr. de 2013
Image Analyst
el 8 de Abr. de 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
el 8 de Abr. de 2013
Image Analyst
el 8 de Abr. de 2013
Then use conv2().
Orly amsalem
el 8 de Abr. de 2013
Orly amsalem
el 8 de Abr. de 2013
Respuestas (0)
Categorías
Más información sobre Image Processing Toolbox en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!