【笔记】增强现实课程
相当于导论或者还不算是的玩意
Image Processing 图像处理
点处理
例如对于一个灰度值矩阵,设计一个关于灰度值的函数,把每一个点值映射成一个新的灰度值
函数例如幂函数(好像叫瑞利函数?。比如取根号函数时,根据函数图像可知它是把灰度值小的“拉伸开”,这有助于增加图像深色部分的辨别程度
又比如灰度值取值比较集中的图像,看起来不太好分辨;用一个把它映射到整个 0 到 255 的斜率大于 1 的一次函数,看起来就比较好分辨了
Convolution 卷积
原图像矩阵 A 通过一个滤波矩阵 (mask) B 做卷积,得到一个新的矩阵 C
卷积方式是:
将 B 放在 A 上,B 的元素值作为权重计算 A 被覆盖范围内的总和,作为 C 的一个元素的值;移动 B 重复做...
(还以为是啥,这也叫卷积???你这不就是加权和吗
比如 \(A(n_1, m_1) * B(n_2, m_2)\) 得到 \(C(n_1-n_2+1, m_1-m_2+1)\),这么说就好理解了
一般 B 是一个 3x3、5x5、7x7 之类的小矩阵
用处是什么?比如去噪声 (noise)
噪声大概就像是取值的波动,每个点的取值是其理想值随机正负一个较小值
当利用卷积卷一下时,例如取 \(B = (\frac{1}{9})_{3\times 3}\) ,我们可以正负抵消掉这个噪声
这种滤波器就相当于低通滤波器,这种称呼感性理解一下就行了吧
当然既然是低通滤波器,你会发现它把原图像的比如“边缘”那种突变的部分给模糊 (averaging) 了,这怎么搞捏
我们注意到这个噪声波动是一个较小的值,边缘的那种突变比这个大多了
这下我们卷积式子不取平均了,我们取中位数,这下两全了
这再一次体现了,卷积的核心是滤波,基本都不依赖计算方法的,所以我们更愿意叫它
Filter Operation 滤波
- Low-pass filter 低通滤波
增加低频部分“模糊化”
比如 1/9[1 1 1; 1 1 1; 1 1 1],1/16[1 2 1; 2 4 2; 1 2 1] - High-pass filter - 高通滤波
增加高频部分“边缘增强、- 噪声增强”
比如 [-1 -1 -1; -1 9 -1; -1 -1 -1],[0 -1 0; -1 5 -1; 0 -1 0],[1 -2 1; -2 5 -2; 1 -2 1]
理解之,低频部分通过时比较好地正负抵消了没什么影响,高频部分拉大了差值 - Sobel Edge Enhancement - Sobel 边缘增强
如 [-1 -2 -1; 0 0 0; 1 2 1],增强了水平方向的边缘;此外类似地还有增强其他方向的边缘,比如竖直方向 [-1 0 1; -2 0 2; -1 0 1] - Shift and Difference Edge Enhancement
[0 0 0; -1 1 0; 0 0 0] 增强竖直方向边缘
[0 -1 0; 0 1 0; 0 0 0] 增强水平方向边缘
[-1 0 0; 0 1 0; 0 0 0] 增强对角线方向边缘 - Laplacian Edge Enhancement
[-1 -1 -1; -1 8 -1; -1 -1 -1] 全方向增强边缘
[0 -1 0; -1 4 -1; 0 -1 0] 增强四个方向边缘
此外还有 [1 -2 1; -2 4 -2; 1 -2 1] 等等
Pattern Recognition (PR) 模式识别
"Pattern" is a set of measurements or observations represented in vectors or matrixs
就是给映射到某个概念上去
Pattern Vector & Pattern Space : 一个模式用一个 d 维向量 \(X\) 刻画,对应 d 个特征 (feature) 的值
PR System :
training set \([v_1, y_1], [v_2, y_2], \dots\), measurement v,target vector y
大概是:
依次把训练样本丢进去,学到调参到认识这玩意为止,依次做下去
为了防止忘掉之前的,时不时随机投喂一个之前的样本
然后你就得到一个
Decision Function 决策函数
\(d(X)\)
至于 d 的函数形式是什么:反正根据样本的特性去考虑,多项式或其他什么的
Linear Decision Function
\(d(X) = (w_0, w_1, w_2, \dots, w_n) (1, x_1, \dots, w_n)^T = W^T X\)
我们现在考虑给样本分分类,如果是分成两种,我们比如可以选择 d 和 0 比大小做判断;如果是分成多种,我们比如可以设定若干个 d,\(d_1, d_2, \dots\),并指定 \((d_1(X)>0?, d_2(X)>0?, \dots)\) 所对应的种类
它的思想来自于二维平面上的若干点,利用几条直线将其分成若干区域
Augmented Reality (AR) 增强现实技术
光学透视、视频透视的头盔显示器 投影 可穿戴设备
摄像机的几何模型和坐标变换
像素坐标系 \(Ouv\) (单位 pixel);
图像坐标系 \(Oxy\) (单位 mm),原点定义为摄像机光轴与图像平面的交点
\(u = [\frac{x}{\Delta x}]+u_0, v = [\frac{y}{\Delta y}]+v_0\)
摄像机成像原理 小孔成像
摄像机坐标系 \(Ox_c y_c z_c\), \(Ox_c y_c\) 原点定义为图像坐标系的中心点,\(Oz_c\) 为光轴
世界坐标系 刻画摄像机在现实空间的位置
最后推出彼此的变换关系,即若干矩阵
摄像机标定
利用摄像机所拍摄到的图像来还原空间中的物体,从世界坐标系→像素坐标系
[像]=M[物],任务即确定 M,然后就可以拿来用了
计算过程略
基于标识的跟踪注册技术
在采集到的图像中识别和跟踪人工标识图像上的特征点
识别→编码→跟踪定位
识别:检测出识别点图像区域
编码:只检测一个点很容易跟丢,设置多个标识点,每个点设一个 id
标识点的特征提取与编码识别
首先二值化变成01矩阵,然后给每个较大的连通块设置 id
以 ARToolkit 为例,大概就是个识别的都是矩形块的玩意?
对于每个连通块,把它的边界提出来(联通区域边界跟踪),做法其实就是当前点周围八个方向找下一个点,绕出一个边界
当我们设定标识点是一个矩形时,在像素矩阵中连通块就是一个四边形,至于怎么判断一个连通块是不是四边形,一种做法是找到最远的一对边界点AB,并在两侧各取距AB最远的点C和D,判断A和C之间的边界点是否都距AC距离为一个可接受的较小值,其余同理
把这个四边形通过矩阵 M 得到的矫正后的像素坐标,再和模板库做比对,从而确定这玩意是什么
感觉我在口胡
标识点图形设计
圆形标识点、环形标识点,图像侵蚀 不管了
此外还有红外标识系统
无标识跟踪注册
初始化
包括指定像素坐标系上四个点以及对应世界坐标系的坐标,算出变换矩阵 M
摄像机位姿估计
基于场景平面的跟踪注册
SIFT 尺度不变特征变换,进行特征点的提取和匹配
先做高斯模糊,就是一个钟形的滤波器,得到原图像的平滑图像
(高斯函数就那个正态分布,\(\sigma\) 越大,钟形越宽,得到的越模糊
尺度空间极值检测:
定义一个图像的尺度空间 \(L(x, y, \sigma) = G(x, y, \sigma) * I(x, y)\),\(\sigma\) 称尺度空间因子,尺度大偏向概貌信息
高斯金字塔的构建:对图像做不同尺度的高斯模糊,并作降采样/隔点采样,\(\sigma\) 越大,隔点采样间隔越大且正比于 \(\sigma\);得到的一个随着 \(\sigma\) 增大、采样图像大小越小的金字塔形状
将金字塔每一层的图像再使用不同参数(对于当前层为 \(\sigma\),以等比 \(k\) 做 \(\sigma, k\sigma, k^2\sigma\dots\))做高斯模糊,得到每一层有若干个大小相同、模糊程度不同的图像,称为一组 (Octave)
即每一组内有若干层
高斯差分 (DoG)
对每一组内,相邻相减:\(D(x, y, \sigma)=(G(x, y, k\sigma)-G(x, y, \sigma)) * I(x, y)=L(x, y, k\sigma)-L(x, y, \sigma)\)
空间极值点检测:
考察关键点,其定义为在一组内,某一层的一个像素点,其是在周围 8 个点、上、下一层各 9 个点共 26 个点中最大的
最大?
由于是间隔采用得到离散曲线,该点有可能只是在实际极点附近,所以要做曲线拟合得到真正的极值点位置;用个 DoG 的泰勒展开什么什么的...
描述符是什么?
他妈的你这讲的还不如我自己去看,效率为负,屑课
突然发现 Slay.one 时隔不知道几年又开服了,好耶
鸽了一阵子,不知道在说啥,是我菜了
不过摸鱼时头一回发现 FFT 可以优化一类卷积的 dp,好耶