Canny Edge的自适应参数

时间:2014-07-10 09:00:11

标签: opencv graphics computer-vision canny-operator

我正在使用一个使用OpenCV的项目来检测将放置在atable上的卡片。 我已经使用Canny Edge成功检测到它。但是,对于不同的图像,必须手动调整参数。我希望我的项目能够处理每个图像,而无需手动调整参数。我该怎么办?

2 个答案:

答案 0 :(得分:6)

如果您的图片由Distinct Background&前景,您可以自动获取该阈值,如下文http://www.academypublisher.com/proc/isip09/papers/isip09p109.pdf中所述。

  1. 计算Otsu的阈值+图像的二进制阈值。
  2. 使用Otsu的阈值作为Canny算法的更高阈值。
  3. 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);
    

    您也可以参考this thread.

答案 1 :(得分:2)

您可以使用亥姆霍兹原理自适应地找到Canny边缘检测器的较低和较高阈值。

您可以参考以下link获取论文和OpenCV C ++中的实现。