第十六周学习笔记
阅读《计算机视觉——算法与应用》
序言
- 提出一个算法在少数几幅图像上使某件事似乎可以做而不是把某件事情做对,这是十分容易的
- 要使算法有效,最理想的途径是使用“三部曲”策略
- 首先,在干净的合成数据上测试算法,因为已知其精确结果
- 其次,在该数据上增加噪声,评价性能是怎样作为噪声水平的函数退化的
- 最后,在正式世界数据上测试算法,优先取自广泛输入源的数据
- 补充阅读材料
第一章 概述
计算机视觉试图做反过程,描述我们从一副或多副图像中看到的世界
本书的一个目的是形成并规约视觉所特有的原本开放性的问题,给出某种开放性问题当前最好的解决方法(在刚入门来看,解决方法有多种)
视觉研究的典型工程方法
- 提出详细的问题定义并决定问题的约束和技术参数
- 试图找到已知有效的那些方法,实现其中一些,评测性能,做出选择
- 在实际可行的测试数据上测试是重要的
计算机视觉的四大任务1
- 图像分类
- 物体检测
- 语义分割
- 视频分析
计算机视觉(CV)和计算机图形学(CG)的区别1
- 计算机视觉输入图像或视频,输出的是对画面的理解
- 计算机图形学输入对虚拟场景的描述,输出的是图像
第二章 图像形成
2.1几何基元和变换
2D点的表示
- 二元组表示, x = ( x , y ) ∈ R \mathbf{x}=(x,y)\in R x=(x,y)∈R
- 齐次坐标表示, x ~ = ( x ~ , y ~ , w ~ ) \mathbf{\widetilde{x}}=(\widetilde{x},\widetilde{y},\widetilde{w}) x =(x ,y ,w )
- 非齐次坐标表示, x ˉ = ( x , y , 1 ) \mathbf{\bar{x}}=(x,y,1) xˉ=(x,y,1), x ~ = w ~ x ˉ \mathbf{\widetilde{x}}=\widetilde{w}\mathbf{\bar{x}} x =w xˉ,可以与直线的其次坐标表示点乘获得直线方程
2D直线的表示
- 齐次坐标表示
l
~
=
(
a
,
b
,
c
)
\mathbf{\tilde{l}}=(a,b,c)
l~=(a,b,c),与点的其次表示联立可得
x ˉ l ~ = a x + b y + c = 0 \mathbf{\bar{x}}\mathbf{\tilde{l}}=ax+by+c=0 xˉl~=ax+by+c=0 - 规范化直线方程 l = ( n ^ x , n ^ y , d ) = ( n ^ , d ) \mathbf{l}=(\hat{n}_x,\hat{n}_y,d)=(\mathbf{\hat{n}},d) l=(n^x,n^y,d)=(n^,d),其中 ∥ n ^ ∥ = 1 \| \hat{\mathbf{n}}\|=1 ∥n^∥=1
- 可以将 n ^ \mathbf{\hat{n}} n^表示为旋转角度 θ \theta θ的函数, n ^ = ( cos θ , sin θ ) \mathbf{\hat{n}}=(\cos\theta,\sin\theta) n^=(cosθ,sinθ),这种表达通常用于霍夫变换检测直线的算法
齐次坐标下的一些计算
直线l1和l2的交点
x ~ = l ~ 1 × l ~ 2 \widetilde{x}=\tilde{l}_1\times\tilde{l}_2 x =l~1×l~2
连接两点的直线
l ~ = x ~ 1 × x ~ 2 \tilde{l}=\tilde{x}_1\times\tilde{x}_2 l~=x~1×x~2
2D圆锥曲线
使用齐次表示
x ~ ⊤ Q x ~ = 0 \tilde{x}^{\top}Q\tilde{x}=0 x~⊤Qx~=0
3D点的表示
- 二元组表示, x = ( x , y , z ) ∈ R \mathbf{x}=(x,y,z)\in R x=(x,y,z)∈R
- 齐次坐标表示, x ~ = ( x ~ , y ~ , z ~ , w ~ ) \mathbf{\widetilde{x}}=(\widetilde{x},\widetilde{y},\widetilde{z},\widetilde{w}) x =(x ,y ,z ,w )
- 非齐次坐标表示, x ˉ = ( x , y , z , 1 ) \mathbf{\bar{x}}=(x,y,z,1) xˉ=(x,y,z,1), x ~ = w ~ x ˉ \mathbf{\widetilde{x}}=\widetilde{w}\mathbf{\bar{x}} x =w xˉ,可以与直线的齐次坐标表示点乘获得平面方程
3D平面的表示
- 齐次坐标表示
l
~
=
(
a
,
b
,
c
,
d
)
\mathbf{\tilde{l}}=(a,b,c,d)
l~=(a,b,c,d),与点的其次表示联立可得
x ˉ l ~ = a x + b y + c z + d = 0 \mathbf{\bar{x}}\mathbf{\tilde{l}}=ax+by+cz+d=0 xˉl~=ax+by+cz+d=0 - 规范化直线方程 l = ( n ^ x , n ^ y , n ^ z , d ) = ( n ^ , d ) \mathbf{l}=(\hat{n}_x,\hat{n}_y,\hat{n}_z,d)=(\mathbf{\hat{n}},d) l=(n^x,n^y,n^z,d)=(n^,d),其中 ∥ n ^ ∥ = 1 \| \hat{\mathbf{n}}\|=1 ∥n^∥=1
- 可以将 n ^ \mathbf{\hat{n}} n^表示为旋转角度 θ \theta θ的函数, n ^ = ( cos θ cos ϕ , sin θ cos ϕ , sin ϕ ) \mathbf{\hat{n}}=(\cos\theta\cos\phi,\sin\theta\cos\phi,\sin\phi) n^=(cosθcosϕ,sinθcosϕ,sinϕ),这种表达不如极坐标表达更常用,因为这并没有在可能的法向量空间中均匀采样
关于均匀采样的问题
为什么在二维中以旋转角表示法向量就是均匀采样,在三维中就不是呢?以下是个人见解
对于这个问题,首先需要定义所谓的“法向量的均匀采样”,二维上,所有的法向量在单位圆上,均匀采样就是
- 直观来说,法向量在每个位置的概率是相同的
- 微观来说,法向量在每个点的概率密度是相同的
- 宏观来说,法向量落在在相同长度的圆弧上的概率是相同的
对于第三种说法,举个特殊的例子说,就是取到的法向量在上半圆弧上的概率和在下半圆弧上概率相同,对于其他任意等长的圆弧也是如此。
而我们采样法向量是通过采样角度(参数)间接(二维 θ \theta θ,三维 θ \theta θ和 ϕ \phi ϕ)得到的,我们通过采样角度,来采样一个法向量,显然我们对角度是没有偏好的,因此,角度是我们从角度所在的范围(二维 0 < θ < π 0<\theta<\pi 0<θ<π,三维 0 < θ < π , − π 2 < ϕ < π 2 0<\theta<\pi,-\frac{\pi}{2}<\phi<\frac{\pi}{2} 0<θ<π,−2π<ϕ<2π)中进行均匀采样
现在的问题就是:是否角度的均匀采样就是法向量在空间中位置的均匀采样?
先说答案,二维是,三维不是,接下来是解释
2维情况下,对于任意
θ
\theta
θ,法向量为
n
^
=
(
cos
θ
,
sin
θ
)
\mathbf{\hat{n}}=(\cos\theta,\sin\theta)
n^=(cosθ,sinθ),
f
(
θ
)
f(\theta)
f(θ)是
θ
\theta
θ的概率密度函数,有
f
(
θ
)
=
{
q
u
m
m
c
0
<
θ
<
2
π
0
o
t
h
e
r
s
f(\theta)=\left\{qumm \begin{array}{rcl} c & & {0 < \theta < 2\pi}\\ 0 & & {others}\\ \end{array} \right.
f(θ)={qummc00<θ<2πothers
虽然
c
c
c很容易算出来,但是我懒得打
从参数空间出发,对于两个参数区间 [ α , α + Δ θ ] , [ β , β + Δ θ ] [\alpha,\alpha+\Delta\theta],[\beta,\beta+\Delta\theta] [α,α+Δθ],[β,β+Δθ],由于均匀分布, θ \theta θ落在这两个区间中的概率是相同的,而这两个区间又对应单位圆上的两段等长圆弧,由于任意性,可得法向量落在等长的圆弧上的概率相等,因此,二维情况下,法向量的角度表示是空间上的均匀采样
对于三维情况,均匀采样的第三条就变成了,法向量落在相同面积的单位球面上的概率相等,然而使用角度vixm表示法向量时,事实不是这样,首先,参数的概率密度为
f ( θ , ϕ ) = { c 0 < θ < 2 π , − π 2 < ϕ < π 2 0 o t h e r s f(\theta,\phi)=\left\{ \begin{array}{rcl} c & & {0 < \theta < 2\pi,-\frac{\pi}{2}<\phi<\frac{\pi}{2}}\\ 0 & & {others}\\ \end{array} \right. f(θ,ϕ)={c00<θ<2π,−2π<ϕ<2πothers
依然从参数空间开始,我们取两个相等大小的矩形区域 [ 0 , 2 π ] × [ 0 , π / 4 ] [0,2\pi]\times[0,\pi/4] [0,2π]×[0,π/4], [ 0 , 2 π ] × [ π / 4 , π / 2 ] [0,2\pi]\times[\pi/4,\pi/2] [0,2π]×[π/4,π/2],由于均匀分布,我们取得这被两个区域参数化的法向量的概率是相等的,然而,在单位球上,这两个区域分别参数化了单位圆 z z z轴正半轴的 z = 1 2 z=\frac{1}{2} z=21以上和以下的部分,这两个部分的表面积显然不等,但是我们获得这两个部分中的法向量的概率是相等的
因此说明了采样的不均匀
3D直线的表示
- 两点线性组合 r = ( 1 − λ ) p + λ q \mathbf{r}=(1-\lambda)\mathbf{p}+\lambda\mathbf{q} r=(1−λ)p+λq
- 端点表示 r = p + λ d ^ \mathbf{r}=\mathbf{p}+\lambda\mathbf{\hat{d}} r=p+λd^
- Plucker坐标,表达所有可能的直线而不带对方向的偏向
3D二次曲面
x
ˉ
⊤
Q
x
ˉ
=
0
\bar{x}^{\top}Q\bar{x}=0
xˉ⊤Qxˉ=0
2D变换和3D变换
- 平移,保方向
- 旋转+平移,保长度
- 放缩旋转,保夹角
- 仿射,保平行
- 投影,保直线
3D旋转的表示方法
- 欧拉角,将旋转表示为绕基轴的三个旋转的乘积
- 优点:直观
- 缺点:结果依赖乘积顺序,且不连续quxm
- 轴、角,旋转轴和旋转角度表示
- 优点:最小表示
- 缺点:表示不唯一
- 单位四元数
3D到2D投影
- 正交投影和类透视投影
- 正交投影:简单舍弃三维坐标中的某个分量来得到2D的点
- 类透视投影
- 透视投影
- 摄像机内参数
- 焦距
- 摄像机矩阵
- 投影深度
- 从一个摄像机到另一个摄像机的映射
- 以物体为中心的投影
镜头畸变
很多镜头具有明显的径向畸变,直线会被投影成曲线
2.2 广度测定学的图像形成
照明
- 点光源
- 面光源
- 环境贴图
反射和阴影
- 双向反射分布函数,是光线散射最一般的模型,可以分为漫反射和镜面反射
- 漫反射,在所有方向上均匀地分散光线
- 镜面反射,反射方向强烈依赖于外射光的方向
- 补色渲染
- 色散反射模型
- 全局光照(光线追踪和辐射度)
光学
- 色相差,不同颜色的光聚焦于略用不同的距离上
- 虚影,图像的亮度想图像边缘处过滤时会降低
2.3 数字摄像机
摄像机处理步骤
采样与混叠
色彩
- RGB
- XYZ
- Lab
- 彩色摄像机
- 色彩滤波矩阵
- 色彩平衡
- γ \gamma γ
- 其他色彩空间
压缩
第三章 图像处理
3.1 点算子
像素变换
- g ( x ) = a f ( x ) + b g(x)=af(x)+b g(x)=af(x)+b
- g ( x ) = a ( x ) f ( x ) + b ( x ) g(x)=a(x)f(x)+b(x) g(x)=a(x)f(x)+b(x)
- 线性混合算子 g ( x ) = ( 1 − α ) f 0 ( x ) + α f 1 ( x ) g(x)=(1-\alpha)f_0(x)+\alpha f_1(x) g(x)=(1−α)f0(x)+αf1(x)
- 伽马矫正 g ( x ) = [ f ( x ) ] 1 γ g(x)=[f(x)]^{\frac{1}{\gamma}} g(x)=[f(x)]γ1,是图像预处理阶段常用的非线性算子,它可以去除输入辐射量和量化像素值之间的非线性映射,通常取 γ = 2.2 \gamma=2.2 γ=2.2
彩色变换
可以将彩色图像当做多个独立通道来处理,但是,分别在各个通道上增加相同常数以试图增加亮度,最终看到的效果并不好,因此,将图像看作与图像形成过程、传感器设计和人的感知强关联的高度相关的信号才更有意义
合成与抠图
直方图均衡化
直方图均衡化(Histogram equalization)是通过图像的直方图调整图像对比度的方法
局部自适应直方图均衡化,可能导致边缘亮度不连续
应用
点运算的最普片的应用是对照片的对比度或色调进行操作,以使图片看起来更有吸引力或易于理解
3.2 线性滤波
线性滤波算子,主要指用不同的权重结合一个小的领域内的像素
卷积
- 交换性
- 结合性
- 线性不变算子
- 移位不变原理
填塞(边界效应)
当卷积核处于边界时,外部边界由0填充,会导致边界效应,边界处的像素变黑,因此,可以有多种不同的填塞方法
- 0填塞
- 常数填塞
- 夹取填塞
- 重叠填塞
- 镜像填塞
- 延长
可分离的滤波
实现卷积操作需要 K 2 K^2 K2( K K K是卷积核大小)次运算,但很多情况下,使用可分离的卷积核,可以大幅度提升运算效率,二维核可写作其水平核和垂直核的连续卷积
K = v h ⊤ \mathbf{K}=\mathbf{vh}^{\top} K=vh⊤
因此我们更希望设计出可分离的卷积核
线性滤波核实例
- 移动平均、方框滤波器
- 高斯核