视觉模型-实时目标检测学习总结2

0 阅读1分钟

一、滤波算法

1.均值滤波

卷积核内,给中心像素点取平均值。

2.方框滤波

有两种情况,一种是与均值滤波效果完全一样,一种则是把卷积核的值直接相加,超出255就只取255,这会导致图像仅有一些明显的边缘以及暗处可以显示。

3.高斯滤波

卷积核内,离中心像素点越近,设置权重越高;归一化操作:让卷积核(高斯模板)中所有权重系数的和等于1,例子 :

\begin{bmatrix} 0.0924 & 0.1192 & 0.0924 \ 0.1192 & 0.1538 & 0.1192 \ 0.0924 & 0.1192 & 0.0924 \end{bmatrix}

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的幅值计算公式通常为:(1-w)M(E)+wM(NE),w通常是\tan\alpha,代表靠近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越小,保留的边界越多,描绘的越细节。