Skip to content

基于广义 Ballard 与 Guil 霍夫变换的目标检测

本教程中你将学到如何:

  • 使用 cv::GeneralizedHoughBallard 与 cv::GeneralizedHoughGuil 来检测目标
  1. 载入图像与模板

  2. 借助 createGeneralizedHoughBallard() 实例化 cv::GeneralizedHoughBallard

  3. 借助 createGeneralizedHoughGuil() 实例化 cv::GeneralizedHoughGuil

  4. 为两种 GeneralizedHough 变体设置所需参数

  5. 执行检测并显示找到的结果

注意:

  • 这两种变体都不能直接实例化。必须使用相应的 create 方法。
  • Guil 霍夫非常慢。计算本教程所用“mini”文件的结果只需几秒钟。而对于分辨率更高的图像与模板(如下图所示),我的笔记本大约需要 5 分钟才能计算出结果。

generalized_hough_mini_image.jpg generalized_hough_mini_template.jpg generalized_hough_image.jpg generalized_hough_template.jpg

下面是本教程的完整代码。 代码见下方示例

位置向量将存放检测器找到的匹配项。 每个条目包含四个浮点值: position vector

  • [0]:中心点的 x 坐标
  • [1]:中心点的 y 坐标
  • [2]:检测到的目标相对于模板的缩放比例
  • [3]:检测到的目标相对于模板的旋转角度(以度为单位)

一个示例可能如下:[200, 100, 0.9, 120]

寻找最优值往往需要反复试错,并且取决于诸多因素,例如图像分辨率。

如前所述,这一步会花费一些时间,尤其是对于较大的图像以及使用 Guil 时。

蓝色矩形是 cv::GeneralizedHoughBallard 的结果,绿色矩形是 cv::GeneralizedHoughGuil 的结果。

如果参数没有完美地适配样本,要得到本例这样完美的结果是不太可能的。下面展示了一个参数不够完美时的示例。对于 Ballard 变体,本图中仅用黑点标出了结果的中心。其矩形会与上一张图相同。

generalized_hough_result_img.jpg generalized_hough_less_perfect_result_img.jpg