机器视觉算法与应用读书笔记(算法)

1.数据结构

2.图像增强

1. 灰度值变换

2. 辐射标定

3. 图像平滑

1. 时域去噪法

2. 空间域去噪法

  1. 均值滤波器
    递归线性滤波器:将上次计算得到的值带入到下次的值中
    缺点:噪声并不能被全部消除
  2. 高斯滤波器
    高斯滤波器

4. 傅里叶变换

将函数h(x)从空间域转变到频率域
是一种可逆变换

3. 几何变换

1. 仿射变换

二维to二维之间的变换
对图像中的物体的尺寸进行修正(平移和旋转角度修正)
一般有一个2x2的线性部分和一个平移部分

2. 投影变换

高维to二维之间的变换
仿射变换(特殊的投影变换)
需要八个参数(4个点)

3. 图像变换

1. 最临近插值:

转化后坐标的x位于四个像素点中心店之间,是一个非整数的的位置,对非整数位置取整,以找到与此坐标相邻的四个像素点的中心位置中最近的一个,然后将输入图像里的这个最邻近点位置的像素的灰度值视为输出图像内相应像素点的灰度值。
容易导致锯齿状外观

2. 双线性插值:

首先,分别计算转换后的坐标到四个相邻近像素中心点的垂直方向和水平方向的距离根据距离值(0-1之间)计算不同灰度值所占的权重后得到双线性插值的结果。

4. 极坐标变换:

通常被用来 矫正图像中的圆形物体或被包含在圆环中物体。

4. 图像分割:

1. 阈值分割

一个好的阈值对应着 直方图中两个峰之间的最小值。
But 灰度直方图的随机波动,所以需要鲁棒的方法选定的话,必须对直方图进行平滑处理即将直方图与一个一维高斯滤波器进行卷积来完成平滑处理。为了给高斯滤波器选定合适的 值,一个好的策略是逐渐增大 并平滑直方图,直到可以从平滑后的直方图中得到唯一的最大值和他们之间的一个唯一的最小值。

动态阈值分割 :

使用均值、高斯或中值滤波器,进行平滑处理就可以计算出以当前像素为中心的窗口内的平均灰度值(背景值)。
将图像与局部背景进行的比较被称为动态阈值分割
对亮物体的动态阈值分割处理:
图像值-背景值
对暗物体的阈值分割:
背景值-图像值
平滑滤波器的尺寸决定了能被分割出来的物体的尺寸。(滤波器的大小应该大于被提取物体的大小)
动态阈值分割 可以用来检测异常:
待测物体值-图像物体值>某一阈值
前提:待测物的图像和参考图像必须精确对准,

异常检测:偏差模型法

用n幅训练影像的平均值用来模型化参考图像,用n幅训练影像的标准差来模型化参考图像允许的偏差。(当偏差太小时不适用,此时应添加一个绝对的阈值)

2. 提取连通区域

如何定义像素连通:

  1. 两个像素有共同的边缘
  2. 将对角线也包括进来
    前后景必须使用不同的连通定义
    在用行程表示法描述的区域上计算连通区域,可以使用深度优先搜索

3. 亚像素精度阈值分割

提取到的不可能是面,应该是亚像素精度的轮廓,表示图像中两个区域之间的边界。
表示这两个边界,必须将图像的离散表示转换为一个连续的函数

5. 特征提取

1.区域特征

1. 基于矩的特征

面积是被称为区域的矩的广义特征中的一个特例。

mp,q=∑(r,c)∈rrpcq

m_{p,q} = \sum_{(r,c)\in r} r^pc^q
m0,0m_{0,0}就是区域的面积
当 p+q≥1p+q\ge1时。矩除以面积得到归一化的矩
归一化的矩是由图像的位置决定的。通常,使特征不随图像中区域的位置变化而变化是很有用的。这些中心矩是在 (p+q≥2)(p+q\ge2)时由下式实现的:

μp,q=1a∑(r−n1,0)p(c−n0,1)q

\mu_{p,q}=\frac{1}{a}\sum(r-n_{1,0})^p(c-n_{0,1})^q
二阶中心距 (p+q=2)(p+q=2)尤其值得关注,它可以用来定义区域的方位和区域的范围。

2. 基于外接几何基元(矩形,圆)

可以计算宽度、高度、宽高比
计算任一方位的外接圆的方法是基于首先计算区域的凸包
基于此区域的凸包,能够定义另一个有用的特性:凸性
凸性被定义为某区域的面积和该区域凸包的面积的比值,用来测量区域的紧凑程度
区域的轮廓长度

2.灰度值特征

在一个参考区域测出的平均值和标准差也能被用来建立一个线性灰度值变换,此变换可以补偿亮度的变化。

6.形态学

1.区域形态学

所有的区域形态学处理能根据六个非常简单的操作来定义:并集,交集,差集,补集,平移和转置。
膨胀、腐蚀、开操作、闭操作
膨胀和腐蚀也被称为最大值滤波和最小值滤波
形态学梯度算子:
膨胀-腐蚀

2.灰度值形态学

7.边缘提取

1. 在一维和二维中的边缘定义

  1. 一维

    |f′|≫0

    |f^{\prime}|\gg 0
    通常有很多彼此相连的点都满足此条件,因为背景灰度值到前景灰度值过度是光滑的。因此为了获得唯一的边缘位置,我们必须加入额外的要求,即一维导数的绝对值|f′(x)||f'(x)|是局部最大值。这就是非最大抑制

    f′′=0

    f^{\prime\prime}=0

    f′f′′′<0

    f^{\prime}f^{\prime\prime\prime}

    f′>0是正边缘

    f^{\prime}>0是正边缘

    f′<0是负边缘

    f^{\prime}

  2. 二维

    ▽f=▽f(r,c)=(ϑf(r,c)ϑr,ϑf(r,c)ϑc)=(fr,fc)

    \bigtriangledown f = \bigtriangledown f(r,c) = (\frac{\vartheta{f(r,c)}}{\vartheta{r}},\frac{\vartheta{f(r,c)}}{\vartheta{c}})=(f_r ,f_c)

    ||▽||2=f2r+f2c−−−−−−√

    ||\triangledown||_2=\sqrt{f_r^2+f_c^2}
    等价于一维中的一阶导数的绝对值|f′(x)||f^{\prime}(x)|
    梯度方向:

    ϕ=−arctan(fr/fc)

    \phi=-arctan(f_r/f_c)
    注意ϕ\phi沿从横轴开始的算数正方向(逆时针方向)增大
    拉普拉斯算子:

    △f=△f(r,c)=(ϑ2f(r,c)ϑr2,ϑ2f(r,c)ϑc2)=(frr,fcc)

    \triangle f = \triangle f(r,c) = (\frac{\vartheta^2{f(r,c)}}{\vartheta{r^2}},\frac{\vartheta^2{f(r,c)}}{\vartheta{c^2}})=(f_{rr} ,f_{cc})
    边缘能通过拉普拉斯算子过零计算得到:

    △f(r,c)=0

    \triangle f(r,c)=0
    只有在笔直的边缘是局部梯度最大和拉普拉斯算子返回一值,梯度量值局部最大来定义的边缘总落在联想拐角内,拉普拉斯算子过零来定义的边缘总落在理想拐角外

2. 一维边缘提取

速度快常被用来确定一个物体的位置和尺寸

第一个问题:如何计算离散一维灰度值剖面的导数?

一阶倒数

f′i=12(fi+1−fi−1)

f'_{i}=\frac{1}{2}(f_{i+1}-f_{i-1})
二阶导数

f′′i=12(fi+1−2fi+fi−1)

f'’_{i}=\frac{1}{2}(f_{i+1}-2f_i+f_{i-1})
即以下的卷积掩码:

12[1,0,−1]和12[1,−2,1]

\frac{1}{2}[1,0,-1]和\frac{1}{2}[1,-2,1]
计算斜线、圆或椭圆上的剖面时,生成若干条垂直于我们获取灰度值破面的那条线。而线上的点通常不落在像素的中心上,此时需要进行插值处理。
因为噪声容易导致过多的二阶倒数为零,所以使用二阶导数不容易提取出明显的边缘。
为了抑制噪声,可以在灰度值剖面的那条直线的垂线方向上对多个灰度值进行适当的的平均,但是当被检测物体具有非常多的纹理,或者无法选取足够多的像素进行平均时,无法被抑制。
此时我们对灰度值剖面进行平滑处理,这样我们在剖面上提取边缘时需要两个卷积,此时可将这两个卷积合成一个卷积——边缘滤波器
canny准则(怎么样算好的边缘探测器):
1. 对一个边缘点的错检和漏检的可能性都要低
2. 提取出来的边缘尽可能的靠紧真正的边缘
3. 对每个真正的边缘都只返回唯一的边缘(提取出来的边缘位置之间的距离最大化)
canny认为最好的边缘滤波器是高斯滤波器的一阶导数。
Deriche 提出了改进了Canny的算法提出了能以递归方式实现的两个滤波器:

d′α(x)=−α2xe−α|x|

d'_{\alpha}(x) = -{\alpha}^2xe^{-\alpha|x|}

e′α(x)=−2αsin(αx)e−α|x|

e'_\alpha(x)=-2\alpha sin(\alpha x)e^{-\alpha|x|}
对应的平滑滤波器:

dα(x)=14α(α|x|+1)e−α|x|

d_\alpha (x)=\frac{1}{4}\alpha(\alpha|x|+1)e^{-\alpha|x|}

eα(x)=12α[sin(α|x|)+cos(α|x|)]e−α|x|

e_\alpha(x)=\frac{1}{2}\alpha[sin(\alpha|x|)+cos(\alpha|x|)]e^{-\alpha|x|}
亚像元边缘提取
用边缘幅度最大值周围的三个点来拟合抛物线,然后计算此抛物线的最大值

3.二维边缘提取

fr;i,j=12(fi+1,j−fi−1,j)

f_{r;i,j}=\frac{1}{2}(f_{i+1,j}-f_{i-1,j})

fc;i,j=12(fi+1,j−fi−1,j)

f_{c;i,j}=\frac{1}{2}(f_{i+1,j}-f_{i-1,j})

⎡⎣⎢1a1000−1−a−1⎤⎦⎥(1)

\left[\begin{matrix}1 & 0 & -1 \\a & 0 & -a \\1 & 0 & -1\end{matrix}\right]\tag{1}
注意在卷积时滤波器掩码被镜像:

⎡⎣⎢10−1a0a10−1⎤⎦⎥(1)

\left[\begin{matrix}1 & a & 1 \\0 & 0 & 0 \\-1 & a & -1\end{matrix}\right]\tag{1}
当 a=1时a=1时,我们得到 PrewittPrewitt滤波器,垂直与到导数方向上滤波
当 a=2√a=\sqrt{2}时,我们得到了 FreiFrei滤波器
当 a=2时a=2时,我们得到了 SobelSobel滤波器,垂直与导数的方向上近似于高斯平滑滤波。
当 a=2.435101a=2.435101时,我们得到了 AndoAndo滤波
因为2-范数耗时太大,所以经常用
1-范数(4连通):

||▽f||1=|fr|+|fc|

||\triangledown{f}||_1 = |f_r|+|f_c|
或者最大范数(8连通):

||▽f||∞=max(|fr|,|fc|)

||\triangledown{f}||_{\infty}=\max(|f_r|,|f_c|)
由于 3×33×3鲁棒性不好
所以使用Canny二维形式:

gr=2π−−√σg′σ(r)gσ(c)

g_r=\sqrt{2\pi}{\sigma}g'_{\sigma}(r)g_{\sigma}(c)

gc=2π−−√σg′σ(c)gσ(r)

g_c=\sqrt{2\pi}{\sigma}g'_{\sigma}(c)g_{\sigma}(r)
边缘检测之Canny算子
非极大值抑制

8. 几何基元的分割与拟合

1.直线拟合

直线的表示方法:黑塞范式

αr+βc+γ=0

{\alpha}r+{\beta}c+{\gamma}=0

α2+β2=1

{\alpha}^2+{\beta}^2=1
拟合直线即使点到直线的距离最小化:

ε2=∑i=1n(αri+βci+γ)2−λ(α2+β2−1)n

{\varepsilon}^2 = \sum_{i=1}^n({\alpha}r_i+{\beta}c_i+{\gamma})^2-\lambda({\alpha}^2+{\beta}^2-1)n
以此方法得到的 (α,β)(\alpha,\beta),它既是直线的法向量,也是从点集的椭圆参数得到的短轴
为了降低远离点的影响可以加入权重。
那么最小化的过程就变成了:

ε2=ωi∑i=1n(αri+βci+γ)2−λ(α2+β2−1)n

{\varepsilon}^2 ={\omega}_i \sum_{i=1}^n({\alpha}r_i+{\beta}c_i+{\gamma})^2-\lambda({\alpha}^2+{\beta}^2-1)n
确定权重的方法:多次迭代法。
权重函数:
Huber法:

ω(σ)=(x)={1r/|σ||σ|⩽r|σ|>r

\omega(\sigma)=(x)=\left\{ \begin{aligned} 1 && |\sigma|\leqslant r \\ r/|\sigma|&& |\sigma|> r \end{aligned} \right.
Tukey法:

ω(σ)=(x)={[1−(σ/r)2]20|σ|⩽r|σ|>r

\omega(\sigma)=(x)=\left\{ \begin{aligned} \lbrack1-(\sigma/r)^2\rbrack^2 && |\sigma|\leqslant r \\ 0&& |\sigma|> r \end{aligned} \right.
其中 rr是削波函数,手动设置,一般为r=2σδr=2{\sigma}_\delta

σδ=media|σi|0.6745

{\sigma}_\delta=\frac{media|\sigma_i|}{0.6745}
RANSAC算法RANSAC算法
相继丢弃离群值,通过随机选择的最少数量的点来构造一个解。

2. 圆拟合

ε2=∑i=1n((ri−α)2(ci−β)2−−−−−−−−−−−−−−√−ρ

{\varepsilon}^2 = \sum_{i=1}^n(\sqrt{(r_i-\alpha)^2(c_i-\beta)^2}-\rho
也可以加入权重,和使用 RANSAC算法RANSAC算法

3. 椭圆拟合

椭圆的隐式方程:

αr2+βrc+γc2+δr+ζc+η=0

{\alpha}r^2+{\beta}rc+{\gamma}c^2+{\delta}r+{\zeta}c +\eta=0

β2−4αγ=−1

{\beta}^2-4{\alpha}{\gamma}=-1

4.将轮廓分割为直线、圆和椭圆

直线拟合:
Rammer算法对轮廓进行递归细分,直到得到的全部线段到各自对应的轮廓段的最大距离小于用户设置的阈值
实际应用:
先以亚像素准确度提取边缘,然后用Rammer算法以多边形对提取后的边缘进行逼近。
将轮廓分割为直线和圆的算法分为两类:
1.将那些与明确实体相对应的轮廓上的断点识别出来
2、一开始将轮廓分割成直线,第二步检查过度分割线段能否被合并成圆或者椭圆。

9.摄像机标定

10.立体重构

11.模板匹配

模板匹配
应用场合:
1.完整性检测2.物体识别3.确定目标物体的位姿

1. 基于灰度值的模板匹配

2.使用图形金字塔进行匹配

3.基于灰度值的亚像素精度匹配

4.带旋转与缩放的模板匹配

对搜索空间离散化:创建多个方向的模板
更大的模板使用更小的步幅,更小的模板使用更大的步幅

5.可靠地模板匹配算法

图像的边缘很少收光线变化的影响,但是边缘提取时存在如何选择合适的阈值的问题,这就是为什么需要匹配算法足够可靠地能够处理遮挡和混乱的情况。
边缘匹配策略:
1、我们可以在匹配中使用原始的边缘点,或者增加每个点的一些特性。
2、将边缘分割为多个几何基元,然后在图像中匹配这些分割得到的几何基元
3、基于边缘的分割,我们可以得到边缘的突变点然后匹配这些突变点。
边缘匹配算法的类别:
1、基于模板边缘与图像边缘的距离
2、基于相似度量
几何哈希法

机器视觉算法与应用读书笔记(算法)相关推荐

  1. 《算法导论》读书笔记(七)

    <算法导论>读书笔记之第16章 贪心算法-活动选择问题 前言:贪心算法也是用来解决最优化问题,将一个问题分成子问题,在现在子问题最优解的时,选择当前看起来是最优的解,期望通过所做的局部最优 ...

  2. 读书笔记 -- 算法入门

    14天阅读挑战赛 努力是为了不平庸~ 算法学习有些时候是枯燥的,这一次,让我们先人一步,趣学算法!欢迎记录下你的那些努力时刻(算法学习知识点/算法题解/遇到的算法bug/等等),在分享的同时加深对于算 ...

  3. 《算法图解》读书笔记

    这是一本很入门的算法书,介绍的东西还算简单明了,大体补充了一些自己没理解的东西. 粗略地看了一下,感觉还是"纸上得来终觉浅,绝知此事要躬行!" <<算法图解>&g ...

  4. 《算法图解》读书笔记—像小说一样有趣的算法入门书

    前言 学习算法课程的时候,老师推荐了两本算法和数据结构入门书,一本是<算法图解>.一本是<大话数据结构>,<算法图解>这本书最近读完了,读完的最大感受就是对算法不再 ...

  5. 《算法图解》读书笔记(二)

    第六章--图--广度优先搜索 1.解决最短路径问题(shortest-path problem)的算法被称为广度优先搜索(breadth first search). 2.图由节点(node)和边(e ...

  6. 《算法导论》读书笔记--第三章 函数的增长

    好长时间了,继续算法导论. 当输入规模足够大时,并不计算精确的运行时间,倍增常量和低阶项被舍去.我们要研究的是算法的渐近效率,即在输入规模无限量时,在极限中,算法的运行时间如何随着输入规模的变大而增加 ...

  7. 《基于压缩传感的匹配追踪重建算法研究》读书笔记

    基于压缩传感的匹配追踪重建算法研究 1.压缩感知与传统数据获取和处理过程比较: 压缩感知理论表明,在对信号获取的同时,就对数据进行适当的压缩. 传统的数据获取和处理过程主要包括:采样.压缩.传输.解压 ...

  8. 《算法导论》读书笔记--第1、2章课后题 (转)

    第一章   转自http://www.cnblogs.com/batteryhp/p/4654860.html 思考题 1-1(运行时间的比较)确定时间t内求解的问题的最大规模. 上面是网上提供的答案 ...

  9. 《算法导论》读书笔记之第1章 算法在计算机中的作用

    本章是本书的开篇,介绍了什么是算法,为什么要学习算法,算法在计算机中的地位及作用. 算法(algorithm)简单来说就是定义良好的计算机过程,它取一个或一组值作为输入,并产生出一个或一组值作为输出. ...

最新文章

  1. 工程名.xcodeproj 里面的project.pbxproj
  2. Socket_send函数和recv函数详解
  3. 队列工厂之RabbitMQ
  4. java table集合_Java集合类汇总记录--guava篇
  5. 如何在Java中找到整数的质因数–因式分解
  6. 均方根误差有没有单位_装载机电子秤的功能特点以及误差的解决办法
  7. easyui日期控件datebox的onchange事件
  8. java连接mysql数据库 R_Java连接Mysql数据库详细代码实例
  9. Android 应用程序获得系统权限
  10. 2021.1.6寒假打卡Day3
  11. 焊接入门——基础知识整理
  12. PS马卡龙渐变海报制作教程
  13. LDF转Excel;LDF转位定义;Excel转LDF;Excel转位定义;MatrixCreat(四)之工具使用
  14. 18年华为没有1项原创发明
  15. js问题之判断是否是火狐、IE浏览器
  16. 给Web应用更换公众号步骤
  17. 如何使用SFC / SCANNOW修复Windows系统文件
  18. 北京科技大学计算机考研专业课计算机综合一871分享
  19. phantomjs html2Image.js 网页转换图片
  20. elment ui table 点击上下移动表格

热门文章

  1. linux下电路仿真软件下载,Linux下电路仿真.pdf
  2. 二叉树后序遍历非递归算法(详解)
  3. 关于ETD.sys的系统蓝屏问题的解决
  4. c语言判断非法字符题目,C语言考试题库之判断题-c语言考试判断题
  5. 内容制作新纪元:AIGC技术的革命性影响
  6. MES系统中常见的数据采集方法
  7. python3类型转换
  8. python学习手册教程_python学习手册:如何学习python学习教程?
  9. 鸿蒙os桌面怎么布局好看,桌面布局怎样才好看?OriginOS出手,带来百变玩法
  10. windows保护无法启动修复服务器,如何解决win10“Windows资源保护无法启动修复服务”错误 | MOS86...