Opencv2.4学习::霍夫变换(2)圆变换

霍夫圆变换


基本原理 

关于基本原理,其思想大概跟霍夫线变换相似,但是有两种说法。

第一种

Opencv2.4学习::霍夫变换(2)圆变换

在霍夫线变换中,笛卡尔X-Y直角坐标系中的直线,变换到霍夫空间中则为1个点

因此类比可得,笛卡尔X-Y直角坐标系中的圆,变换到abr空间中,则为一条曲线,具体如下:

X-Y直角坐标系下圆方程:Opencv2.4学习::霍夫变换(2)圆变换

对应的参数方程为:Opencv2.4学习::霍夫变换(2)圆变换

Opencv2.4学习::霍夫变换(2)圆变换

所以在abr组成的三维坐标系中,一个点可以唯一确定一个圆。

那么,当我们固定(x,y),选取(a,b,r) 的不同组合,可以得到xy直角坐标系中经过某点(X,Y)的所有圆对应,

而在笛卡尔的xy坐标系中经过某一点的所有圆映射到abr坐标系中就是一条三维的曲线。【这句话应该是不严谨的,正确的说法看后面的第二种叙述】

个人认为,上面的话,应该是对于某点(x,y),

固定X时,选取不同(a,r)组合,可以得到一条(a,r)坐标系下的曲线

固定Y时,选取不同(b,r)组合,可以得到一条(b,r)坐标系下的曲线 

 这里,我们先继续认为上面的叙述没有问题,即经过点(X,Y)的所有圆变换到(a,b,r)空间下是一条空间曲线。那么这条曲线上的一点,则对应一个圆。

 Opencv2.4学习::霍夫变换(2)圆变换                             

这时候,看(a,b,r)坐标系,若该坐标系中有某点(a,b,r)固定,那么经过该点的空间曲线越多,说明对应笛卡尔X-Y直角坐标系中共圆的点越多。当设定一个阈值,则可判断X-Y坐标系中是否有圆了。


 第二种

X-Y直角坐标系下圆方程:Opencv2.4学习::霍夫变换(2)圆变换

现假设(x,y)是参数,即(x,y)固定,假设为(1,1)

那么以(a,b,r)为变量的方程,对应的空间图形是一个这样一个曲面,貌似是圆锥?

matlab画图代码:

>> a=-8:0.5:8;
>> b=a;
>> [A,B]=meshgrid(a,b);
>> R=sqrt((1-A).^2+(1-B).^2);
>> mesh(A,B,R);

这就跟上面第一种说法的叙述有矛盾了,这里表明在笛卡尔的xy坐标系中经过某一点的所有圆映射到abr坐标系中是一个圆锥体

Opencv2.4学习::霍夫变换(2)圆变换

那么,在这个曲面上的每一个点,则对应 X-Y坐标系下的一个经过点(x,y)的圆。

也就是说,在(a,b,r)坐标系中,假设有固定的某点(a0,b0,r0),若经过该点的曲面越多,则表示对应X-Y直角坐标系中有多个点共这个圆。

原理部分就先到这里,希望有大神指出纰漏。 


参考文章:

https://blog.****.net/xia316104/article/details/44781157 

https://blog.****.net/qq_37059483/article/details/77916655

https://blog.****.net/dcrmg/article/details/52506538