How to measure the thickness of an object having inner & outer irregular circle like shapes
Show older comments
I have segmented left ventricle in a MRI image using Random-Walker as shown in below image. Now I want to measure the thickness of Myocardium i.e. the gap between the inner & outer shape as shown in the following figure. Can someone please help me with this. Thanks in advance for your help! http://img690.imageshack.us/img690/9152/output1.jpg
4 Comments
Matt J
on 31 Dec 2012
How would you define "thickness" seeing as the gap between the inner and outer shape does not have a uniform cross-section?
Prashant Kashid
on 31 Dec 2012
Walter Roberson
on 31 Dec 2012
Look at the very top of the inner area. Should the "thickness" there be the distance to the outer area directly above it ("north" of it), or should the "thickness" there be the distance between the point and the nearest point in the outer circle ?
Prashant Kashid
on 31 Dec 2012
Accepted Answer
More Answers (1)
Image Analyst
on 31 Dec 2012
Edited: Image Analyst
on 31 Dec 2012
0 votes
What I would do, since you already have the coordinates of the inner and outer boundary (which is the really tough part), would be to get the area of the zone and divide by the length of the zone. You can do this:
- Use polyarea() on both boundaries to get both areas, or use regionprops if you have a binary image instead of boundary coordinates
- Subtract the areas to get the area of the "in between" zone
- Determine the perimeter of both boundaries. There are a variety of ways such as regionprops()
- Take the average of those two perimeters. This can be considered as the average length of the midpoint of the zone.
- Consider the zone as a rectangle with a length of the perimeter you just calculated and an area you just calculates. So the average width is simply the (zone area) / (zone perimeter).
Would that figure of merit work for you?
An alternative way is to take double the mean value of the skeleton of the Euclidean distance map. "Huh?" you say? What's that? Well let's take it one step at a time. The Euclidean distance map is the distance from some part of a binary shape to the nearest background pixel. So it's zero at the edge, and it is maximum along the "spine" or "skeleton" of the shape because that's where it's farthest from the background. So right there in the middle (on the spine or skeleton) you have basically the radius or half the distance to the edge, which is half the thickness. So to get the thickness you double that number. So now you need to do this along every point in the skeleton and you will have an array of thicknesses. Take the mean of those thicknesses and that is your average thickness of the zone. So, basically it's this:
- Get a binary image of only the annualar zone
- Call bwdist() on the zone to get the EDM
- Call bwmorph(, 'skel') to get the skeleton
- Multiply the skeleton by the EDM image (mask it)
- Extract the non-zero pixels of that masked image
- Take their mean and multiply by 2 to get mean thickness.
They're both fairly simple. You might do it both ways and see which you like best. They should both be fairly similar in values.
Categories
Find more on Surface and Mesh Plots in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!