一、噪声
1.噪声产生的原因:传感器源的质量、光照的影响、质量的影响
2.加性噪声:与信号关系相加
3.乘性噪声:与信号关系相乘,与信噪比有关,随机性是变性
白噪声:功率谱在整个频域内分布的噪声
高斯噪声:呈高斯型
二、滤波
eg:利用矩形框低通滤波器来滤波
在频域里面是个有波峰波谷的曲线,有些高通的是可以通过的,滤波后会出现锯齿状不平滑的效果,
振铃现象。
二维的滤波我们称为相关:h = filter2(g,f);
二维卷积的话,如果是对称的则一样,不对称不一样,但是意义一样:h[m,n] = g[k,l]f[m-k,n-l]
高斯滤波器:opencv:filter2D()
中值滤波器(非线性):对椒盐噪声效果很好
Bilateral filter(双边滤波器):保边
相关运算(可以用来做模板匹配,耗时长):欧式距离、归一化自相关
eg:数字散斑相关方法
三、边缘检测
边缘的产生:深度(景深)上的不连续、物体表面对光的反射率不同、照明问题(eg:阴影)
具体图像中由于灰度变化会产生边缘
提取边缘的方法:一阶导数求极值或者二阶导数为0
得到竖直方向边缘的算子[-1,0,1],得到水平方向边缘[-1,0,1]-1(Y方向求偏导)
图像的拉普拉斯用的就是二阶导数,但二阶导数对噪声非常敏感,所以要事先滤波(一般是高斯滤波器)
eg:Canny算子:非极大值抑制,D ={0,45,90,135}方向极大值的值,非极大值为0,极大值求出其值。
实现的时候如阈值的选择,阈值太大,会有断断续续的边缘,小,会检测太多。Canny是用强边缘和弱的边缘的连集,断续的舍去。Canny可以检测边缘和对比度的变化,不是线性的滤波器。
四、车牌识别项目
ANPR:automatic park recogniziation
任务:检测、识别。其中检测涉及到分割和特征的提取。先提取可能的车牌的位置,看下是否存在车牌,如果识别到有车牌,进行车牌的显示。
OCR涉及到对每个部分分割并进行特征提取。
车牌检测与定位:图像分割,对分割部分分类与定位。
SOBEL找竖直边缘,再分割(TOSU大津算法),闭运算连通车牌的位置,并矩形框逼近连通区域的形状。用模板做一个与运算,根据长宽比筛选,得到车牌的区域。再进行仿射变换得到较正的车牌。
大津算法:利用最大类间方差来实现图像的二值化。分割前景和背景
字符用ANN或者OCR。先阈值分割,再找到轮廓。
根据水平和竖直方向的直方图来说明数字几,比如数字2、数字5.
SVM:到两个类别的距离最大。把决定超平面位置的点叫作支持向量。
遇到非线性问题则把数据往高维空间转变成线性问题,但可能遇到空间爆炸问题,造成维度增长,则引进Kernel。
五、霍夫变换
如果斜率不是无穷,则用笛卡尔坐标;如果斜率无穷,则用极坐标。
霍夫直线检测在opencv中,输入需要时8位的图像。
如果要检测圆,当半径固定时,霍夫变换过去还是圆,但如果半径不固定,则是圆锥。
先进行边缘检测,(canny),再用梯度(sobel),在梯度方向上进行投票,当累加器累加达到一定阈值时,从候选中心出发找到
六、图像局部特征
1.Blob特征检测之blob与corner
blob detetion:高斯拉普拉斯算子LOG、像素点Hessian矩阵行列式DOH eg:SIFT SURF
corner dection eg:Harris Fast
2.特征描述
得到特征点还需要得到它的位置,方向(特征描述子,eg:浮点型二进制2)
梯度统计直方图或二进制字符串特征描述子(SURF、SIFT用的都是此类)
BRIEF,ORB,BRISK,FREAK算法根据二进制进行改进。
3.角点
在任何方向灰度都会有大的变化,说明角点找到了。
刚开始在四个方向讨论灰度变化值,
找到(1,0)、(1,1),(0,1),(-1,-1)方向的最小值,方向太少,可能会有噪点。
harris进行泰勒展开,可以在任意方向展开,。
4.图像匹配
如何匹配,在不同尺度下极值一下。尺度空间:Scale Space ,尺度越小描绘得越精细,尺度越大描绘得越粗糙。
利用高斯模糊来进行尺度变换。
用拉普拉斯高斯来描绘。
DOG是LOG的近似,构造尺度空间,在三维空间里找极值。DOG不做降采样,做了高斯模糊,SIFT利用DOG进行了下采样。
8层是从512*512大小的图像到256*256到128*128一直到8*8这层。一层层进行高斯卷积,卷积的公式
七、杂七杂八
Opencv2.3之后变化非常大,增加了很多功能,比如读取文件。用2.4,功能多,比较稳定,GPU也很好。vs2010笨重,速度慢,13或者15更好。13用来做Opencv比较好。
Mat浅拷贝,深拷贝。用深拷贝生成两块数据空间,clone,copyto。
Vec3b,遍历的顺序是BGR。Iteator器访问,uchar类型是(0,255)。指针访问,只能在运行的时候报错,不太建议用指针来寻址。如果需要速度的话,需要用指针。
未完待续。。。。
cs