计算机视觉笔记(二)图像处理(1)图像、滤波、边缘检测、车牌识别、SVM

Outline
1、滤波及边缘检测
1)空间滤波、频率滤波
2)边缘检测
canny,sobel,laplace
这些都是拿到一幅图像所做的最基本的操作。
项目:车牌识别,用到机器学习的SVM和Neural network算法

一、图像

获取的图像包含噪声:
来源:
(1)传感器质量(2)光照变换 (3) 量化过程
在图像处理当中把图像复原或者去噪称为图像滤波或者图像复原这是我们拿到图像之后的第一步操作。
受到噪声污染的图像叫做退化,去噪就称为复原。
常见噪声为加性噪声(与信号的关系是相加的,不管有没有信号,噪声都是始终存在的);
乘性噪声(由于信道不理想,它与信道的关系是相乘的,信号存在,乘性噪声就存在,反之就不存在)。
把加性的随机性看成是系统的系统背景噪声,乘性的随机性噪声看成是系统的变性。

常见噪声:
白噪声:功率谱密度在整个频率内均匀分布的噪声。

计算机视觉笔记(二)图像处理(1)图像、滤波、边缘检测、车牌识别、SVM

高斯噪声:概率密度函数服从高斯分布(即正态分布)的一类噪声。

计算机视觉笔记(二)图像处理(1)图像、滤波、边缘检测、车牌识别、SVM

二、2D滤波

(一)滤波器:BoxFilter
在一维数据里面有噪声,首先想到的是做滑动平均。例:111511 -> 异常点的值=1/5(1+1+1+5+1+1)
在二维里面对其进行展开,同样有一个滑动窗口,比如是3*3的一个二维矩阵窗口,除以9做规划。

在左上角开始,用这个滑动窗口对原始图像进行滑动滤波,滑动窗口与原图像对应位相乘,然后求和,再取平均,赋给中间那个值。
计算机视觉笔记(二)图像处理(1)图像、滤波、边缘检测、车牌识别、SVM

上面的滤波器叫做box filter,但是这样的滤波会有一些水纹或者说图像不是那么平滑有跳跃的感觉。
解释一下,在频域里面用的是一个矩形框来滤波,它在频域里面是一个类似于sin的函数。它在高频的时候是有跳跃的,它不是真正的低通滤波器。在某些高频的时候是可以通过的。

BoxFilter在OpenCV的实现方式:blur()和boxFilter()函数
在官方文档里面的解释是两种方式都一样,其实有一点不一样,boxFilter()是可以不用归一化的,而Blur()是必须归一化的。

(二)在2D当中的卷积(Convolution in 2D)
跟滑动不太一样,公式里是减号了,然而对于中心对称的box filter是没有影响的
计算机视觉笔记(二)图像处理(1)图像、滤波、边缘检测、车牌识别、SVM
对于二维的滤波称为相关,在做运算的时候,相关与卷积如果boxfilter是对称的,那么结果就是一直的,如果boxfilter是非对称的,那么结果不一致,但是二者意义是大同小异的。

(三)Gaussian高斯滤波器

之前的box filter的之后会出现振铃现象,二维高斯滤波器是真正的低通滤波器,
在频域里面是没有振铃现象的,非常平滑的,高频是完全阻断的。
公式要牢记,一维的分母有根号。
计算机视觉笔记(二)图像处理(1)图像、滤波、边缘检测、车牌识别、SVM

计算机视觉笔记(二)图像处理(1)图像、滤波、边缘检测、车牌识别、SVM
在OpenCV的实现方式:filter2D()
都是线性的,优点:有两个滤波器对一幅图像依次进行线性滤波的话,它就等于先对两个滤波器做运算,再对图像做运算。
交换律结合律,微分运算。。

(四)非线性的滤波器:中值滤波器
对于椒盐噪声有很好的效果
计算机视觉笔记(二)图像处理(1)图像、滤波、边缘检测、车牌识别、SVM

计算机视觉笔记(二)图像处理(1)图像、滤波、边缘检测、车牌识别、SVM

小结:
双边滤波器:保边的滤波器,不但滤除了噪声,还保证了边缘的陡峭性,但是速度太慢了,很难用于实时运算,两种滤波器的组合。
图像滤波:在每一个像素位置对其附近像素点的一种运算,在图像增强、去噪等用得特别多
模板匹配:数字散斑相关方法
template matching
http://docs.opencv.org/2.4/doc/tutorials/imgproc/histograms/template_matching/template_matching.html

三、边缘检测
1、边缘是怎么产生的?
1)深度上的不连续
2)对光的反射率不同
3)阴影

2、确定轮廓
1)一维图像
用一阶导数取极值的位置
编程实现一阶导数
在同一方向(如x方向)前项和后项的差分计算倒数:后一个位置减前一个位置
计算机视觉笔记(二)图像处理(1)图像、滤波、边缘检测、车牌识别、SVM
如果用模板的形式来表示,它应该就是一个1*3的卷积模板,在图像中进行滑动
2)二维图像
计算机视觉笔记(二)图像处理(1)图像、滤波、边缘检测、车牌识别、SVM
模板
计算机视觉笔记(二)图像处理(1)图像、滤波、边缘检测、车牌识别、SVM
竖直边缘 [-1 0 1] 由黑到白

3、
先用滤波器对原图像去噪,然后求取梯度边缘检测(梯度运算对噪声非常敏感)。
Sobel滤波器
计算机视觉笔记(二)图像处理(1)图像、滤波、边缘检测、车牌识别、SVM
中心权重更大

计算机视觉笔记(二)图像处理(1)图像、滤波、边缘检测、车牌识别、SVM

高斯拉普拉斯滤波器

计算机视觉笔记(二)图像处理(1)图像、滤波、边缘检测、车牌识别、SVM

4、
一维到二维的变化
二维:墨西哥帽,小波的一种

5、非极大值抑制
在梯度的方向上来找到每一个位置的像素的变化从而找到局部的最大值。
计算机视觉笔记(二)图像处理(1)图像、滤波、边缘检测、车牌识别、SVM

6、Canny
对局部的情况进行非极大值抑制,在局部的区域只保留最大值,非最大值都舍去。
Canny的做法:沿着梯度的方向,找0,45,90,135度的方向
计算机视觉笔记(二)图像处理(1)图像、滤波、边缘检测、车牌识别、SVM

然而在canny在实现的时候,还是有一些细节,阈值选大了,边缘检测就会检测断断续续的边缘;
如果阈值很小,检测出的边缘很多,不是边缘的都检测出来了,
那么它怎么做的呢,就是选了两个阈值一个高的一个低的,大的检测出了一些边缘,小的也检测出了一些边缘,
然后把二者检测出的边缘拼接起来,会把不连续的边缘舍去(由于门限低而检测出的边缘),把连续的边缘保留下来了,所以就成了一个强边缘加上一个弱边缘的并集。

对角点会出现一些问题。

7、
计算机视觉笔记(二)图像处理(1)图像、滤波、边缘检测、车牌识别、SVM

8、
project:车牌识别
检测+识别
检测:
1)图像分割
2)特征提取
识别:
3)模式识别
1)Support vector machine
2)Artificial neural network

车牌的检测与定位
图像分割,对分割图像进行分类
计算机视觉笔记(二)图像处理(1)图像、滤波、边缘检测、车牌识别、SVM
图像分割主要步骤:
(1)从RGB或RGBIR转换为Gray图,
(2)进行滤波高斯滤波,
(3)边缘检测,用Sobel滤波器找竖直边缘,为了后面分割字符,所以找竖直边缘,
(4)对含有边缘的图像进行阈值化,有自适应算法、大津算法otsu等,得到类似于有很多噪点的边缘二值图像,
(5)进行形态学操作,这次是用闭操作,删除竖直边缘之间的空白区域,把该联通的区域都联通上,并连接都大量边缘的区域,得到了一些可能的区域,
(6)做一个模板,把背景图像用颜色进行满水填充,将图像与模板进行与运算,以去除背景
(7)用矩形框来逼近联通区域,得到若干个可能的车牌位置
(8)用车牌的长宽比来过滤矩形,
(9)由于拍摄的时候是从上向下拍,有仿射的存在,进行仿射变换。全都转化成固定的区域模块。

图像分类主要步骤:
SVM方法(支持向量机)

识别字符:
OCR光学字符识别:累计直方图
ANN人工神经网络
计算机视觉笔记(二)图像处理(1)图像、滤波、边缘检测、车牌识别、SVM

SVM
计算机视觉笔记(二)图像处理(1)图像、滤波、边缘检测、车牌识别、SVM
由于标签的不同,用不同的颜色来表示不同的标签,用最大边界来划分,对噪声的容忍度最高。

计算机视觉笔记(二)图像处理(1)图像、滤波、边缘检测、车牌识别、SVM
点到超平面的距离,到两类的点的距离最大。
决定超平面位置的点叫做SV,数据点叫做支持向量

计算机视觉笔记(二)图像处理(1)图像、滤波、边缘检测、车牌识别、SVM
对于两个类别用一根线就可以区分,称为线性数据,当一根线不能区分的时候就称为非线性数据。
遇到非线性问题,我们想到的就是忘高维空间转,转成一个线性问题,然后进行分类,把数据往高维空间转。
涉及到一个问题就是空间爆炸问题,引入kernel避免了把数据往高维空间转所带来的维度的增长。