50 views (last 30 days)

Show older comments

How can I calculate the thickness for the attached image??

I did segmentation for all the nerves in the image and I labelled each object in the image. What I want is how can I calculate the thickness of each nerve? And how can I highlight a specific part of the nerve if there is an inflation in any nerve?

Your help in this regard is highly appreciated, thank you in advance

Image Analyst
on 4 Mar 2015

Use regionprops to measure area and perimeter. Then assume blobs are long and thin. So area = length*width and perimeter = 2*w+2*l = 2*w+area/w. So

w*P = 2*w^2 + A

or

0 = 2*w^2-w*P + A

Use quadratic formula to solve

w = (P - sqrt(P^2-4*2*A))/(2*2)

w = (P-sqrt(P^2-8*A))/4

Image Analyst
on 8 Mar 2015

First you need to get a good binary image like you had before. Maybe you can just threshold it, or maybe use a Frangi filter or maybe use anisotropic diffusion (demo attached).

Then you need to use bwdist() to get the thickness of each place in the nerves. But the thickness will only be along the centerline of the distance transform and you want the entire thickness to be represented by some color, not just the centerline so you need to dilate out the centerline to that it takes up the whole binary image. To do this, use imdilate() which is a local max filter. Dilate it out a lot, like twice as big as the nerve. Then mask the dilated image by the original binary image to crop it to just the nerve boundaries. Now you have a solid color all the way out to the edge and you can simply apply a colormap. So the steps are

- process and get a binary image
- call bwdist
- call imdilate
- mask: out = dilatedImage .* binaryImage
- colorize: colormap().

If you have trouble, post your code.

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

Start Hunting!