[计算机视觉(本科) 北京邮电大学 鲁鹏]笔记
第一课:
引言,计算机视觉跨学科。目标:从像素到内容(意义)。语义鸿沟。
人类视觉系统的优势(脑补、理解)和劣势(容易被欺骗)。是否需要根据人类视觉系统研究计算机视觉系统,可以研究,实现方式不一定要一样,如:鸟和飞机。
传说起源:1966年MIT本科暑期项目。先驱:David Marr,1、计算理论;2、表达和算法;3、硬件实现。
图像信息:1、三维信息;2、语义信息。
各种应用。
第二课:
卷积。
图像类型:二值、灰度、彩色。
图像去噪(降噪):周围点加权平均,用的就是卷积核,如果是平均操作,那么权重全部相同。卷积前卷积核需要翻转180°。
卷积特性:线性性、平移不变性、交换律、结合律、分配率、数乘、单位脉冲卷积结果不变。
卷积输出的大小:Matlab中:full、same、valid。
用于锐化:锐化结果 = 原图 + 高频信号 = 原图 + (原图 - 低频信号) = 2原图 - 模糊的原图
平均的劣势:振铃效应,因为模板是方的。解决:用(归一化后的)二维高斯函数。Gσ=12πσ2e−x2+y22σ2
方差σ越大越模糊。
经验法则:设置窗宽的一半为3倍σ。
高斯滤波:1、低通滤波器,滤除高频信号;2、用两次相同高斯滤波器等效用一次方差为√2σ的高斯滤波器;3、高斯核可以分解:Gσ=12πσ2e−x2+y22σ2=(1√2πσe−x22σ2)(1√2πσe−y22σ2),可以降低运算的时间复杂度。
噪声:椒盐噪声(黑白)、脉冲噪声(白)、高斯噪声(每一点都有、适用于标准差小、独立、零均值)f(x,y)=ˆf(x,y)+η(x,y)。
高斯滤波器用于滤除高斯噪声时,方差越大,噪声抑制效果越好,但会使图像模糊。
椒盐噪声用高斯滤波器效果不好,还是会有扩大的黑白点,选用中值滤波。中值滤波不是线性滤波。
单位脉冲 - 高斯 ≈ 拉普拉斯高斯(LoG)
边缘检测。
想法:边缘紧凑表达图像,通过边缘线条理解图像。
产生边缘:1、物体表面不连续;2、深度不连续;3、表面颜色不连续;4、光照不连续。都是图像灰度迅速变化——通过梯度、导数得到。
由于离散,导数可以用卷积来做。梯度:∇f=[∂f∂x,∂f∂y],方向:θ=tan−1(∂f∂x/∂f∂y),幅值:‖。有时实际便于计算幅值采用 \left \| \nabla f \right \|=\frac{\partial f}{\partial x} + \frac{\partial f}{\partial y}。
第三课:
其他提取边缘算子:Prewitt、Sobel、Roberts。(边缘提取算子的和为0)
由于存在噪声,一般在边缘提取前先降噪,即先降噪后求导,而这一操作等价于与求导后的高斯核卷积:\frac{d(f*g)}{dx}=f*\frac{dg}{dx}。
Canny算法:1、高斯偏导滤波提取边缘;2、非极大抑制,使沿梯度方向边的厚度变为1像素;3、使用双阈值,高阈值留下真实边缘,低阈值补上“与高阈值留下来的边有连接的”边。
拟合。
拟合直线:1、若所有点都属于线段:最小二乘拟合;2、若直线外有干扰点、噪声点:Robust拟合或RANSAC;3、若有多条直线:投票的方法:RANSAC或霍夫变换;4、不一定是直线:snake。
最小二乘:列方程,求最小值。(一顿求解)竖直线失效解决方法:全最小二乘,使用点到直线距离代替沿y轴方向的点到直线距离(点(x_i,y_i)到直线ax+by=d的距离为\left | ax_i+by_i-d \right |)。可以等价建模为极大似然估计,沿真实直线的法向偏离程度符合高斯分布。
当有偏离较大的外点时(全)最小二乘效果不好,会被拉偏,此时使用鲁棒的最小二乘。点到直线的距离的损失使用非线性变换\rho (\mu;\sigma)=\frac{\mu ^2}{\sigma ^2+\mu ^2},其中\mu是点到直线距离,\sigma是控制参数。\mu较小时接近线性递增,\mu较大时候会饱和,不再增加。抑制偏离较大的外点的影响。
第四课:
RANSAC(Random Sample Consensus)。
随机采样一致性,步骤:1、随机选择一个小的点的子集;2、用该子集拟合;3、用子集外的点给拟合结果投票(计算距离,阈值内的为有效);4、重复上述步骤。
参数:对于直线检测:s:子集点的数量(通常为拟合所需最小数量,直线为2点);t:距离阈值;N:重复次数。(1-(1-e)^s)^N=1-p,其中e为直线外的点的比例,1-p为出错的概率。可以反推所需采样次数:N=\frac {{\rm log}(1-p)}{{\rm log}(1-(1-e)^s)};d:阈值,最后结果获得的最小投票数,不采用选取最大票数的直线时这个参数可以用于选择多条直线。由于外点率e是未知的,使用迭代的计算方法:迭代更新N和e,详略。
RANSAC优点:简单、通用、效果好;缺点:需要调参、内点数少效果不好、难得到好的初值。
RANSAC可以应用在很多其他场景。
霍夫变换。
投票的思想,坐标空间到参数空间的变换,对于直线:坐标空间一点在参数空间上是一条直线,参数空间上一点在坐标空间上是一条直线,坐标空间上一条直线在参数空间上是很多条直线汇聚的一点。实际操作中使用极坐标代替笛卡尔坐标用于解决竖直和参数空间太大的问题。投票可以在格子之间加权投票,也可以结合其他信息来投票,如梯度方向。
圆霍夫变换:参数空间是三维的。
第五课:
通用化的霍夫变换。
霍夫变换优点:可以处理遮挡、可以处理多个对象、对噪声有一定鲁棒性(因为投票);缺点:复杂度随参数增加迅速增加、没有特定形状也会产生峰值响应、方格大小的不好选取。
局部特征。
各种应用:全景拼接、三位重建、目标跟踪等。步骤:提取特征,匹配特征,对齐。
好特征:可重复性、显著性、计算高效性、局部性。
角点:角点附近的图像梯度有两个或以上的主方向,角点是可重复和显著的。
角点检测:基本思想:无论沿哪个方向移动一个小窗口,灰度值都应该有明显变化。u, v是平移量,E(u, v)是窗体灰度值变化量,想知道u, v的变化如何影响E(u, v),这样就可以判断是否是角点。在(0, 0)点进行泰勒展开,建立u, v与E(u, v)的关联。一顿计算,得到\lambda_1和\lambda_2,这两个值都不为(接近)0,则认为是角点。
Harris角点检测算法:1、每像素计算高斯梯度;2、使用高斯窗口计算二阶动量矩阵M;3、计算R值;4、R值阈值;5、非极大抑制。
Harris角点检测特性:标准:1、Invariance:图像变化,检测到的点不变;2、Covariance:图像有两种不同变化,两种变化后的图像检测到对应的点。对仿射变换(由于光照变化导致的灰度值同步抬升、下降)有一定的不变性,因为阈值的存在可能失效(如:在对比度增大时)。平移可以,旋转可以(但丢失方向),缩放不行(不具备尺度不变性)。
第六课:
Blob检测,用于解决Harris角点检测中不具备尺度不变性的问题。
思路:对同一个目标点,使用目标点邻域内的像素进行计算,计算结果有随邻域的半径变大而先变大后变小(有最值),不同尺度下都成立的话,那么就可以知道尺度了。现在需要寻找这种“计算”。
启发:高斯二阶导对窗口信号进行卷积,随着窗口大小的改变,最值也会随之变化,即高斯二阶导的方差和特定大小的窗宽“匹配”。实际使用时,由于方差的增大得到的响应会变小,因此需要在结果乘以方差予以补偿(实际使用的是二维的,因此乘以方差平方)。
推导尺度(窗宽)和方差的关系:画图好理解,正好套住,正的部分乘以1,负的部分乘以0。结论:最大响应时\sigma =\frac{r}{\sqrt{2}}。
全图都跟不同方差的高斯二阶导做卷积,一个方差(尺度)得到一张图,找相同坐标不同层的最大值,实际可能每隔3层找一个最大值,这样一个位置可以对应大于一个尺度,另外相邻位置之间还要进行非极大抑制,使用寻找邻域内26个点包括本身一共27个点的最大值作为响应,同时实现确定尺度和非极大抑制。
但是这样做太慢了,解决方法:1、Harris-Laplacian,Harris找点,拉普拉斯确定尺度;2、SIFT。
SIFT:DoG,构建金字塔,不同的小图确定特征点尺度,乘以系数恢复特征点的实际尺度,提高效率。大图检测小的,小图检测大的,因为相同方差在小图检测到的特征要等比放大回原图大小。
第七课:
高斯二阶导有尺度选择特性。
拉普拉斯响应对旋转和缩放具有不变性,检测到的位置和尺度对旋转和缩放不具有不变性。对灰度值变化
视角变换(仿射变换)的解决:迭代计算特征点处最大和最小特征值,直至两个特征值相近(变成椭圆)。
至此,找到的特征点内容一致,但是角度不同。继续,使用邻域每个像素的梯度方向直方图,分8个bin,统一使最高的方向指向同一个方向(如:右边),这样就使方向归一化了。
至此,尺度、视角、方向都解决了。描述符:把经过上述处理的特征点邻域分为4\times 4的区域,每个区域分别计算分为8个bin的梯度直方图。
为什么不使用全局而分为4\times 4,匹配更准确。
匹配时,比较最大的响应值和次大的响应值之间的差距,如果差距大,说明是真匹配,如果差距小,则不匹配。
纹理。
用法:分析、合成。
使用纹理进行分类。由于纹理是由重复的局部模式组成的,因此:1、找到这种模式;2、在局部窗口内描述他们的统计特性。
方法:使用不同方向的高斯偏导核进行卷积,响应值作为坐标(不同区域表示不同的纹理),距离相近的为相同(或相近)的纹理。
上述方法有尺度问题,先做实验确定窗口大小。
实际不只使用2个滤波器,用d个滤波器,生成d维的响应。给出的例子有48个卷积核(filter bank),其中包括尺度、旋转、区分边缘和棒和点这几个特点。(有点像卷积神经网络的第一层,有很多个卷积核,分别学习到不同的东西)
纹理分析的一个例子:用不同卷积核对图像进行卷积,每个卷积核得到的结果取平均值作为这个图像的响应,这些响应值可以描述纹理的特征。也可以不取平均,而每个点都用d维来描述。
用上述方法得到的特征就可以用来区分不同纹理了。用支持向量机。可以用于图像检索、场景分类、图像分割。
总结:纹理是很有用哒。
第八课:
图像分割。目标是把相似的像素划分到一起以便后续处理使用。
问题:过分割、欠分割。
方法特点:自底向上、无监督。
心理学的启发:Geatalt因子:近邻、相似、相同命运、相同区域、平行、对称、连续、闭环。
把分割作为一个聚类问题。假设:把相似的像素视为一个物体(RGB值)。
语义分割、实例分割的区别:前者只需知道像素属于哪一类,后者还需知道像素属于同一类的哪一个。加入坐标(RGBXY)。
1、K均值方法,优点:简单、收敛到局部最小值;缺点:需要大内存、需要选择K、对初始化敏感、对外点敏感、仅能对球形区域聚类。
2、Mean shift,找模式或者特征空间的局部最大值。不断移动框选的圆,直至不再可以移动,移动的依据是新的圆心移动至圆内元素的重心。用于分割的思想就是所有像素作为起点,最终都会落到有限的几个位置,那么最终落到相同位置的起点都属于同一类。而具体选用那些参数作为元素?颜色、梯度、纹理等。优点:不需要假设球形区域、只有一个参数(窗口大小)、自动确定类的数量、对外点有一定健壮性;缺点:输出结果依赖窗口大小、计算复杂度大、高维特征效果不是很好。
3、图
4、纹理
第九课:
识别。
分类问题(返回是否),检测问题(返回区域加信息),分割(像素级分类),语义。
各种应用。
单实例识别(如:支付或解锁时候的人脸识别)和类别识别(如:人脸识别)。
难点:物体种类多、视角变化、光照变化、缩放、形变、遮挡、背景干扰、种内的变化。
表达、学习、应用。
……
第十课:
目标检测。
……
第十一课:
三维重建。
摄像机模型。
摄像机标定。
……
第十二课:
三维重建和极几何。
……好多计算
第十三课:
运动恢复结构(SFM)。
……也是好多计算
第十四课:
……继续好多计算
课程总结。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· 一个基于 .NET 开源免费的异地组网和内网穿透工具
· 《HelloGitHub》第 108 期
· Windows桌面应用自动更新解决方案SharpUpdater5发布
· 我的家庭实验室服务器集群硬件清单