Sliding window in a sparse 3d volume
显示 更早的评论
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 个评论
Sean de Wolski
2013-4-8
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
2013-4-8
Image Analyst
2013-4-8
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
2013-4-8
Image Analyst
2013-4-8
Then use conv2().
Orly amsalem
2013-4-8
Orly amsalem
2013-4-8
回答(0 个)
类别
在 帮助中心 和 File Exchange 中查找有关 Volume Visualization 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!