一、滤波算法
1.均值滤波
卷积核内,给中心像素点取平均值。
2.方框滤波
有两种情况,一种是与均值滤波效果完全一样,一种则是把卷积核的值直接相加,超出255就只取255,这会导致图像仅有一些明显的边缘以及暗处可以显示。
3.高斯滤波
卷积核内,离中心像素点越近,设置权重越高;归一化操作:让卷积核(高斯模板)中所有权重系数的和等于1,例子 :
4.中值滤波
卷积核内,给中心像素点取中位数。
二、canny边缘检测
1.高斯滤波(归一化)
2.sobel算子计算梯度的大小和方向
3.NMS非极大值抑制(线性插值法、8方向分类法)
非极大值抑制简单来说就是保留max值,抑制除了max值以外的其他值;举个例子,假设识别人脸,有多个边界框检测到人脸,置信度有99%,89%,96%,那么只保留最大的99%,这就是非极大值抑制。
3.1 线性插值法
在常规的 NMS 中,我们只比较像素点与其相邻的 8 个像素。但梯度的方向是连续的,不是正好在相邻的像素中心。为了判断当前的像素点是不是为局部最大值,需要取它梯度方向上(梯度可以理解成与边缘的切线)两个参考点g1,g2,但由于由于g1和g2往往落在两个像素点之间,我们无法直接读值,线性插值法就是利用g1两侧真实的像素值,根据距离比例,计算出一个“虚拟”的幅值。
假设当前像素梯度方向在0-45°之间:
- 它会落在右侧相邻像素E和右上角像素NE之间。
- 设梯度方向与水平线的夹角为x
- g1的幅值计算公式通常为:
,w通常是
,代表靠近NE的权重
- 计算出g1和g2的插值结果后对比,中心点和g1,g2的值,若中心点最大保留该点为边缘点,否则抑制
3.2 8 方向分类法
8 方向分类法(也叫离散化方向法)是线性插值法的"简化版",它的核心逻辑是将连续的梯度角度(0° 到 360°)近似简化为 4 个主要的轴线方向(对应 8 连通域中的 8 个相邻像素)。
- 取整/分类:算出每个像素的梯度角后,看它落在哪个区间。
- 直接对比:不需要计算插值,直接把当前像素的幅值与其对应方向上的两个邻居比大小。
- 判定:如果当前像素比这两个邻居都大,保留;否则,剔除(置 0)
3.3 区别
- 8 方向法:像“四舍五入”,速度快,实现简单,但在边缘弯曲处可能会有轻微的阶梯感(锯齿)。
- 线性插值法:像“平滑过渡”,精度高,定位更准,但计算量大(每个点都要做乘加法)。
4.双阈值检测
设置双阈值,minval和maxval,梯度超过maxval视为边界,梯度小于minval则舍弃;当处于min和max中间,如果连有边界保留,没有连有边界就舍弃。在图像中minval越小,保留的边界越多,描绘的越细节。