Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I select the best set of parameters in the Canny edge detection algorithm implemented in OpenCV?

Tags:

I am working with OpenCV on the Android platform. With the tremendous help from this community and techies, I am able to successfully detect a sheet out of the image.

These are the step I used.

  1. Imgproc.cvtColor()
  2. Imgproc.Canny()
  3. Imgproc.GausianBlur()
  4. Imgproc.findContours()
  5. Imgproc.approxPolyDP()
  6. findLargestRectangle()
  7. Find the vertices of the rectangle
  8. Find the vertices of the rectangle top-left anticlockwise order using center of mass approach
  9. Find the height and width of the rectangle just to maintain the aspect ratio and do warpPerspective transformation.

After applying all these steps I can easily get the document or the largest rectangle from an image. But it highly depends on the difference in the intensities of the background and the document sheet. As the Canny edge detector works on the principle of intensity gradient, a difference in intensity is always assumed from the implementation side. That is why Canny took into the account the various threshold parameters.

  1. Lower threshold
  2. Higher threshold

So if the intensity gradient of a pixel is greater than the higher threshold, it will be added as an edge pixel in the output image. A pixel will be rejected completely if its intensity gradient value is lower than the lower threshold. And if a pixel has an intensity between the lower and higher threshold, it will only be added as an edge pixel if it is connected to any other pixel having the value larger than the higher threshold.

My main purpose is to use Canny edge detection for the document scanning. So how can I compute these thresholds dynamically so that it can work with the both cases of dark and light background?

I tried a lot by manually adjusting the parameters, but I couldn't find any relationship associated with the scenarios.

like image 475
Ankur Gautam Avatar asked Jan 24 '14 05:01

Ankur Gautam


People also ask

What are the input parameters for Canny algorithm?

The effect of the Canny operator is determined by three parameters --- the width of the Gaussian kernel used in the smoothing phase, and the upper and lower thresholds used by the tracker.

Which is the best method for edge detection?

Canny Edge Detection This is the most commonly used highly effective and complex compared to many other methods. It is a multi-stage algorithm used to detect/identify a wide range of edges. Reduce noise – as the edge detection that using derivatives is sensitive to noise, we reduce it.

How many parameter or placeholder does Canny edge method requires?

The Canny edge detector requires the user to input three parameters. The first is sigma, the standard deviation of the Gaussian filter specified in pixels. The second parameter low is the low threshold which is specified as a fraction of a computed high threshold.


1 Answers

You could calculate your thresholds using Otsu’s method.

The (Python) code would look like this:

high_thresh, thresh_im = cv2.threshold(im, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) lowThresh = 0.5*high_thresh 
like image 106
Mailerdaimon Avatar answered Sep 19 '22 01:09

Mailerdaimon