本文主要是介绍[CS131] Lecture 6 Edge Detection,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
根据 Stanford CS131 课程写的笔记(大部分为 note 翻译),英语水平一般,如有错误请评论指正
Lecture 6 Edge Detection
Edge Detection
Edge Basic
图片上的边缘主要有四个可能的来源:不连续的表面(表面角度突然改变)、深度不连续(一个表面重叠在另一个上)、表面颜色不连续、光照不连续(明 / 暗)。从数学上来看,梯度大的位置为边缘。
Sobel Noise Detector
这个算法利用 2 个 3×3 3 × 3 核,与图像卷积,结构近似于原始图像的 x 和 y 导数。
这些矩阵代表了光滑化和微分的结果
但是 Sobel Filter 有许多问题,包括定位差。并且 Sobel Filter 比起倾斜边缘,更偏向于水平和垂直边缘。
Canny Edge Detector
Canny Edge Detector 算法有五步:
抑制噪音
我们可以用一个类似于 Sobel Filter 的方法,同时减少噪音并计算 x、y 方向上的导数。
计算梯度大小与方向
|∇f(x,y)|=f2x+f2y−−−−−−√θ=tan−1(fy/fx) | ∇ f ( x , y ) | = f x 2 + f y 2 θ = t a n − 1 ( f y / f x )应用 non-maximum 消除
我们假设只有梯度最大时出现边缘,所以消除掉所有不含最大梯度值的像素。基本上,如果一个像素不是正方向上三个像素和反方向上三个像素中梯度值最大的一个,那么就将这个像素设为 0。并且,所有的梯度值都要四舍五入到接近 45°
滞后阈值法 (Hysteresis thresholding)
所有保留的像素都服从于滞后阈值法。这部分用两个值作为高低阈值。像素值高于高阈值的为强边缘,低于低阈值的设为 0,在两个阈值之间的为弱边缘。
通过连通性 (Connectivity) 分析检测边缘
所有强边缘像素都是边缘。但对于弱边缘像素,只有和强边缘像素相连的弱边缘像素才是边缘。这一部分使用 BFS 或者 DFS 来找到所有边缘。
Hough Transform(霍夫变换)
Intro to Hough Transform
霍夫变换是检测图像特别结构,也就是线条,的一个方法。无论如何,霍夫变换可以检测任何参数方程已知的结构。它在噪音和部分遮挡下提供了一个强健的检测器。
Goal of Hough Transform for detecting lines
要使用霍夫变换,首先要确定图像中构成直线的像素集。这项工作要在边缘检测器检测出边缘后进行,这样才能更好的找出组成直线的像素集。
Detecting lines using Hough Transform in a,b space
假设一条穿过像素 xi,yi x i , y i 的线为:
那么,可以得出将像素转换到 a,b a , b 空间的公式:
这个公式代表了一条在 a,b a , b 空间上的线,并且每个在线上的点 a,b a , b 代表了一条穿过点 xi,yi x i , y i 的线。
因此,对于边缘像素集上的每一个像素,我们都将它转换到 a,b a , b 空间上得到一条线。
a,b a , b 空间上两条线交点处的 ab 值代表了 yi=a∗xi+b y i = a ∗ x i + b 这条线同时穿过几个点。例如:xy 空间上有 x1,y1=(1,1) x 1 , y 1 = ( 1 , 1 ) 和 x2,y2=(2,3) x 2 , y 2 = ( 2 , 3 ) ,转换得到 ab 空间上两条线 b=−a∗1+1 b = − a ∗ 1 + 1 和 b=−a∗2+3 b = − a ∗ 2 + 3 ,联立方程解得 a=2,b=−1 a = 2 , b = − 1 。这种 ab 空间上的交叉点告诉了我们在 xy 空间上同时经过两点的线。
Accumulator Cells
为了得到最佳的线,我们将 ab 空间量化为细胞。对于 ab 空间中的每一条线,我们都会在这条线经过的每个细胞上添加一个计数。最后,有最多计数的细胞代表 ab 空间上有最多的交点,即为在 xy 空间上穿过最多点的线。所以可以代表图像真正的线。
霍夫变换的具体算法为:
- 通过将参数空间 (a,b) 划分成细胞来进行量化。
- 量化后的空间常被称为累加器细胞
- 计算一条线在特定细胞交叉的次数
- 针对每一对被检测为边缘的点 (x1,y1),(x2,y2) ( x 1 , y 1 ) , ( x 2 , y 2 ) ,找到其在 (a,b) ( a , b ) 空间上的交叉点 (a’,b’)
- 在 (a′,b′) ( a ′ , b ′ ) 所属细胞(范围 [[amin,amax],[bmin,bmax]] [ [ a m i n , a m a x ] , [ b m i n , b m a x ] ] )上增加值
- 值超过某个特定界限的细胞可认为是 (x,y) 空间上的一条线
Hough transform in ρ,θ ρ , θ space
用 ab 空间表示线的问题在于它们收到限制而且不能表示垂线。所以,我们考虑用极坐标 (polar coordinates) 来表示线。
在极坐标中,线被表示为类正弦波函数。
同 ab 空间,在极坐标中交叉点仍然表示同时穿过几个点的直线。所以,我们同样可以使用上面提到的累加器算法。
Concluding Remarks
霍夫变换有以下优点:
- 概念简单,易于实践
- 可以很好的处理缺失、遮挡的数据
- 可以找到有参数方程的结构,不止是线
和缺点:
- 参数越多,计算复杂度越高
- 只能找一种结构(例如,不能同时找线和圆)
- 不能检测线段的长度和位置
- 在同一条线上的线段不能分割
RANSAC
随着模型复杂度的提高(例,参数量的提高),霍夫变化失去了效率。这个章节将阐述 RAndom SAmple Consensus (RANSAC,随机样本一致性) 技术的设计,它提供了一种计算效率高的拟合图像模型的方法。
Introduction RANSAC Basics
RANSAC 用于估算图像模型的参数。RANSAC 背后的基本想法是:用随机选择的数据最小子集来解决拟合问题,并选出最佳拟合。为了实现这个想法,RANSAC 尝试反复地识别符合我们想拟合的模型的数据点。
下图 a) 描述了一个被拟合进数据的线性模型,虽然大部分点可以和线性模型,但是两个偏离的绿点可以极大影响整体拟合精度。RANSAC 算法将通过识别数据正常值 (inliers) 和异常值 (outliers) 来解决这个问题。
RANSAC 随机在数据中选择样本(样本不是点,而是包含许多点的集合),基于一个假设:只要选择足够多的样本,拟合效果差的可能性较低。
Applications
RANSAC 算法可以估算不同模型的参数。这已经被证明在图像拼接(上图 b))、异常值检测、车道识别(线性模型估计)、立体相机计算方面有效。
The Algorithm
RANSAC 算法迭代的采样原始数据的标称子集(例如,线性估计所用的两个点)。模型对每个样本拟合,且计算对应这种拟合的正常值数量,这包括接近于拟合模型的数据点。在两个极限值内的点(例如,两个标准偏差,或者一个先前决定的像素数量)被视作正常值。如果数据的大部分是正常值,那么拟合模型效果较好。在拟合效果好的情况下,模型会使用所有正常值进行重新拟合,而异常值将被丢弃。反复执行以上过程,找出有足够多的正常值的模型,再对比选择出最佳模型。
下图展示了这个过程,图三为最佳拟合。
以下是 RANSAC 的伪代码
Determine:n -- the smallest number of points requiredk -- the number of iterations requiredt -- the threshold used to identify a point that fits welld -- the number of nearby points required to assert a model fits well
Until there is a good fit or k iterations have occurreddraw a sample of n points from the data uniformly and at randomfit to that set of n pointsfor each data points outside the sampletest the distance from the point to the line against t; if the distance from the point to the lineis less than t,the point is closeendif there are d or more points close to the linethen there is a good fit. Refit the line using allthese points, and terminate
end
RANSAC 主要循环的步骤如下:
- 随机从数组中选择一组种子
- 用所选的种子进行参数估计
- 确定正常值(靠近估计模型的点数量)
- (如果存在足够多的正常值,)用这些正常值重新估计模型
- 重复 1-4,最终保证模型有最多的正常值和最佳的拟合。
How Many Samples are Needed?
RANSAC 是一种非确定性模型拟合方法,意味着需要足够多的样本来对参数进行可靠的估计。需要的样本数取决于:
- 需要拟合的参数的数量
- 噪音的数量
下图列出了基于 p=0.99 p = 0.99 和样本大小变化(例如,参数的数量)和异常值的分数(例如,噪音)的所需最小样本数。噪音越多、模型越大,所需的样本数也就越多。
需要选择足够多的样本 ( k k ),这样所有样本都失败的概率 () 较低:
其中, W、n W 、 n 分别表示样本拟合正确的概率和每个样本所含点的数量。所以,最小样本数为:
Advantages, Limitations, and Considerations
优势:
- 实现简单
- 在模型拟合领域适用范围广
- 计算效率高
- 抽样方法为所有可能的特征组合提供了更好的解决问题的方法。
在一些情况下,使用霍夫转换更好:
- 特征数小。例如,线性模型估计(2 个特征)用霍夫转换,但图像拼接需要像 RANSAC 一样计算效率更高的方法
- 噪音数高;如上文所提及,更多的噪音需要更广泛的抽样方法(即更多的样本数),提高了计算成本。更高的噪音也减少了正确参数估计的机会和异常值分类的精度。
值得注意的是,RANSAC 最大的限制是在高噪下表现较差,而现实世界的问题总是有着较高的异常值。
这篇关于[CS131] Lecture 6 Edge Detection的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!