opencv 经典Hough变换和多尺度Hough变换之间有什么区别?

3htmauhk  于 2022-11-30  发布在  其他
关注(0)|答案(1)|浏览(145)

我在看OpenCV的cv2.HoughLines()文档,文档中引用了多尺度霍夫变换。经典霍夫变换和多尺度霍夫变换之间的区别是什么?

jckbn6z7

jckbn6z71#

首先,您需要了解Hough变换算法的一般工作原理。从您的问题中,我们不清楚您对该算法的熟悉程度。
如果需要,我建议阅读以下内容:
1.算法的描述,参考您在问题中提到的opencv文档:Hough Transform

  1. OpenCV的Hough Line Transform教程。
    简而言之,经典算法由以下元素组成(为方便起见,所有Angular 均以度而非弧度表示):
    1.一条直线的参数化是它与原点的垂直距离(ρ- rho)和这条垂直线形成的Angular (θ- theta)。
  2. cv::HoughLinesrhotheta参数实际上决定了ρ和θ的分辨率。由于距离受图像对角线大小的限制,Angular 为0..180,我们可以创建一个所有距离和Angular 组合的矩阵(根据分辨率)。这称为累加器
    例如:如果图像对角线为100,rho参数为20,我们将在矩阵中得到以下ρ值:0,20,40,60,80,100。这同样适用于Angular 。累加器矩阵中的每个单元代表一条势线(具有特定的ρ,θ)。
    1.输入图像必须是一个二进制掩码。我们遍历所有“点亮”的像素。每个像素可以属于多条线(根据不同的ρ和θ)。我们增加累加器中与这些线对应的每个单元格。这就像投票给它。
    1.最后,我们选择投票数最高的行(取决于threshold)作为输出。

多尺度版本增加了以下内容,以形成一个迭代过程:

  1. srn参数确定距离分辨率的除数,而不是对ρ应用单一分辨率。
    1.类似地,stn参数确定Angular 分辨率的除数,而不是对θ应用单个分辨率。
    1.还有min_thetamax_theta参数可以限制我们跟踪的Angular 范围。
    一般来说,多尺度版本可以提供更好的结果(由于尝试了更多的分辨率),但代价是计算量更大。
    我还没有找到关于这个迭代过程的确切方法的正式文档。
    但从opencv源代码中的注解来看,似乎至少完成了2次迭代:一个粗略(rhotheta)和一个精细(rho/srntheta/stn)。
    我建议您尝试这两种方法,并比较特定情况下的结果质量和处理时间。
    请注意,还有一个概率版本-参见cv::HoughLinesP

相关问题