Opencv2.4学习::霍夫变换(2)圆变换
霍夫圆变换
基本原理
关于基本原理,其思想大概跟霍夫线变换相似,但是有两种说法。
第一种:
在霍夫线变换中,笛卡尔X-Y直角坐标系中的直线,变换到霍夫空间中则为1个点
因此类比可得,笛卡尔X-Y直角坐标系中的圆,变换到abr空间中,则为一条曲线,具体如下:
X-Y直角坐标系下圆方程:
对应的参数方程为:
所以在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)空间下是一条空间曲线。那么这条曲线上的一点,则对应一个圆。
这时候,看(a,b,r)坐标系,若该坐标系中有某点(a,b,r)固定,那么经过该点的空间曲线越多,说明对应笛卡尔X-Y直角坐标系中共圆的点越多。当设定一个阈值,则可判断X-Y坐标系中是否有圆了。
第二种:
X-Y直角坐标系下圆方程:
现假设(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坐标系中是一个圆锥体。
那么,在这个曲面上的每一个点,则对应 X-Y坐标系下的一个经过点(x,y)的圆。
也就是说,在(a,b,r)坐标系中,假设有固定的某点(a0,b0,r0),若经过该点的曲面越多,则表示对应X-Y直角坐标系中有多个点共这个圆。
原理部分就先到这里,希望有大神指出纰漏。
参考文章:
https://blog.****.net/xia316104/article/details/44781157