计算机器视觉(三)
边缘能够紧凑的表达图像里的内容信息
边的提取使用倒数,为极值的时候为边缘
边缘提取与拟合
另一种定义边缘的方式
Prewitt:对左右点的单点噪声不太敏感,将自身考虑乘0,左右两侧分别是-1和1,否则[-1,1]这种如果单点噪声严重则不准确。
Sobel:将矩阵拆分为两个[1,2,1]T 和[-1,0,1],前面的是高斯核,后面的是边缘提取,也就是说在边缘提取之前先做了一个平滑处理。这个核是可分离的,Sobel算子受到的影响更小。
Roberts:Mx检测的是135度方向的线,而My检测的是45度放方向的线,要看在哪条分界上下有区别。检测模版考虑的方向是和[0,0]垂直的方向。
梯度方向是强度变化最大的方向,和信号方向垂直。
⚠️梯度向量和边之间的关系
幅值的大小可以反应是否是边缘,因为有可能有一个是0⃣️这个时候如果只是用一个那个就是0的话,就不太行了。
如果直接对这个信号进行边缘提取就会出现下面的情况:
解决方法:平滑处理
为啥后面会消失?因为没有对图像边缘进行填充。然后在对这个卷积之后的结果进行求导。一般应用中先使用卷积(平滑)然后和导数模版再进行卷积,但是两次卷积太多。
解决方法:卷积可以交换,可以结合。真正使用的时候使用的是高斯偏导模版或者叫高斯一阶导模版。因为直接使用高斯卷积先平滑处理然后再使用导数模版进行边缘提取会经历两次大规模的卷积处理。而先使用倒数模版对高斯模版进行处理,形成高斯模版的一阶导就相当于卷积一次。使用高斯核求导一下,看一下为啥不好分离?
越白的值在卷积的时候表示权值越高。
上图的pixel指的是方差。通过增大高斯一阶导的方差就会影响边缘提取的效果。要考虑窗框和方差,同上给定方差就能生成窗框也能判断出高斯一阶导。当我们面临新的任务的时候要考虑是更多需要细节还是更多需要更大的轮廓,例如人脸识别如果想要识别出这个人面部的细节就要使用方差较小的高斯一阶导,如果只是想知道这个形体是不是人就要突出它的大体轮廓,就要使用方差大的。知道改变sigma会有什么样的结果
Review:Smoothing vs. derivative filters
高斯滤波核是为了去除高频信号;
高斯滤波核不能为负;
高斯平滑核的和为1,如果不为1,如果接近0相当于对图像信号进行了衰减,比1大相当于把图像信号放大了,改变了图像信号。
高斯偏导核是为了边缘提取;(组合核)
高斯偏导核的值肯定会是负数;(高斯核核那个-1核一卷积)
高斯偏导核的和一定是0,平坦的区域才不会有响应值。
偏导值越高的越可能是边缘但是也不排除是高频的噪声的可能。
经典边缘提取算法:The Canny edge detector
先用高斯模版去噪,然后再设置一个阈值,如果小于这个阈值的也作为噪声去除(二次去噪)
发现边缘宽度增加了,因为在进行二次去噪的时候设定了一个阈值在阈值以上的范围内那个宽度都看作是边缘了,而真正确是中间的那个点,所以边缘宽度会增加。产生这个情况的原因是信号变化是缓慢的,所以不是变化的很快(图像很陡),而且就算是之前很陡经过高斯平滑处理也变得不那么陡了。
如何让宽边变成细边?非最大化抑制
对这张图上的每一个点都计算一下它左边和右边是不是都比它小,这样他才是最大的,算一下每一个点和左右的点的强度,留下强度强的,去掉强度弱的。因为是从梯度方向是提取所以又可能这个像素不在整数的位置上,可以使用这个像素点所在位置的周围四个像素的响应值进行加权求和处理,一般都要这样才能得到最后的这个像素点。
门限过高会导致某些边缘点消失,但是门限变低会导致留下更多的噪声,所以Canny算子又对这个情况进行了改进,使用了一个双门限法。先用高门限把粗旷的边检测出来,然后再将门限降低将那些可能是噪声的边也引入进来,这里面就引入了一个假设:噪声边不会和强边缘的边有连接关系,就可以把那个缺少的不连续的地方补上。
就是一种对高门限和低门限的一种折中。
Canny edge detector的算法具体步骤
首先高斯滤波,然后考虑每个点的梯度强度和梯度方向(是对后面的在这个点的梯度方向进行强度对比的时候会用到),然后先对其进行非最大化抑制细化,最后双门线技术进行处理。
第一步考虑了噪声,第二步用梯度和强度的方式描述了当前点的信息,第三步考虑了过宽的边,第四步启发式连接考虑了忽高忽低的边缘。
PAMI:PAMI是IEEE旗下,模式识别和机器学习领域最重要的学术性汇刊之一。在各种统计中,PAMI被认为有着很强的影响因子和很高的排名。
summary
- 什么是边缘
- 为什么要检测边缘?因为边缘能够更紧凑的表达图像信息
- 边缘该怎么计算?在图像中怎么求导?
- 求导平滑太慢,一次做
- Canny算子:提出了一个非最大化抑制(每个点沿左右梯度进行比较去掉小的),双门线技术
Fitting(拟合)
现在得到已经得到了边界,考虑是否有更好的数学模型来描述这个边界。
拟合的任务是给它一个数学公式能够把这个边缘描述出来。需要这个轮廓的线的明确的表示。
有哪些难点?
- 噪声,可能在这条线上或线下
- 外点,本来就不是属于我的点
- 数据缺失
在考虑一个事情的时候要先考虑我们为啥要做?做之前我们面临了哪些问题?
snake模型:不是明确的有边的模型
Least squares line fitting 最小二乘
最小二乘面临的问题是所有的点都在线上。
沿着纵轴方向不是点到直线的距离。要确定的是m和b的数值,首先要建立一个(能量函数)优化函数,这个优化函数越小这些点离各个点到直线的距离最小。要求一个试这个目标函数最小的m和b。Y的行数是点的个数,每个XB对应的乘积都是每个点对应的方程。
向量模的平方等于向量的转置✖️向量本身,对B求导就是把对B的转置项去掉,但是注意后面的那个项是有两个B,先要提出一个2然后再把B的转置去掉。
Problem with “vertical” least squares
求的还是近似解。最小二乘的问题,如果这条直线是水平的y和x的关系没有办法表示,所以这个公式不能用于垂直,原来的情况有解,镜头一变化就无解了。
全最小二乘:
找最小的特征值对应的特征向量就是N的解。
所有的点在N方向上的投影越短越好,所有的点和均值点的连线在N方向上的投影和越小越好。找一个法向量使所有点与中心点的连线在法向量上的投影值最小。
极大似然估计
二维平面上的几何问题或者理解为一个概率问题
看待一个事情可以从各个角度进行建模。
将噪声点看成是距离中心的高斯分布的问题,如果刚好在直线上就是概率最大的地方,离线上的点偏离越大实际的概率越小,目的就是使这个概率变大才接近线上的值然后使用高斯分布的公式来拟合,再求一下对数,为了使这个式子更大,后面的那一项就应该更小,这个式子和前面的最小二乘的式子是一模一样的。
全最小二乘的方法对于有外点的就不太好。
Robust estimators鲁棒的最小二乘
不直接用点到直线的距离算,使用上面的函数,u就是点到直线的距离,点到直线距离越远影响就不变了,sigma控制的是这个点到直线的距离超过多远之后就不考虑了。sigma叫做尺度参数,越大,那个超过的距离越大。上面的函数最外面的那一层P的变换就是控制超过的地方就不考虑了。
优化的结果
外点的贡献很低,sigma选的太小的话会咋样呢?
基本上就是不在那条线上的 点无所谓远近全都一样了。
越大的话影响越大了。
最小二乘的优化,得到的abd的变换要通过一个非线形变换,所以求解的话就不能通过刚才的特征矩阵的方法求解就要使用迭代的方法求解,梯度下降类方法一开始需要一个好的梯度类下降函数,先不管噪声,先用最小二乘求一个abd,然后把那个abd当成一个起始放在鲁棒的最小二乘里面进行迭代处理。sigma一般取1.5左右。
RANSAC
为啥要拟合?所有的点都在直线上,有一些噪点不在直线上,还有很多噪点的时候就得用RANSAC啥的,多条线的时候可能就是霍夫变换,还有最后的基于模型的snake估计。
先确定问题是什么然后再确定方法