How to detect line scratches in image?

Hi experts,

    I am working on borland delphi-7(pascal). Now I am working for detection of line scratches(ie verticle and horizontal lines defects)  from the image. From one of paper I got information that Luminance value will be very high or very low for the scratch as compared to their neighborhood. Now how can I detect line scratches  from the image.


   Thanking you in advance.
inampudi1Asked:
Who is Participating?
 
BdLmConnect With a Mentor Commented:
here comes an example for the color distribution, the pales and the scratches own almost the same size and gradient (df/dx), is this typical for all of your images?

pale-2.bmp
0
 
BdLmCommented:

there are many algo so find scratches on images, basically the depend on what the scratch on your images is looking like,   eg.

a) your are sure the line has a different color, you may work with Threshold image procedures

b) if the line is just a significant change in the color value, you will work in the gradient domain of your image
0
 
BdLmCommented:
some  basic info on image processing you will find here :  http://www.efg2.com/Lab/Library/Delphi/Graphics/ImageProcessing.htm


the gradient doimain topic:


Edeg detection:   http://en.wikipedia.org/wiki/Canny_edge_detector

if you need more basic info on image processing:  http://www.delphi-treff.de/tutorials/grafik-und-spiele/bitmaps/  (very good and easy to understand, but only german .-)  )
0
Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

 
inampudi1Author Commented:
Hi experts,

Thank you for reply,
   I am  mainly working on black and white images. Please explain me in detail about


a) your are sure the line has a different color, you may work with Threshold image procedures

b) if the line is just a significant change in the color value, you will work in the gradient domain of your image


Thanking you.

0
 
BdLmCommented:
here comes a rather basic procedure template,
the treshold is 128 is values; you may set pixel data above threshold to eg. 0 and below to 255; pls. do some experiments byyour self.

can you attach one of your images ?  for pure black and white images both proposed alsgo won't work good. need one more math approach. (Hough Transformations)




procedure ProcessaImage(Bit: TBitmap);
type
  PixArray = array [1..3] of Byte;
  averagecolor  : interger;
var
  p: ^PixArray;
  h,w: Integer;
begin
  for h:=0 to Bit.Height-1 do
  begin
    p:= Bit.ScanLine[h];
    for w:=0 to Bit.Width-1 do
   
 
     begin
       averagecolor : =  (p^[1] + p^[2] + p^[3]); 
 
       if averagecolor < 128 do
               begin
                    p^[1] := ..... ;
                    p^[2] := ..... ;
                    ...
               end
               else
               begin
 
                    p^[1] := ..... ;
                    p^[2] := ..... ;
                    ...
 
 
 
               end;
 
      
      Inc(p);
     end;
  end;
end;

Open in new window

0
 
inampudi1Author Commented:
Hi experts,

  Pl find my image containing some vertical lines.


I will test the code you have given.
testimg.bmp
0
 
inampudi1Author Commented:
Hi BdLm,

   i checked your code but it is not detecting scratch. Even I checked with different values for FOR loop. Pl tell me how to change the code.
0
 
BdLmCommented:
here come a sample image using the gradient methode,  f(x)  = df/dx + df/dy
can you code that and use only df/dx to focus on scratches ?

test-gradient
0
 
BdLmCommented:
0
 
BdLmCommented:
I played a bit with thresholding ->  no success

with gradient -> you will find the edges (but all horizontal and vertical) , see post above
here is the image again with extension

test-gradient.bmp
test-threshold.bmp
0
 
inampudi1Author Commented:
Hi Bdlm,
    I saw your images.But your algorithm  is detecting  some of the objects also as scratch , and some of lines are not detecting.  Please tell me any other algorithms.
0
 
inampudi1Author Commented:
Hi Bdlm,

     By using Hough_transform I tried, it is detecting lines fine, along with that, some of real part of image also detected as line, for ex pillers in a image and narrow roads in the image.

     How can I filter them.
0
 
BdLmCommented:
the long wooden pales on your images own almost the same properties in the  pictures as your scratch,  you will need to implement a gradient algo first and then to a scond check of these data and scrren out if the scratch is a scratch or a wooden pale
0
 
BdLmCommented:
try to mesure the length of a horicontal line, that might be a good screening criteria.
0
 
inampudi1Author Commented:
Hi Bdlm,

  from color destribution graph how can I get the (how can I mark the)  lines in the image. Please  tell me.
0
 
inampudi1Author Commented:
Hi,
   

   Please tell me how Can I detect bloches,and dust in the image.


0
 
BdLmCommented:

for dust (salt and pepper noise) I commend to use median filtering of your image,
 
see eg.  http://www.efg2.com/Lab/Library/Delphi/Graphics/ImageProcessing.htm
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.