MATLAB Answers

Extracting coordinates values for the line.

18 views (last 30 days)
waqas on 3 Sep 2019
Commented: waqas on 12 Oct 2019
I want to extract the coordinates for the white points along the main line where I am getting bit of noise around with additional 1 or 2 points in some columns just around the central line. I extracted the data by applying sobel filter on a displacement field and then removed some extra noisy data using bwareopen but now I am stuck with these extra points and am unable to get rid of these. Any suggestions regarding this? I have attached the displacement field matrix in .mat file.
Annotation 2019-09-03 215357.png


Akira Agata
Akira Agata on 4 Sep 2019
The attached data seems to be an original gray-scale image, as shown below. You mean, you would like to extract the coordinates of the border line between dark and light color highlighted in the red ellipse?
Image Analyst
Image Analyst on 5 Sep 2019
If so, that's very easy, just threshold and scan across columns using find() on every column to find the first row with something in it.
Whoever told beginners that the first step to successful image analysis, and the easiest way to proceed, is to do edge detection, should be take out behind the woodshed and beaten. Is there a concerted effort by professors to spew this nonsense? It makes it unnecessarily hard for beginners.
waqas on 5 Sep 2019
@akira Yes! this is the area I am interested in to get just a single point in each column which would give me the original crack shape.
@Image Analyst. I tried to look for some solutions on the forum and read a comment somewhere which suggested to use edge detectors. Are you talking about multithresholding?

Sign in to comment.

Accepted Answer

Akira Agata
Akira Agata on 20 Sep 2019
How about the following?
% Load data and convert to gray-scale image
Igray = mat2gray(v);
% Apply multilevel (N = 2) image thresholds
th = multithresh(Igray,2);
Iseg = imquantize(Igray,th);
% Extract the edge between Iseg == 1 and Iseg == 2
se = strel('disk',1);
BW1 = bwperim(Iseg == 1);
BW1 = imdilate(BW1,se);
BW2 = bwperim(Iseg == 2);
BW2 = imdilate(BW2,se);
BWedge = BW1 & BW2;
BWedge = bwmorph(BWedge,'skel',Inf);
% Show the result

  1 Comment

waqas on 12 Oct 2019
Hi Akira,
I am trying the code that you shared for another data set with almost the same configuration but somehow the technique is not robust. Any ideas on how to make it more versatile rather than just a particular case?

Sign in to comment.

More Answers (0)

Sign in to answer this question.