弄浪的鱼

边缘检测

边缘检测是为了识别物体的边缘,而边缘是由数字图像中亮度变化明显的点连接而成的,主要可以通过基于图像强度的一阶和二阶导数来寻找到这些点。

边缘检测可以分成三个步骤:

  1. 滤波。由于导数对噪声敏感,所以在边缘检测之前可以先试着降低图片的噪声,常用的是高斯滤波。
  2. 增强。增强算法可以将图像灰度点邻域强度值有显著变化的点凸显出来,可以通过计算梯度幅值来确定。
  3. 检测。根据梯度幅值就可以检测出物体的边缘,由于经过图像增强,有些店并不是要找的边缘值,我们还可以通过阈值化的方式来筛选。

图像降噪

数字图像在数字化和成像过程中会受到成像设备或外界环境的影响,受到干扰产生的图像叫做噪声图像。

按照噪声的引入方式分类,可以将噪声分成加性噪声乘法性噪声。加性噪声的幅度与信号的幅度无关,是叠加在图像上的,比较容易去除。成性噪声的幅度与信号的幅度成正比,比较难去除。不过乘性噪声可以通过取对数的方式转化为加性噪声,实际上大部分去噪算法都会假设噪声为加性高斯白噪声

按照噪声的性质分类,可以将噪声分成脉冲噪声(Impluse Noise)),椒盐噪声(Pepper-Salt noise)和⾼斯⽩噪声(Gaussian white noise),莱斯噪声(Racian noise)等。

传统降噪算法根据降噪的原理不同可分为基于邻域像素特征的⽅法,基于频域变换的⽅法,和基于特定模型的⽅法。本文主要讲述基于邻域像素特征的方法,并用 OpenCV 实现相应算法。

计算机使用 0/1 编码存储图像,数字图像在计算机中同样也使用 0/1 编码来存储。在计算机看来图像是一堆亮度不同的点组成的矩阵。一般灰度图用 2 维矩阵来表示,彩色图片是多通道的,则用 3 维矩阵来表示。

灰度图像

我们一般接触的图像都是 8 位整数(CV_8U),所以灰度图像包含 0~255 灰度,其中 0 代表最⿊,1表⽰最⽩。

彩色图像

彩色图像比如 RGB 图像,每个像素用三个字节来表示,而 OpenCV 中存储 RGB 图像以 BGR 的顺序存储图像,所以存储方式如上所示。

本文将介绍遍历灰度图像和彩色图像的方法,其本质即为遍历图像矩阵,可以对比二维数组的遍历来学习。