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

4 Ansichten (letzte 30 Tage)
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

Akzeptierte Antwort

Image Analyst
Image Analyst am 6 Dez. 2013
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).
  2 Kommentare
Rajesh
Rajesh am 9 Dez. 2013
@Image Analyst: Thanks
I tried out the above algorithm and it worked out.
But the algorithm that I thought of would take care of the orientation distribution of the fiber network as well. How should I take care of this? Any suggestion on how to go about it ?
Cheers!
Image Analyst
Image Analyst am 10 Dez. 2013
Use imgradient() to get the gradient direction. Multiply by the skeleton to get the gradient direction only at fiber centerlines. Then take the histogram to get the distribution.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (2)

Soumitra
Soumitra am 14 Jan. 2014
Hi @image analyst, when i multiply ECD image with skeleton image it, it always show a black image and therefore histogram was a single line. pls help.
  3 Kommentare
Soumitra
Soumitra am 14 Jan. 2014
Hello Image Analyst and all,
I am trying to find out out the diameter and orientation of the individual fibers in a fiber matrix.I am trying an algorithm as advised by you before, that is threshholding,ECD operation and skeleton finding. Finally I am trying to multiply this ECD and Skeleton image but not getting the histogram dist for fiber diameter. I have attached my m file and figure. Anyone can help in this regards.
Lavanya
Lavanya am 14 Jan. 2015
Hi ,
If you are using imgradient() on binary image, then the orientation will be shown only for the edges, thats the reason you get a blank image when you multiply it with skeleton image.

Melden Sie sich an, um zu kommentieren.


H z
H z am 5 Jun. 2017
Hello Image Analyst, I am trying to use your interesting method for diameter and orientation of line. (ECD operation and skeleton). The ECD and Skeleton multiply but not getting width. for line. Pls guide.
  2 Kommentare
H z
H z am 6 Jun. 2017
thanks, pls find the question entitled "How to calculate the width of line (Distance of every centerline pixel to the nearest edge)?" best

Melden Sie sich an, um zu kommentieren.

Community Treasure Hunt

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

Start Hunting!

Translated by