From: ImageAnalyst on
On Mar 26, 4:49 am, "Israel Johnson" <mconvers...(a)gmail.com> wrote:
> I have a 3D binary matrix.  The ones form a complete cluster within a sea of zeros.  I need to find the surface area of the cluster.  My initial plan was to use regionprops(M(:,:,i),'Perimeter') for all of the slices i=1:n and then multiply by the distance between the slices (rough but good enough).  However it seems that when I put the perimeter function in a loop that it only tracks the final slice.  
>
> There should be a better way.  Summing triangles w/ vertices? But I really have no idea how to tackle that either.  Any help.  Thanks

--------------------------------------------------------------------------------------------------
Even though there's a 3D labeling routine, bwlabeln(), there does not
appear to be a 3D regionprops equivalent for perimeter - in other
words, there's no surface area. In 3D the "Area" measurement of
regionprops should be a voxel count. So what I'd do is to make a
shell of your objects by eroding your 3D image a layer with imerode
and subtracting it from the original. This will give you the shell,
or outer layer, of your objects. Then just call bwlabeln() followed
by regionprops(), and look at the Area measurement. This will
actually be the voxel count of your shell which is just the surface
area.

Or go to Steve Eddins blob and ask him. http://blogs.mathworks.com/steve/
Good luck,
ImageAnalyst