霍夫变换详细介绍

一、霍夫变换(Hough)

  A-基本原理

一条直线可由两个点A=(X1,Y1)和B=(X2,Y2)确定(笛卡尔坐标)

霍夫变换详细介绍_第1张图片

另一方面,也可以写成关于(k,q)的函数表达式(霍夫空间):

对应的变换可以通过图形直观表示:

霍夫变换详细介绍_第2张图片

变换后的空间成为霍夫空间。即:笛卡尔坐标系中一条直线,对应霍夫空间的一个点

反过来同样成立(霍夫空间的一条直线,对应笛卡尔坐标系的一个点):

霍夫变换详细介绍_第3张图片

再来看看A、B两个点,对应霍夫空间的情形:

霍夫变换详细介绍_第4张图片

一步步来,再看一下三个点共线的情况:

霍夫变换详细介绍_第5张图片

可以看出如果笛卡尔坐标系的点共线,这些点在霍夫空间对应的直线交于一点:这也是必然,共线只有一种取值可能。

如果不止一条直线呢?再看看多个点的情况(有两条直线):

霍夫变换详细介绍_第6张图片

其实(3,2)与(4,1)也可以组成直线,只不过它有两个点确定,而图中A、B两点是由三条直线汇成,这也是霍夫变换的后处理的基本方式选择由尽可能多直线汇成的点

看看,霍夫空间:选择由三条交汇直线确定的点(中间图),对应的笛卡尔坐标系的直线(右图)。

霍夫变换详细介绍_第7张图片

 到这里问题似乎解决了,已经完成了霍夫变换的求解,但是如果像下图这种情况呢?

霍夫变换详细介绍_第8张图片

k=∞是不方便表示的,而且q怎么取值呢,这样不是办法。因此考虑将笛卡尔坐标系换为:极坐标表示

霍夫变换详细介绍_第9张图片

在极坐标系下,其实是一样的:极坐标的点→霍夫空间的直线,只不过霍夫空间不再是[k,q]的参数,而是的参数,给出对比图:

霍夫变换详细介绍_第10张图片

霍夫变换的算法步骤:

霍夫变换详细介绍_第11张图片

  其实本质上就是:

霍夫变换详细介绍_第12张图片

交点怎么求解呢?细化成坐标形式,取整后将交点对应的坐标进行累加,最后找到数值最大的点就是求解的,也就求解出了直线。


原文链接:https://blog.csdn.net/kbccs/article/details/79641887

你可能感兴趣的:(机器视觉,【OpenCV】整理记录)