本文篇幅较长,用了大量图与公式帮助大家深入理解各种边缘检测算子,希望大家能看完哈,测试编译器为Matlab,作为入门计算机视觉(Computer vision)领域来说,Matlab是一款非常友好且简单的工具,其中自带各种先进的库函数,实现起来非常快速,偏向于实验性质的应用。好了话不多说,来和笔者一起看一下今天的主题-边缘检测。
前言
首先我们先来简单了解一下什么是数字图像处理(Digital Image Processing),先看一下数字图像主要的两个应用领域:
1.改善图示信息以便人们解释;
2.为存储、传输和表示而对图像数据进行处理,以便于机器自动理解。
我们可以简单理解为就将一幅原始图像,使用计算机处理为更为我们所能理解或所需要的形式,如图1-1所示,为基于边缘检测的免疫细胞图像自动分割过程示意图:
图 1-1 克隆细胞图像自动分割过程示意图
让我们再看一个例子,如图1-2 ,为经典的车牌检测算法,将原始图像进行灰度图转换、边缘检测、形态学腐蚀膨胀等操作,得到车牌区域,随后将车牌区域进行切割(这个是笔者刚入门时做的小demo,还没有用到深度学习模型,用的是knn,因此识别结果很差,各位看官会心一笑就好了哈)。
图2 -2 车牌检测
OK,在我们大致了解了数字图像处理之后,接下来介绍数字图像处理一些基本的算法。
数字图像处理基础知识与算法
接下来先简单介绍一下一些学习数字图像处理的基础知识与算法。
1、数字图像
数字图像指的是现在的图像都是以二维数字表示,每个像素的灰度值均由一个数字表示,范围为0-255(2^8)。
2、二值图像、灰度图像、彩色图像
二值图像(Binary Image):图像中每个像素的灰度值仅可取0或1,即不是取黑,就是取白,二值图像可理解为黑白图像。
灰度图像(Gray Scale Image):图像中每个像素可以由0-255的灰度值表示,具体表现为从全黑到全白中间有255个介于中间的灰色值可以取。
彩色图像(Color Image):每幅图像是由三幅灰度图像组合而成,依次表示红绿蓝三通道的灰度值,即我们熟知的RGB,此时彩色图像要视为三维的[height,width, 3]。
下面用一张图来感受一下灰度图与彩色图像之间的联系与差别:
图2 -1 RGB图像的分解
其中还有一个很重要的公式,即彩色图像转为灰度图的计算公式:
Gray表示灰度图像,RGB则表示彩色图像的红(red)、绿(green)、蓝(blue)三通道灰度值。
邻接性、连通性
4邻域:假设有一点像素p坐标为(x, y),则它的4领域是(x + 1, y), (x - 1, y), (x, y + 1), (x, y - 1)
D邻域:假设有一点像素p坐标为(x, y), 则它的D领域是(x + 1, y + 1), ( x + 1, y - 1), (x - 1, y + 1),(x - 1, y - 1)
8邻域:将4领域与D领域的集合取并集,即表示为8邻域
图2 - 2 4邻域(左)、 D邻域(中)、 8邻域(右)
4连通:对于在像素点p的4邻域内的像素均与像素点p形成4连通
8连通:对于在像素点p的8邻域内的像素均与像素点p形成8连通
滤波
滤波的目的主要两个:
1.通过滤波来提取图像特征,简化图像所带的信息作为后续其它的图像处理;
2.为适应图像处理的需求,通过滤波消除图像数字化时所混入的噪声。
其中第一点就是边缘检测中所使用的基本思想,即简化图像信息,使用边缘线代表图像所携带信息。
滤波可理解为滤波器(通常为3*3、5*5矩阵)在图像上进行从上到下,从左到右的遍历,计算滤波器与对应像素的值并根据滤波目的进行数值计算返回值到当前像素点,如图 2-3所示,蓝色块表示滤波器,对图像进行点积运算并赋值到图像。
具体公式表示为:
(其中
表示当前像素点,
表示当前像素与滤波器对应值相乘的值,n为滤波器大小,举例来说如若此滤波器值全为1,则此公式计算的是当前像素点的8连通像素点的平均值,因此滤波完后的图像应表现为模糊的效果,模糊程度取决于滤波器的大小,滤波器大小(size)越大,模糊效果越明显)。
边缘检测
基本边缘检测算子
在介绍完滤波的知识后,学习基本边缘检测算法是一件很轻松的事情,因为边缘检测本质上就是一种滤波算法,区别在于滤波器的选择,滤波的规则是完全一致的。
为了更好理解边缘检测算子,我们引入梯度(gradient)这一概念,梯度是人工智能(artificial intelligence)非常重要的一个概念,遍布机器学习、深度学习领域,学过微积分的同学应该知道一维函数的一阶微分基本定义为:
而我们刚才也提到了,图像的滤波一般是基于灰度图进行的,因此图像此时是二维的,因此我们在看一下二维函数的微分,即偏微分方程:
由上面的公式我们可以看到,图像梯度即当前所在像素点对于