【问题标题】:Adaptive parameter for Canny EdgeCanny Edge 的自适应参数
【发布时间】:2014-08-31 14:01:59
【问题描述】:

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

【问题讨论】:

  • 图片有什么区别?也许输入图像的某种归一化(白平衡、亮度、对比度)和固定的精明参数会给你想要的行为。

标签: opencv graphics computer-vision canny-operator


【解决方案1】:

如果您的图像由不同的背景和前景组成,您可以按照本文http://www.academypublisher.com/proc/isip09/papers/isip09p109.pdf中的说明自动获取阈值。

  1. 为您的图像计算 Otsu 阈值 + 二进制阈值。
  2. 使用 Otsu 的阈值作为 Canny 算法的更高阈值。

代码:

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.

【讨论】:

  • 在应用您的答案之前,我需要对图像进行哪些预处理技术?转换为灰度就足够了,还是我还需要应用一些阈值?
  • 对于所有边缘检测技术,您需要在应用边缘检测之前应用平滑,例如高斯平滑。最好将您的图像转换为灰度图像。
  • 两个相差 10 倍的参数对我来说似乎太多了。你能对此发表评论吗?
【解决方案2】:

您可以使用亥姆霍兹原理自适应地找到 Canny 边缘检测器的下限和上限。

你可以参考下面link的论文和OpenCV C++中的实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-14
    • 2018-06-29
    • 2011-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多