Adaptive parameter for Canny Edge

2020-03-03 05:24发布

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?

2条回答
女痞
2楼-- · 2020-03-03 05:31

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.

查看更多
霸刀☆藐视天下
3楼-- · 2020-03-03 05:41

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++.

查看更多
登录 后发表回答