年底决战 SLAM(F)

作者: zidea | 来源:发表于2019-12-02 06:34 被阅读0次

滤波(filter)

今天我们了解什么是滤波以及滤波在图像处理和计算机视觉上的重要性。首先我们来看什么滤波。我们通过对图像进行滤波来进行降噪和特征提取。其中一些重要特征提取的算法都少不了滤波。我们可能会疑惑图像跟波有什么关系?我们可以将图像灰度变化理解为信号的波。通过对灰度变化观察和处理来分析和处理图像。

卷积核

无论是在计算机视觉还是机器学习中图像识别问题都少不了卷积核,卷积核扫图像,通过对像素邻域(周围)点像素值加权求和后取平均值来更新当前像素值。那么卷积核可以看为我们需要滤波器,在波经过滤波器被滤波器所处理。

复习导数和均值

我们在是如何观察灰度变化率,求曲线变化率就是对曲线进行求导,所以有必要复习导数知识。

导数(Derivative)

这个在初中可能就学习过去,速度是表示距离单位时间的变化率,那么加速度表示单位时间速度变化率。
\frac{df}{dx} = \lim_{\Delta x \rightarrow 0 } \frac{f(x) - f(x - \Delta x)}{\Delta x} = f \prime (x) = f_x

我们知道距离求导就是物体的运动在某个时刻的速度
v = \frac{ds}{dx}
我们知道对速度求导就是物体的运动在某个时刻的加速度(衡量速度变化)
a = \frac{dv}{dx}

因为图像数据是一个一个像素点,所以数据是离散的,我们将连续问题转化为离散上,假设最小变换就是移动一个单位,现在我们将变换参照从时间上转移到空间上
\frac{df}{dx} = \frac{f(x) - f(x-1)}{1} = f \prime (x)

\frac{df}{dx} = f(x) - f(x-1) = f \prime (x)

  • 前向差值
    \frac{df}{dx} = f(x) - f(x-1) = f \prime (x)
  • 后向差值
    \frac{df}{dx} = f(x) - f(x+1) = f \prime (x)
  • 差值
    \frac{df}{dx} = f(x+1) - f(x-1) = f \prime (x)

通过下方程我们可以看出是如何去像素进行求导
\begin{aligned} f(x) = [10,15,10,10,25,20,20,20] \\ f \prime (x) = [0,5,-5,0,15,-5,0,0] \\ f \prime \prime (x) = [0,5,-10,5,15,-20,5,0] \end{aligned}
这里大家自己计算一下很简单后项减去前项除以1即可[-1,1],这样就会发现一维变化率。

我们图片是2D维数据,我们可以用 openvc 的命令查看一下图片具体数据结构

   img = cv2.imread("img/bird.jpg")
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    print(gray)
[[136 135 133 ... 101 101 101]
 [136 135 133 ... 101 101 101]
 [136 134 133 ... 101 101 101]
 ...
 [204 213 206 ...  86  86  87]
 [198 200 186 ...  86  86  87]
 [191 189 162 ...  86  87  87]]
2维 导数(Derivatives in 2 Dimensions)

那么我们来看一看对有两个特征的函数进行求导,也就是 2维求导
f(x,y) \tag{Given function}

因为函数变换率体现在 x 和 y 两个变量上,所以我们需要分别对 x 和 y 进行求偏导,然后用一个向量来表示变化率。
\nabla f(x,y) = \begin{bmatrix} \frac{\partial f(x,y)}{\partial f(x)} \\ \frac{\partial f(x,y)}{\partial f(y)} \end{bmatrix} = \begin{bmatrix} f_x \\ f_y \end{bmatrix} \tag{Gradient vector}

下面变化率大小,就是通过对 x 和 y 取模,也就是求距离
|\nabla f(x,y)| = \sqrt{f_x^2 + f_y^2} \tag{Gradient magnitude}
一维变化率是一个向量,向量不但有大小而且有方向表示变化率方向

\theta = \tan^{-1} \frac{f_x}{f_y} \tag{Gradient direction}

滤波一个简单应用

我们现在停下做一个小实验,通过过滤做一个有趣的简单实验
\begin{bmatrix} 0 & 0 & 0 \\ 0 & 0 & 1 \\ 0 & 0 & 0 \end{bmatrix}
我们用这样卷积核扫过图像,会起到像右侧平移图像一个像素的效果。要做到这个件事我们需要几个步骤

  • 将图片灰度化处理
  • 然后创建一个 3 x 3 的卷积核
  • 实现卷积核在图像上游走,将像素更新为其周围的像素和卷积核相乘等于对于取权重后求和在做标准化。
for i in (1,img_height - 1)
    for j in (1,img_width - 1)
        更新 img[i,j]
def move_img_by_filter(img):
    conv = cnp.array([0,0,0,0,0,1,0,0,0]).reshape(3,3)
    h = img.shape[0]
    w = img.shape[1]
    for i in range(1,h-1):
        for j in range(1,w-1):
            print(img[i,j])
            img[i,j] = (img[i-1,j-1] * conv[0,0] + img[i-1,j]*conv[0,1] + img[i-1,j+1]*conv[0,2] +
                img[i,j-1] * conv[1,0] + img[i,j]*conv[1,1] + img[i,j+1]*conv[1,2] +
                img[i+1,j-1] * conv[2,0] + img[i+1,j]*conv[2,1] + img[i+1,j+1]*conv[2,2])
            # print(img[i,j])
    return img

相关文章

  • 年底决战 SLAM(F)

    滤波(filter) 今天我们了解什么是滤波以及滤波在图像处理和计算机视觉上的重要性。首先我们来看什么滤波。我们通...

  • 年底决战 SLAM(3)

    颜色看似一个简单话题,其实并没那么简单,因为我们没思考过其背后的秘密,今天我们一起看看我们是如何感知颜色和区分颜色...

  • 年底决战 SLAM(2)

    目标 了解相机成像原理 熟悉相机结构 熟悉相机参数 我们 SLAM 通过摄像头获取环境信息,我们就需要了解一下照相...

  • 年底决战 SLAM(1)

    目标 看了这么诱人的目标,大家一定流出口水。对这就是 SLAM 用一句最近刚学的流行词真香。 3D 室内漫游 de...

  • 年底决战 SLAM (5) harris 角点检测

    全局例如颜色、纹理这些描述图片,今天我们在完成傅里叶变换和拉普拉斯变换前我们介绍一下什么是 harris 角点检测...

  • SLAM--优秀文集

    1、SLAM技术概述 1)激光SLAM与视觉SLAM的现状与趋势 2) SLAM的前世今生 终于有人说清楚了 | ...

  • SLAM for dummies

    About SLAM DEFINITION: SLAM is concerned with the problem...

  • 基于ROS的SLAM学习笔记1

    基于ROS的SLAM开源库学习笔记 一直听说SLAM, SLAM。 但是实际上,除了SLAM是持续定位和生成地图的...

  • SLAM 0 初识

    0 初步认知 知乎Live:畅谈 SLAM 即时定位建图技术视觉SLAM漫淡 SLAM:simultaneous ...

  • ORB_SLAM2功能包的构建和在ROS中的应用

    ORB_SLAM2简介 ORB_SLAM2官方给出的简介是Real-Time SLAM for Monocular...

网友评论

    本文标题:年底决战 SLAM(F)

    本文链接:https://www.haomeiwen.com/subject/ouqxgctx.html