Machine Vision Technology:Lecture4 Fitting
RANSAC
Random sample consensus随机抽样一致算法:指采用迭代的方式从一组包含离群的被观测数据中估算出数学模型的参数的算法。
在异常值存在的情况下,非常通用的模型拟合框架。
Outline大纲:
- 1.Choose a small subset of points uniformly at random均匀随机地选择点的小集合。例如随机选取两个点。
- 2.Fit a model to that subset为这个子集拟合一个模型。使用集合中的点拟合出直线。
- 3.Find all remaining points that are “close” to the model and reject the rest as outliers找出所有与模型“接近”的剩余点,并将其余点视为异常值。剩余的点如果离上面的直线都非常近,这个直线就是较好的直线。
- 4.Do this many times and choose the best model多次这样做并选择最好的模型
RANSAC for line fitting example
- 原始数据:可以看到有45度方向的直线。
- Least-squares fit最小二乘拟合:效果不佳
- 1.Randomly select minimal subset of points随机选择最小点的子集,因为要拟合直线,所以选择两个点。
- 2.Hypothesize a model假设一个模型,用上面的点拟合一条直线。
- 3.Compute error function计算误差函数,计算剩余点到直线的距离
- 4.Select points consistent with model选择和模型一致的点。选取一个 ϵ \epsilon ϵ ,在距直线左右 ϵ \epsilon ϵ 阈值内的点,可以作为评价指标,例如阈值内点的个数作为评价指标。下面有9个绿色的点在阈值内。
- 5.Repeat hypothesize-and-verify loop重复上述1-3过程,选取阈值内点的个数作为评价指标。下面有8个绿色的点在阈值内。
下面有12个绿色的点在阈值内。
Uncontaminated sample未被污染的样本:
RANSAC for line fitting
Repeat N times:
- Draw s points uniformly at random随机均匀地画出s个点。
- Fit line to these s points将直线与这s个点拟合。
- Find inliers to this line among the remaining points在剩下的点中找出这条线的内点(points whose distance from the line is less than t到直线的距离小于t的点)
- If there are d or more inliers, accept the line and refit using all inliers如果有d个或更多的内点,接受该直线并使用所有内点进行再拟合。
Choosing the parameters:
-
初始化点的数量s:通常需要最小数量来拟合模型。
-
距离阈值t:???
Choose t so probability for inlier is p选择t所以内点的概率是p,例如为0.95。
标准差为 σ \sigma σ 均值为0的高斯噪声: t 2 = 3.84 σ 2 t^2 = 3.84 \sigma^2 t2=3.84σ2
-
样本数 N:选择N,使至少有一个随机样本不存在异常值,概率为p。例如p为0.99,异常值率outlier ratio外点率为e。
这里的N是指,我们要迭代多少次才能保证输出结果是可靠的,还要以什么样的概率保证输出结果是正确的。
假设外点率为e,要迭代多少次,保证99%的概率是我们想要的直线?
1 − p 1-p 1−p 是错误概率。 1 − e 1-e 1−e 是内点概率,即属于这条直线上的点的概率, ( 1 − e ) s (1-e)^s (1−e)s 表示s个点同时在直线上的概率,也表示这条直线正确的概率。 1 − ( 1 − e ) s 1-(1-e)^s 1−(1−e)s 表示这条直线错误的概率,最后迭代N次得到错误概率。
(
1
−
(
1
−
e
)
s
)
N
=
1
−
p
(1-(1-e)^s)^N = 1- p
(1−(1−e)s)N=1−p
解得:
N
=
l
o
g
(
1
−
p
)
l
o
g
(
1
−
(
1
−
e
)
s
)
N = \frac{log(1-p)}{log(1-(1-e)^s)}
N=log(1−(1−e)s)log(1−p)
有如下统计:
s=2,e=5%时,迭代N=2次便可找到最优解。
-
Consensus set size d:拟合的直线中有d个内点就认为接受该直线。
应该匹配预期的内点率
Adaptively determining the number of samples自适应确定样本数量:
内点率e通常是先验未知的,所以选择最坏情况例如50%,如果发现更多的内内,就调整自适应,例如外点率80%产生e=0.2。
Adaptive procedure自适应过程:
- 设置最大迭代次数为无穷大 N = ∞ N = \infty N=∞,初始当前迭代次数sample_count = 0
- while N > sample_count:(当前迭代次数小于N)
- Choose a sample and count the number of inliers 选择一个点,计算内点率。
- Set e = 1 − ( n u m b e r o f i n l i e r s t o t a l n u m b e r o f p o i n t s ) e = 1-(\frac{number \enspace of \enspace inliers}{total \enspace number \enspace of \enspace points}) e=1−(totalnumberofpointsnumberofinliers)
- Recompute N from e e e: N = l o g ( 1 − p ) l o g ( 1 − ( 1 − e ) s ) N = \frac{log(1-p)}{log(1-(1-e)^s)} N=log(1−(1−e)s)log(1−p)
- 当前迭代次数sample_count递增1
RANSAC pros and cons 利弊
- Pros
- Simple and general简单通用。
- Applicable to many different problems适用于许多不同的问题。
- Often works well in practice经常在实践中效果很好
- Cons
- Lots of parameters to tune有很多参数需要调整。
- Doesn’t work well for low inlier ratios (too many iterations,or can fail completely)对于较低的内点率不能很好地工作(太多的迭代,或者可能完全失败)。
- Can’t always get a good initializationof the model based on the minimumnumber of samples不能总是得到一个基于最小的样本数的良好的初始化模型
RANSAC在指纹识别应用
有A和B两个指纹图,假设方形、菱形、三角形分别表示不同的指纹特征,现比较两个指纹是否是同一个人的。
将B通过仿射变换矩阵 T T T 进行旋转和平移变为A。
在A和B中找一对点,则有关于x和y的两个方程。仿射变换矩阵 T T T 有6个未知量,需要3对点才能解出。
在这种情况下:
s = 6,模型为矩阵 T T T
取3对点,得到矩阵 T T T ,打分之后,再取3对点,得到矩阵 T T T ,循环找到最好的矩阵 T T T 。打分也就是利用矩阵 T T T 看有几对内点在这个模型中,内点对越高匹配度越高。
The Hough transform
Voting schemes投票策略:
让每个特性为所有与其兼容的模型投票。希望噪声特征不会一致地投票给任何一个模型。只要有足够的特征就可以得到一个好的模型,丢失的数据并不重要。
An early type of voting scheme一种早期的投票方案。
General outline:大纲
- Discretize parameter space into bins离散参数空间成箱。参数空间取值离散化。
- For each feature point in the image, put a vote in every bin in the parameter space that could have generated this point对于图像中的每个特征点,在参数空间中可能产生这个点的每个bin中进行投票
- Find bins that have the most votes找出票数最多的箱子
Parameter space representation参数空间表现:
- A line in the image corresponds to a point in Hough space图像中的一条线对应霍夫空间中的一个点
- A point in the image corresponds to a linein Hough space图像中的一个点对应霍夫空间中的一条线
Problems with the (m,b) space:
- Unbounded parameter domain无界参数域。霍夫参数空间没有边界。
- Vertical lines require infinite m垂直线需要无穷大的m。图像空间的垂直直线没法表示。
于是便有下面的极坐标表示。
polar representation:
直线方程:
x
cos
θ
+
y
sin
θ
=
ρ
x \cos\theta + y \sin \theta = \rho
xcosθ+ysinθ=ρ
Each point will add a sinusoid in the ( θ , ρ ) (\theta,\rho) (θ,ρ) parameter space在 ( θ , ρ ) (\theta,\rho) (θ,ρ) 空间中的个点都会加上一个正弦
算法大致流程如下:
- Initialize accumulator H to all zeros
- For each edge point
(
x
,
y
)
(x,y)
(x,y) in the image
- For
θ
\theta
θ = 0 to 180
- ρ = x cos θ + y sin θ \rho = x \cos \theta + y \sin \theta ρ=xcosθ+ysinθ
- H ( θ , ρ ) = H ( θ , ρ ) + 1 H(\theta, \rho) = H(\theta, \rho) + 1 H(θ,ρ)=H(θ,ρ)+1
- For
θ
\theta
θ = 0 to 180
- Find the value(s) of
(
θ
,
ρ
)
(\theta, \rho)
(θ,ρ) where
H
(
θ
,
ρ
)
H(\theta , \rho)
H(θ,ρ) is a local maximum
- The detected line in the image is given by ρ = x cos θ + y sin θ \rho = x \cos \theta + y \sin \theta ρ=xcosθ+ysinθ
对图像中的每个点, θ \theta θ 从0到180,每个点可以算出很多个 ρ \rho ρ ,然后在 H ( θ , ρ ) H(\theta, \rho) H(θ,ρ) 霍夫空间数值加1。最后在 H ( θ , ρ ) H(\theta, \rho) H(θ,ρ) 霍夫空间找局部最大值,霍夫空间中可能有多个局部最大值,对应图像空间中多个直线。
- 改进上面的算法。由Canny边缘检测,可以得到梯度方向,也可以得到边的方向。这样上面的 θ \theta θ 变换范围可以调整在边方向的左右偏移方向。
Incorporating image gradients结合图像梯度。当我们检测到一个边缘点时,我们也知道它的梯度方向。但这意味着这条线是唯一确定的。
Modified Hough transform:
- For each edge point
(
x
,
y
)
(x,y)
(x,y)
- θ \theta θ 为 ( x , y ) (x,y) (x,y) 点处的梯度方向
- ρ = x cos θ + y sin θ \rho = x \cos \theta + y \sin \theta ρ=xcosθ+ysinθ
- H ( θ , ρ ) = H ( θ , ρ ) + 1 H(\theta, \rho) = H(\theta, \rho) + 1 H(θ,ρ)=H(θ,ρ)+1
下面原图中的10条线对应霍夫空还能得10个点:
Effect of noise噪声对霍夫变换影响
- 噪声对霍夫变换的影响:Peak gets fuzzy and hard to locate峰值变得模糊,难以定位
左图是有噪声的直线features,直线上的点会有偏移,右图是霍夫空间votes投票:
下面是随着噪声的增加,对20个点进行直线拟合,落在霍夫空间中最大投票数,从18逐渐减小。
- 下图是Random points随机点的影响:Uniform noise can lead to spurious peaks in the array均匀噪声会导致阵列出现伪峰
As the level of uniform noise increases, the maximum number of votes increases too随着均匀噪声水平的增加, 投票的最大数量也会增加
Dealing with noise处理噪声
-
Choose a good grid / discretization选择一个好的网格/离散化。离散化的霍夫空间网格太小太大都不好。
也就是将 θ \theta θ 从0到180分割的粗细。
- Too coarse: large votes obtained when too many different lines correspond to a single bucket太粗:当太多不同的线条对应于一个桶时获得的大选票。对应于网格数量划分太少。
- Too fine: miss lines because some points that are not exactly collinear cast votes fordifferent buckets太细:遗漏线,因为一些不完全共线的点投给不同的桶。对应于网格数量划分太多。
-
Increment neighboring bins (smoothing in accumulator array)增加相邻的箱子(在累加器数组中平滑)。
也就是说,图像空间中的点进行投票votes时,霍夫参数空间按照离点的距离进行权值投票,离点越近投票分越高。这种也称为软投票方式。
对图像中的点 ( x , y ) (x,y) (x,y) ,本来应该投票给 ( θ , ρ ) (\theta,\rho) (θ,ρ) 的分数为1,但可以给 ( θ , ρ ) (\theta,\rho) (θ,ρ) 的分数为0.9,周围的点分剩下的0.1。
-
Try to get rid of irrelevant features尽量去掉不相关的功能。噪声点太多,只取尽可能有效的点。
Take only edge points with significant gradient magnitude只取梯度值显著的边缘点。
也就是上面改进的霍夫变换算法。
Hough transform for circles
圆的方程: ( x − a ) 2 + ( y − b ) 2 = r 2 (x-a)^2 + (y-b)^2 = r^2 (x−a)2+(y−b)2=r2
参数空间有a、b、r三个参数。
Given an oriented edge point, what are all possible bins that it can vote for?给定一个有方向的边点,它能投票的所有可能的箱子是多少? 在图像边界范围内,该点的梯度及其反方向的所有点。
这个地方不理解可以用r做参数,写圆心所在直线的参数方程(已知梯度),然后再放到右边的三维空间。
如果不使用梯度,在右边坐标系每一个r平面上都有一个圆,否则就是两个点
对于图像空间中的点 ( x , y ) (x,y) (x,y) ,如果在某个圆上,则圆心在该点处的梯度方向,正好与边缘方向垂直。
假设圆的半径为r,则圆心在梯度方向或梯度反方向,这便有可能有两个圆心 ( x 1 , y 1 ) (x_1,y_1) (x1,y1) 或 ( x 2 , y 2 ) (x_2,y_2) (x2,y2) 。对应到Hough参数空间中,r平面上的两个点。遍历所有的r便可以找到所有的圆心。此外,这里的r是有范围的,最大不超过图像边界,对应Hough参数空间r轴有一个上边界平面。
然后对于图像空间中该半径为r的圆上的其他点,都会对Hough参数空间中r平面上的圆心点有贡献(votes)。
Conceptually equivalent procedure:for each (x,y,r), draw the corresponding circle in the image and compute its “support” 概念等效过程:在图中画出对应的圆,并计算其“支撑力”
霍夫变换总结
总之,霍夫变换用图像空间中的像素点给参数空间中的点投票,得票数高的参数即是我们要求的参数。
在直线检测中,图像空间中的点 ( x , y ) (x,y) (x,y) 利用 ρ = x cos θ + y sin θ \rho = x \cos \theta + y \sin \theta ρ=xcosθ+ysinθ 投票给参数空间 ( ρ , θ ) (\rho,\theta) (ρ,θ) 处, ( ρ , θ ) (\rho,\theta) (ρ,θ) 处的分数加1。
在圆形检测中,图像空间中的点 ( x , y ) (x,y) (x,y) 利用 ( x , y ) + r ∇ I ( x , y ) (x,y) + r \nabla I(x,y) (x,y)+r∇I(x,y) 或者 ( x , y ) − r ∇ I ( x , y ) (x,y) - r \nabla I(x,y) (x,y)−r∇I(x,y) 投票给参数空间 ( a , b , r ) (a,b,r) (a,b,r) 中, ( a , b , r ) (a,b,r) (a,b,r) 处的分数加1。最终求得的参数结果对应参数空间图形是三维体状的结果。
作业
白纸上放几个硬币,拍一张图片,霍夫变换检测圆形。
输入:一张图片
输出:(圆心和半径)