opencv-第六章-霍夫变换
霍夫线变换
霍夫直线变换的基本理论是二值图像中的任何点都可能是一些候选直线集合的一部分。如果要确定每条线进行参数化,例如一个斜率a和截距b,原始图像中的一点会变成为(a,b)平面上的轨迹,轨迹上的点对应着所有过原始图像上点的直线。如果我们将输入图像中所有非0像素转化成输出图像中的这些点集并且将其贡献相加,然后输入图像出现的直线将会在输出图像以局部最大值出现。因为我们将每个点的贡献相加,因此(a,b)平面通常被称为累加平面。
你可能认为用斜率-截距的形式来代表所有通过的点并不是一种最好的方式(因为作为斜率函数,直线的密度有相当的差异,以及相关的事实是可能的斜率间隔的范围是从负无穷到正无穷)。正是由于这个原因,在实际数值计算中使用的变换图像的参数化略微有些不同。首选的参数化方式是每一行代表极坐标(ρ, θ)中的一个点,并且隐含的直线是通过象征点,垂直于远点到此点的半径。
opencv的霍夫变换算法并没有将这个算法显式地展示给用户。而是简单地返回(ρ, θ)平面的局部最大值。然而,需要了解这个过程以便更好地理解opencv霍夫变换函数中的参数。
opencv支持两种不同形式的霍夫变换:标准霍夫变换(SHT)和累积概率霍夫变换(PPHT)。刚才所说的是SHT算法。PPHT是这种算法的一个变种,计算单独线段的方向以及范围。之所以称PPHT为“概率”的,是因为并不将累加器平面内的所有可能点累加,而只是累加其中的一部分。该想法是如果峰值将要足够高,只用一小部分时间去寻找它就足够了。这个猜想的结果可以实质性地减少计算时间。尽管有一些变量的含义是取决于用哪个算法,但可以使用opencv中的同一个函数来访问这两个算法。
cvHoughLines2
功能:
利用Hough变换在二值图像中寻找直线。
函数原型:
CvS