边缘检测
边缘模型
边缘检测是基于灰度突变来分割图片的常用方法,对于变化的情况提出了三种边界模型
边缘检测算法的基础
基于这些模型,我们推导出算法,如canny算法就是基于台阶模式。这些算法的性能将取决于实际边缘和在算法中所用到的模型之间的差别。
噪声对边缘检测的干扰
实际应用中图片容易受噪声干扰,其中二阶导数受影响最大。下面是噪声逐渐增加对于一阶,二阶导数的影响
基于斜坡模型对于一阶导数与二阶导数的分析
边缘检测的三个基本步骤是
- 为降噪对图像进行平滑处理。
- 边缘点的检测。(边缘点的潜在候选者)
- 边缘定位。(找出真正的边缘点)
基础的边缘检测
通过拉普拉斯算子所计算的二阶导数并没有方向的信息。所以我们使用梯度来描述灰度变化信息。
梯度算子
对于求取一副图像的梯度,要求计算x方向与y方向上的偏导数。
不同的算子,其中我们sobel算子在中心系数上使用一个权重2,有平滑图片,抑制噪声的作用,所以比较常用。
不过这样也失去了各向同性。
一个简单边缘检测算法。
结合上面的理论可以写成一个简单的边缘检测算法。
- 均值滤波平滑图像
- sobel算子提取梯度信息
- 阈值处理去除伪边缘点
Marr-Hildreth边缘检测算法
Marr和Hildreth证明了:
- 灰度变化与图像尺寸无关,因此他们的检测要求使用不同尺寸的算子;
- 灰度的突然变化会在一阶导数中引起波峰或波谷,或在二阶导数中等效地引起零交叉。
根据这些建议,边缘检测算子应有两个显著特点:
- 能计算图像中每一点处的一阶导数或二阶导数的数字近似的微分算子;
- 能被“调整”以便在任何期望的尺寸上起作用。
因此,大的算子可用与检测模糊边缘,小的算子可用于检测锐度集中得到精细细节。
canny边缘检测器
Canny算法基于三个基本目标:
- 低错误率。所有边缘都应被找到,且没有伪响应。
- 边缘点应该被很好地定位。已定位的边缘必须尽可能接近真实边缘。
- 单一的边缘点响应。这意味在仅存一个单一边缘点的位置,检测器不应指出多个像素边缘
进而,Canny的工作本质是,从数学上表达前面的三个准则。因此Canny的步骤如下:
- 对输入图像进行高斯平滑,降低错误率。
- 计算梯度幅度和方向来估计每一点处的边缘强度与方向。
- 根据梯度方向,对梯度幅值进行非极大值抑制。本质上是对Sobel、Prewitt等算子结果的进一步细化。
- 用双阈值处理和连接边缘。
Canny算子边缘检测原理及实现
边缘连接和边界检测
噪声,不均匀的光照会引起边缘间断。以及引入其他灰度值虚假的不连续。因此边缘检测算法后紧跟着连接算法
1.局部处理
根据每一个点(x,y)处的一个小邻域内分析像素的特点,将所有相似点连接起来。

2.区域处理
3.使用霍夫变换的全局处理
数学上存在若干类已知数据且已知模型,但不知模型参数的问题,如:
(1)观测值不存在噪声;
(2)观测值中存在噪声,但是噪声很少;
(3)观测值中存在大量噪声,甚至噪声淹没信号;
(4)观测值中同时存在多种模型的数据,同时还伴随噪声;
(2)显然,第一、第二类问题我们可以求解方程组或者用最小二乘法求取。而第三、四类问题就复杂了,我们该怎么办?怎么办?我们有强大的数据工具:霍夫变换和RANSAC
由于我们实现无法知道哪些是噪声数据,哪些是有效观测数据,此外优于用计算机绘图时,我们只可能绘制离散图,我们的方法就是,准备两张图,一张是k维的曲线图,一张是k维空间统计绘制点数的图:
(1)对于每个观测点(x1i,x2i,…xni),逐点直接绘制对应的曲线
F(x1i,x2i,x3i,…xni, a1,a2,…ak) = 0
每绘制一点,就在绘制点统计图上计数一次;
(2)当我们绘制完所有的观测值对应曲线后,就生成一张k维空间代表绘制点数的图;
(3)比较k维空间每个点对应的绘制次数,找到最多绘制次数的点的坐标就是我们的求解值;
特别的:
重点从坐标空间转到参数空间,用累加器记录投票。
『OpenCV3』霍夫变换原理及实现
从代数到几何