Maybe try thresholding with the 'adaptive' option in imbinarize().
Or try a bottomhat filter with imbothat().
Or try getting a standard deviation image with stdfilt() and then thresholding.
Once you have the binary image you can measure all kinds of features with regionprops, like area, perimeter, maximum length, etc. Then you can train it with the Classification Learner app to take all those features and make a prediction as to what kind of defect (Class 1 scratch, class 2 scratch, etc.) it is.