圣光机CV计算机视觉课堂笔记

学习笔记

Posted by BY CGH on March 20, 2026

致后来人:

本笔记主要目的是个人记录,并且主要基于个人理解和PPT内容而编写,因此会有相当程度的简略以及不可避免的纰漏。请勿苛责,以上。

前言

上学期的图像处理,这学期进阶到计算机视觉了。顿觉有必要已学,因此记录笔记如下:

第一节课

主要做引言,展示了各种CV的实现,其中比较有意思的是YOLO的全名和vslam,以及一些生草的图片。 课程大纲如下:
·引言
·图片分类
·图像分割
·物体检测
·霍夫变换 ·人脸检测
·图片特色
·图片搜索
·物体描述
·深度学习
·特征描述符
·神经网络
·机器学习导论
·卷积神经网络
·分类

第二节课

主要是讲图像分割。 图像分割主要是有两种,根据语义和根据实例等。这里先关注整个流程: 首先CV会把图像分成很多个小块

比如说以PPT里的老虎例图为例子 预分割把虎皮、草地、猎物等先分成很多小块(superpixels)。 合并阶段会逐步把相似的小块合并成更大的区域,理想结果是把“整只老虎”合并成一个区域、把猎物合并成一个区域、背景合并成若干区域。 Pred 应该能区分老虎条纹与背景(例如使用颜色+纹理),并且不能把老虎和猎物错误合并(因为合并后不满足 Pred)。

分割的定义:

把整张图片视为集合R,把 R 划分成若干连通区域 {R_i}, i=1..n,每个区域都要符合三个性质:

  • 覆盖性: 所有子集和并集等于R。
  • 互斥性: 所有子集没有并集
  • 区域内部齐性: Pred(R_i) = TRUE Pred(R) 是一个布尔函数:对某个区域 R 返回 True 或 False。True 表示“这个区域内部在我们关心的特征空间上是同质的(homogeneous)”,False 表示“不够同质”。 “同质”由你选择的特征和判据决定(颜色、纹理、边界强度、深度、语义置信度等),因此 Pred 本质上是把复杂判定压成一个“是否满足”决策。
  • 极大性: 两个不同区域的并集不满足齐性。

金字塔式迭代结构

正如上文,图片被划分成若干个集合,金字塔尖便是整个图片,越向塔底划分的越多,像素细粒度越高(每个集合包含的像素越少)。在这个过程中,如果某一层的某个区域被判断为“异质”(不满足齐性判定 Pred),就把它细分成 4 个子区域(典型的四叉划分),推到下一层。反之,如果在某一层存在四个相邻且“近似同质”的子区域(或若干邻域满足合并准则),则它们可以合并为上层的一个更粗区域(自底向上合并)。 在一次迭代中,可能先合并满足条件的区域,再在下一步或同一轮中对合并后或原有区域做分裂判断,交替优化分割结构,得到一个层次化且更稳定的分割结果。

分割方法

阈值分割(Thresholding,包括单阈值、多阈值、范围阈值) 单阈值就是用一个亮度来确定是否分割,显然只能二值化区分(意义何在?)

基于直方图的阈值选择(例如峰间阈) 用灰度直方图寻找谷值/峰间点作为分割阈。 k-means(基于簇的像素聚类) Weber (韦伯)分割(基于 Weber 函数/视觉差异感知的分级分割) Vezhnevets迭代分割 然后还有一个很地狱笑话的按肤色分割 纹理分割:纹理分割的思想是通过三种方法判断这些像素属于哪种纹理,然后进行分割。这三种方法是: 统计: 结构: 频域: 这里有几个公式, 对于某个滑动窗口内的所有像素的灰度值zi,乘以概率p(zi)再求和,就能得到平均亮度(如果你把公式展开,就是ax/(a1+a2+a3+…an)=ax/N=px(zi),a1ZI * p1(zi)+a2ZI * p2(zi)+……..anZI * pn(zi)=a1 * a1ZI+…a2 *a2ZI/N,也就是算术平均数。 p(zi) 就是灰度值 zi 在某个区域(全图或局部窗口)内出现的归一化直方图——也就是把某灰度的像素个数除以该区域像素总数,得到该灰度出现的概率。这个被称为 平均亮度。 n 阶中心矩 μ_n(z): μ_n(z) = sum_{i=0}^{L-1} (zi - m)^n * p(zi)

R = 1 - 1/(1 + σ^2(z)),这个是相对平滑度,就是方差有关的。R越近1越粗糙,越接近0越平滑。

之后便是之前用过的淹没/围坝法。一样是把灰度的亮度算作高度,然后往里面注水(就是淹没某个高度以下的像素),然后水线之间的分水岭,水线以下的谷底最低点,水线以下的最低点到水线位置的像素,均为一个 ai解释如下:

  • local minima(局部最小):局部洼地底部像素,代表一个“集水盆”。每个极小值对应一个初始区域(catchment basin)。
  • located on a slope(位于坡面):从这些像素上的“水流”会单向汇入同一个局部极小值,所以它们属于该极小值对应的盆地内部。
  • local maxima(这里的表述有点易混淆):幻灯片把“能把水流向多个局部最小值的像素”称为 local maxima,实际含义是“分水岭像素 / 岭线像素”——这些位置上水分流会分叉,定义了不同盆地之间的边界(watershed)。
  • 像素的划分是通过“从已知种子(局部最小)向外扩展”来完成的,扩展按像素高度(灰度或梯度)从低到高进行。每次处理一个未标记像素时,检查它已处理邻居的标签:如果只有一个标签就把该像素归入该区域;如果邻居包含多个不同标签就把该像素标为分水岭(边界) 最后是IBR探测器,图里讲的很清楚了就不赘述了,大概就是沿着射线剖面找极值 alt text MSER检测器,这个应该是效果最好也最复杂的,可能不重要,略过了

第三节课

上节课介绍了分割方法,我们得到了不同分类的一组一组的点及其边界,因此这节课主要针对这些分割出来的点做处理。 轮廓链码(Freeman chain code)是一种编码方式,他先从一个像素出发,规定像素左上角,左下角,右上角右下角左右上下的每个相邻格子都有一个对应的数字,然后记录下一个像素对应的位置数字,再重复这个过程,直到遍历完每一个像素 显然不是很好用,依赖于起点,对噪声敏感,没有旋转不变性。 多项式拟合,这个高中就学过了,但是我忘了(),总之就那个原理,但是很多曲线压根就不是一个函数,显然不是很好用 分段线性逼近,把多个点分段用直线表示,显然会导致精度降低 样条拟合(spline):就是以上的分段线性逼近的另外一种说法。但是不光使用一次多项式(直线)而是综合了多种函数与平滑等
线性样条:把相邻点用直线连起来,最简单但不平滑(角点处有折角)。
三次样条(cubic spline):每段是三次多项式,通常能保证函数及一二阶导数连续,曲线平滑常用。
B-spline / 基样条:用基函数和控制点来表示,局部控制性好(改一个控制点只影响局部形状)。
有理样条(rational spline / NURBS 是其广义形式):通过权重(分母参数)能更好表示复杂曲线和精确圆弧等。

自然曲线拟合:
若曲线以某参数 t(或常用的弧长 s)表示为 (x(t), y(t)),曲率的通用表达为:
$ K(t) = \frac{x’(t)\,y’‘(t) - x’‘(t)\,y’(t)} { \bigl( x’(t)^2 + y’(t)^2 \bigr)^{3/2} } $

特别地,若以弧长 s 为参数(速度恒为 1),则分母为 1,公式简化为:

$ K(s) = x’(s)\,y’‘(s) - x’‘(s)\,y’(s) $

以上,我们将区域边界成功划分了出来。现在我们要做的事就是理解这个边界的特点:

霍夫变换

我可能旷了几节课,所以就不按课堂顺序编排了,梦到哪写到哪。
霍夫变换,是一种把图像空间的点映射到参数空间,用“投票/累加”方式在参数空间寻找具有一致参数的几何形状(例如直线、圆等)的算法。它能从噪声或不连续边缘中全局地检测出参数化的形状。 它主要的思路就是,找到满足给定条件的点的轨迹,然后求所有轨迹的交集 比方说,你有三条线段,要将其组合成一个三角形。 我们得到的条件有: 线段长度 三角形 那么你就可以沿着一条线段的两个端点,画两个边长为另外两个线段的圆, 这两个圆的轨迹上的点就获得“一票”。两个圆的交点也就是两票,正如PPT上所言————
“ 在圆圈交汇处有两个“投票”;在这种情况下,该点“获胜”,因为它获得了最多的“票数” ”
————
又如,我们要从三个点产生一个圆。回顾我们的初中/小学知识,垂直平分线到两端点距离相等,因此我们可以使用这个条件来获取我们的“轨迹”————三个点之间连线的垂直平分线,然后取其交点(投票最多的点)来获取圆。
$ Y = kX + b $
$ X \cos\theta + Y \sin\theta = \rho $ 后面有节测验问你这个向量维度是多少,显然这里只用了两个参数,p和$\theta$ 至于为什么能表征成这个参数化函数,我是想说去问张琳的(笑)(毕竟助教也叫张琳),但是为了后面的理解还是略微讲下:
这个p,就是原坐标系下,原点到给定直线的距离。$\theta p$就是给定直线的法线与x轴的角度。 也就是说,对于给定的点x,y,有一条直线经过这个点,这个直线的参数p,$\theta$符合一个固定的方程,这个方程在参数坐标系下类似一个二次曲线。 这样,我们就得到了“轨迹”。对每个点都做一次这样的参数化操作,我们会得到一系列参数曲线,对他们取投票操作,即可得到经过这些点的直线。 最后,我们可以引入累加器$A(p,\theta)$,其表示 一个离散的多个小方格区间,然后遍历每根曲线,如果曲线经过这个区间,那么将这个区间的票数加一。

“参数空间(ρ, θ)不是连续无限精细地计算每一个点,而是把参数空间划分成离散的格子(称为 accumulator cells,累加器单元)。每个单元保存一个计数(投票数),代表落在该参数区间内的支持程度。”

PPT里建议先做个提取边缘的处理,因为霍夫变换基本上只运行一次,有用的像素越少计算负担越小。

For each edge point (x,y)
For θ = 0 to 180
ρ = x cos θ + y sin θ
H(θ, ρ) = H(θ, ρ) + 1
end
end