机器视觉基础 Lecture 2
0. 数字图像基础
0.1 相机的成像原理
数码相机使用了感光器件(CMOS/CCD),将光信号转变为电信号(模拟信号),再经模/数转换后形成数字信号,在经过一系列处理形成特定的图像文件格式存储于存储卡上。
0.2 图像的采样和量化
采样,就是把一幅连续图像在空间上分割成M×N个网格,每个网格用一亮度值来表示。一般来说,采样间隔越大,所得图像像素数越少,空间分辨率低,质量差,严重时出现马赛克效应;采样间隔越小,所得图像像素数越多,空间分辨率高,图像质量好,但数据量大。
量化,就是把采样点上对应的亮度连续变化区间转换为单个特定数码的过程。量化后,图像就被表示成一个整数矩阵。每个像素具有两个属性:位置和灰度。位置由行、列表示。灰度表示该像素位置上亮暗程度的整数。此数字矩阵M×N就作为计算机处理的对象了。灰度级一般为0-255(8bit量化)。
0.3 数字图像和信号处理
图片也是一种特殊的信号。
0.4 颜色空间
RGB、HSV、Lab、CIE等等。
0.5 图像的直方图
1. 图像滤波
1.1 滤波器
滤波器英文filter/mask/kernel。可分为线性滤波器和非线性滤波器,高通滤波器(只允许图像中高频成分通过,换句话说滤掉低频成分)和低通滤波器。
均值滤波(低通滤波)、高斯滤波(低通滤波,重要的两个参数:kernel size和方差$\sigma^2$)、中值滤波(高通滤波,非线性,会锐化sharpen图片,比如增强边缘)、拉普拉斯滤波。
窗口滑动时如何处理边界问题:full、same、valid。
低通滤波会不同程度的平滑图片。
高频成分:图像中的边缘、噪声。
本质上:采用一个kernel然后在图像上滑动加权求和,因此kernel的大小和权重很重要。
1.2 梯度与边缘检测
由于图像边缘处像素值通常变化剧烈,由此形成像素值上的不连续,因此可以通过求梯度来检测图像中的边缘。将图像看作一个二维离散函数$f(x,y)$,图像梯度其实就是这个二维离散函数的求导。
正常微分定义:
但是图像是按照像素来离散的,最小也就1像素,因此普通的微分形式变成了:
可以看出,图像的梯度本质上相当于2个相邻像素之间的差值。
因此定义梯度算子(kernel):水平$[-1,1]$ 右边像素 - 左边像素;垂直:$[-1,1]^T$下边像素-上边像素
1 | import cv2 |
水平方向梯度
垂直方向梯度
水平方向求偏导:$\frac{\partial f}{\partial x}$,竖直方向求偏导:$\frac{\partial f}{\partial y}$,图像梯度:$\nabla f = [\frac{\partial f}{\partial x},\frac{\partial f}{\partial y}]$。
水平:$\nabla f = [\frac{\partial f}{\partial x},0]$,垂直:$\nabla f = [0,\frac{\partial f}{\partial y}]$
梯度方向:$\theta = \tan^{-1}(\frac{\partial f}{\partial y}/\frac{\partial f}{\partial x})$
梯度幅值(gradient magnitude):$||\nabla f||=\sqrt {(\frac{\partial f}{\partial x})^2+(\frac{\partial f}{\partial y})^2}$
注意:求梯度之前先做平滑,否则噪声也是高频,求梯度后无法分辨哪里是噪声哪里是边缘。如下图。
首先平滑图像后:
$f:signal;g:kernel$
用高斯一阶导去和信号做卷积,干了两件事:一是平滑信号,二是求导。相当于先用高斯滤波平滑再求导。 同理高斯二阶导,用高斯二阶导去和信号卷积。
- 高斯核求和为1,用途:平滑
- 高斯一阶导核求和为0,用途:边缘提取
Canny边缘检测
代码参见同专题下另一篇博客。
1.3 模板匹配
滤波器的一个应用。
2. 图像的特征
图像纹理texture
纹理分类
纹理是由重复的局部模式(local pattern)构成的。
如何描述纹理?最简单的就是用图像上x方向、y方向的梯度这两个维度来描述某一window的纹理特征;但这显然是不够的,因此可以使用多个不同的卷积核去与图像卷积,若采用 $d$ 个不同的卷积核,则特征向量的维度就是 $d$ 维。(可以看到卷积神经网络的前身,这里的卷积核是我们设计好的,神经网络中的核是学习到的)。下图中,使用48个卷积核,卷积过后可以得到48维的特征向量。(其实就是48张feature map)
不同的核卷积过后会得到不同的response。
注意:方块对应的颜色代表数值强弱,白色说明数值最大,黑色说明数值最小,这个数值是怎么来的呢?其实就是用一个模板卷积过后得到一幅图像,将卷积后图像中的数值全部相加再取平均得到一个数值(mean response)。上图中一幅图像就可以表示成7维的向量。