Adaptive parameter for Canny Edge

2020-03-03 05:26发布

问题:

I'm using a project using OpenCV for detecting a card that will be place on a atable. I have successfully detect it using Canny Edge. However, for different image the parameter must be tuned manually. I wish for my project to be worked with every image without manually tune the parameter. What Should I do?

回答1:

If your image consist of Distinct Background & Foreground, You can get the threshold for that automatically as follows explained in this paper http://www.academypublisher.com/proc/isip09/papers/isip09p109.pdf.

  1. Compute Otsu's threshold + Binary threshold for your image.
  2. Use the Otsu's threshold value as higher threshold for Canny's algorithm.

CODE:

Mat mCanny_Gray,mThres_Gray;
Mat mSrc_Gray=imread("Test.bmp",0);

double CannyAccThresh = threshold(mSrc_Gray,mThres_Gray,0,255,CV_THRESH_BINARY|CV_THRESH_OTSU);

double CannyThresh = 0.1 * CannyAccThresh;

Canny(mSrc_Gray,mCanny_Gray,CannyThresh,CannyAccThresh);
imshow("mCanny_Gray",mCanny_Gray);

You can also refer this thread.



回答2:

You can use Helmholtz principle to adaptively find the lower and higher thresholds of the Canny edge detector.

You can refer the following link for the paper and the implementation in OpenCV C++.