Improving the efficiency of triple nested loop

5 views (last 30 days)
The code tests a 3D binary array for the largest sphere that can fit into the porous regions. The code works however for a 40x40x40 array for a triple nested loop, the code runs slowly. I was wondering if there were a way that it could be rewritten as to not take so long. An initial idea was not using interp3 every single iteration but I was not sure how to write that.
function poresize=poresizeAlgorithm(tiff,scaffoldLength)
tiffInv=~tiff;
j=size(tiff,1);
k=size(tiff,2);
l=size(tiff,3);
[x,y,z] = meshgrid([1:j],[1:k],[1:l]);
[x1,y1,z1] = meshgrid([1:j],[1:k],[1:l]);
r=0.5;
position=[];
for m=1+ceil(r):size(tiffInv,1)-ceil(r)
for n=1+ceil(r):size(tiffInv,2)-ceil(r)
for o=1+ceil(r):size(tiffInv,3)-ceil(r)
centreSphere=tiffInv(m,n,o);
if centreSphere==1
%add sphere to array
equ = ((x-m).^2 + (y-n).^2 + (z-o).^2)./(r.^2);
z11 = interp3(x,y,z,equ,x1,y1,z1,'nearest'); %was spline
ix = 1 > z11;
volSphere=sum(ix,'all');
testSphere=ix+tiffInv;
numTwo=sum(testSphere(:) == 2);
if volSphere==numTwo
output=[m,n,o,r];
position=[position output];
r=r+0.25;
position2=[reshape(position,4,[])]';
continue
end
end
end
end
end
poresize=(scaffoldLength/j) * (position2(end,4)*2);
end
  5 Comments
Dyuman Joshi
Dyuman Joshi on 29 Dec 2023
What is the objective/idea behind the interp3 line?
If you can provide additional details regarding what you are trying to do, we might be able to offer more suggestions.
Matthew Bedding
Matthew Bedding on 29 Dec 2023
The interp3 line is to generate a binary 3D array where 1 defines voxels that are inside the sphere and 0 defines voxels that are outside the sphere.

Sign in to comment.

Answers (1)

Matt J
Matt J on 29 Dec 2023
Edited: Matt J on 31 Dec 2023
It seems like you could just use bwdist,
poresize = 2*max(bwdist(tiff),[],'all')
  5 Comments
Matt J
Matt J on 1 Jan 2024
Edited: Matt J on 1 Jan 2024
So, you are now persuaded that my answer does solve the problem you've posted?

Sign in to comment.

Products


Release

R2021a

Community Treasure Hunt

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

Start Hunting!