Improving the efficiency of triple nested loop

5 visualizaciones (últimos 30 días)
Matthew Bedding
Matthew Bedding el 28 de Dic. de 2023
Comentada: Matthew Bedding el 1 de En. de 2024
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 comentarios
Dyuman Joshi
Dyuman Joshi el 29 de Dic. de 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 el 29 de Dic. de 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.

Iniciar sesión para comentar.

Respuestas (1)

Matt J
Matt J el 29 de Dic. de 2023
Editada: Matt J el 31 de Dic. de 2023
It seems like you could just use bwdist,
poresize = 2*max(bwdist(tiff),[],'all')
  5 comentarios
Matt J
Matt J el 1 de En. de 2024
Editada: Matt J el 1 de En. de 2024
So, you are now persuaded that my answer does solve the problem you've posted?
Matthew Bedding
Matthew Bedding el 1 de En. de 2024
It doesn't but thanks for your help

Iniciar sesión para comentar.

Categorías

Más información sobre Surface and Mesh Plots en Help Center y File Exchange.

Productos


Versión

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by