MATLAB Answers

BB BSB
0

Image processing for crack detection and length estimation

Asked by BB BSB
on 9 Apr 2015
Latest activity Commented on by hakim latip on 7 Feb 2019 at 12:31
Hi, I have written the following matlab code to do the following:-
  • load rgb image of surface
  • contrast stretch
  • convert rgb to gray scale
  • image segmentation
  • morphological operations (thin, clean , fill, etc...)
  • imtool for pixel length determination
  • Calculation of crack length based on calibration of image and above determined pixel lenght.
My aim is to develop the SIMPLEST matlab code for automatic detection of cracks and estimate the length of the crack (if possible other geometrical properties) from a sample image.
The code is shown below:
%%load image
I=imread('two.jpg');
figure,imshow(I)
title('Original image')
%%Image adjust
Istrech = imadjust(I,stretchlim(I));
figure,imshow(Istrech)
title('Contrast stretched image')
%%Convert RGB image to gray
Igray_s = rgb2gray(Istrech);
figure,imshow(Igray_s,[])
title('RGB to gray (contrast stretched) ')
%%Image segmentation by thresholding
%use incremental value to run this selection till required threshold 'level' is
%achieved
level = 0.08;
Ithres = im2bw(Igray_h,level);
figure,imshow(Ithres)
title('Segmented cracks')
%%Image morphological operation
BW = bwmorph(gradmag,'clean',10);
figure,imshow(BW)
title('Cleaned image')
BW = bwmorph(gradmag,'thin', inf);
figure,imshow(BW)
title('Thinned image')
BW = imfill(gradmag, 'holes')
figure,imshow(BW)
title('Filled image')
%%Image tool
figure,imtool(BW1)
figure,imtool(I)
%%Calaculate crack length
calibration_length=0.001;
calibration_pixels=1000;
crack_pixel=35;
crack_length=(crack_pixel *calibration_length)/calibration_pixels;
Please, I need help from image specialist to improve the code from above to meet my aim. I have also attached a sample picture that I am using for this code.
Picture two.jpg is attached below:
Thanks

  1 Comment

At he moment my supervisor thinks the above code is a manual method of determining crack length and requires it is 'automated' (by labeling and extracting length of labelled cracks??? is that possible?)
Cheers!

Sign in to comment.

2 Answers

Answer by Image Analyst
on 9 Apr 2015
 Accepted Answer

You're just arbitrarily setting
crack_pixel=35;
You're not even doing it manually (with user assistance) - you're just setting some arbitrary number. What's up with that? If you need code to find the distance between the farthest points in a binary blob, see my attached demo.

  12 Comments

I went through your code and couldn't understand the distance measurement. if possible, could you let me know the algorithm.
I have no idea what algorithm or program you're talking about. There has been lots of code segments posted here. Please be specific.
to Image Analyst:
I have tried your code "farthest_points.m" . how can I choose another image other than you have set?

Sign in to comment.


Answer by Dan
on 13 Apr 2015

I just glanced at your code and if you need a completely automated system, you need to either define what constitutes a crack beforehand OR have the system learn these rules using something like a neural net.
But... that's a bigger project. In the short term, you might want to play with the graythresh function that will automate your selection of a threshold.
Just my $0.02.
Dan

  1 Comment

I see, for timeline limits Id rather attempt the easier of the 3 methods you outlined which I guess is playing around with graythresh function.
Any hints as to how or what to look out for in doing so? Because my first approach would be to scale by a factor??? make any sense? Thanks.

Sign in to comment.