MATLAB: How to draw line with arbitrary orientation through a random pixel and calculate the distance along it

diameter distributionfibersImage Processing Toolboxsem image analysis

I am trying to process some SEM images of cellulose network. I have applied the gaussian blur filter and applied threshold to the original images to get the desired fiber network. Now what I want to do is generate random pixels. If the value at that pixel is '1' I know that I have landed inside the fiber network. Then I want to draw arbitrary lines through those pixels (at angle step of ,say, 10 degrees) and calculate the distance along the line to estimate the fiber diameter (the shortest of all those distances where value changes from '1' to '0',in both the directions, would give me the diameter). I have already obtained the representative diameter using these steps:
  1. threshold the image
  2. Calculate the area by summing up the image
  3. Find the edges using Canny Edge Detection. Calculated the perimeter by summing up the image
  4. Divide the area by the perimeter to get avg. Representative Fiber Diameter
What I am interested in is studying the diameter distribution along given fiber length and fiber orientation distribution. So calculating distance along arbitrary line from random pixels could help me. How should I do that?
Regards,
Rajesh

Best Answer

I don't think that is a good algorithm. What I would do is to use bwdist() to take the Euclidean distance transform of the white fibers. Also take the skeleton of it with bwmorph(). Then multiply the skeleton by the EDT to get the distance of every centerline pixel to the nearest edge. Take the histogram of that to get the radius distribution. Multiply by 2 to get the diameter distribution. This will be way more comprehensive that your method because it samples every pixel, not just some limited number of random locations, and it will be more accurate than your method (for obvious reasons).
Related Question