零碎知识点
1.YUV
YUV格式详解
YUV图解 (YUV444, YUV422, YUV420, YV12, NV12, NV21)
YUV,分为三个分量,“Y”表示明亮度(Luminance或Luma),也就是灰度值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),即色彩和饱和度,用于指定像素的颜色。
YUV不像RGB那样要求三个独立视频信号同时传输,所以传输占用频宽小。
主流的采样方式有三种,YUV4:4:4,YUV4:2:2,YUV4:2:0
YUV420:yyyyyyyyuuvv,占用内存为423/2,奇数行采1/2U,偶数行采1/2V,yy一直有。每四个Y共用一组UV分量
YUV422:yuyvyuyv yuyvyuyv,占用内存为422,每两组y对应一组uv。每两个Y共用一组UV分量
YUV444:yuvyuv…,占用423,每组yuv。每一个Y对应一组UV分量
YUV格式有两大类:planar和packed。
对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。
对于packed的YUV格式,每个像素点的Y,U,V是连续交叉存储的。
具体见上方链接。
HSV(Hue, Saturation, Value),色调(H),饱和度(S),明度(V)。
2.直方图均衡化
直方图均衡化的数学原理
直方图均衡化的中心思想是把原始图像的灰度直方图做非线性拉伸,把关于灰度直方集中分布变成全灰度分布
s为输出图像,r为输入图像;p为概率;T为灰度变换函数
由公式可见,s在定义域内的概率密度是均匀分布的。
直方图变换是一种灰度变换,灰度变换函数T是输入变量和输出之间变换关系,扩展了像素取值的动态范围。
3.边缘检测算子
梯度与Roberts、Prewitt、Sobel、Lapacian算子
边缘检测之Canny
ps.Canny算子中的非极大值抑制
4.滤波及灰度化
灰度化:最大值、平均值、加权平均[0.299,0.578,0.114]
图像平滑之均值滤波、高斯滤波及中值滤波
最大值法
将彩色图像中的三分量亮度的最大值作为灰度图的灰度值。
平均值法
将彩色图像中的三分量亮度求平均得到一个灰度值。
加权平均法
根据重要性及其它指标,将三个分量以不同的权值进行加权平均。由于人眼对绿色的敏感最高,对蓝色敏感最低,因此,按下式对RGB三分量进行加权平均能得到较合理的灰度图像。
PCA&LDA
特征抽取——LDA
通俗易懂的主成分分析法(PCA)详解
LDA分类的目标是,使得类别内的点距离越近越好(集中),类别间的点越远越好。 也就是各类别方差和越小,各类别均值差和越大。
从而确认最优化分类的特征空间。
LDA数据要求:
1.数据呈正态分布
2.各类别数据具有相同的协方差矩阵
3.样本的特征从统计上来说相互独立
4.事实上,即使违背上述假设,LDA仍能正常工作
关键步骤:
1.对d维数据进行标准化处理(d为特征数量)
2.对于每一类别,计算d维的均值向量
3.构造类间的散布矩阵SB以及 类内散布矩阵 Sw
4.计算矩阵S−1WSB的特征值以及对应的特征向量
5.选取前k个特征值所对应的特征向量,构造一个d∗k维的转换矩阵W,其中特征向量以列的形式排列
6.使用转换矩阵W将样本映射到新的特征子空间上
ps.W即为新的主要特征,从而实现降维
求解出的特征值对角阵,根据特征值大小即可确定其权重,从而挑选出主要参数,得到新的特征空间。
PCA
目标基特点:
1.数据变换后,数据分散,方差大。(为了减少降维损失的信息)
2.各基要正交,信息线性不相关。
如何找正交基:
1.获取数据样本,均值归零
2.构建协方差矩阵(可表示各特征的方差和不同特征间的相关性)
3.求取目标协方差矩阵的特征值及特征向量。
4.对角阵按特征值大小排列,选定前k个最大特征值对应特征向量作为降维后的新基。
相机标定
张正友标定法翻译
张正友标定算法原理详解
关于Opencv中的相机畸变矫正是基于Brown的标定理论,见Opencv:559~562。具体自己看论文吧
连通域
OpenCV_连通区域分析
two-pass
创建RUN(团)结构体,包含(纵坐标、横坐标开始、横坐标结束、标记号)
逐行扫描图像,寻找所有的团,将他们放到一个二维数组vector<vector>中,以下为每一行的操作:
1.当遇到一个255时,搜索邻域,都为0,则设定新的label;否则将邻域最小label赋给该团,同时更新等价对。
ps.检索周围label,找出最小label赋值给该团:再检测邻域各团是否存在连通团,更新其所属的父label。(为了后面回溯到最小label)
2.创建一个团的对象,标记横坐标的开始,直到右端遇到0,标定横坐标结束。
在此基础之上,更新等价对,更新所有label为连通域祖先label。
second pass 更新所有像素为团祖先labels。
seed-filling
递归算法关于团扩散,直到边缘。
HOG
亮度归一化(gama矫正)
局部对比度归一化 LCN-不一定有用待定
1.输入图像灰度化,gamma矫正+直方图均衡化,修正光照和颜色。
2.计算图像梯度,基于[-1,0,1]、[-1,0,1]T计算x,y方向分量,并计算梯度,或者使用现有的算子,sobel,prewit都可以。
3.划为胞元,构建cell梯度直方图
ps.如6x6胞元,360°划为为9个方向,把cell中每个梯度像素关于方向统计数量,完成直方图构建
4.组合胞元成大block,块内归一化梯度直方图,得到该block的HOG特征
ps.如9胞元/block,9个方向通道,则block的HOG特征长度为9x9。
5.基于所有block的HOG特征得到图像特征向量。
对于64x128的图像而言,设cell大小8x8,2x2/block,方向通道为9,block特征向量长度为4x9=36,stride=8,窗口数为((64-bsize/stride)+1)x((128-bsize)/stride+1)=7x15,总共有36715=3780个特征。(bsize为block尺寸)
图像金字塔
图像金字塔:高斯金字塔、拉普拉斯金字塔与图片尺寸缩放
高斯下采样:
<1>对图像G_i进行高斯内核卷积
<2>将所有偶数行和列去除
拉普拉斯上采样:
<1>将图像在每个方向扩大为原来的两倍,新增的行和列以0填充
<2>使用先前同样的内核(乘以4)与放大后的图像卷积,获得 “新增像素”的近似值
图像插值
数字图像处理中常用的插值方法
几种插值算法对比
最近邻插值:略
二次线性插值:略
三次线性插值:利用周围16个点的灰度值做三次插值,不仅考虑相邻4点灰度影响,也考虑邻点灰度值变化率影响,计算量大,常用双线性三次插值基函数。
SIFT特征提取
SIFT特征点匹配
SIFT特征提取分析
Opencv源码分析-SIFT
SIFT算子把图像中检测到的特征点用一个128维的特征向量进行描述,因此一幅图像经过SIFT算法后表示为一个128维的特征向量集,该特征向量集具有对图像缩放,平移,旋转不变的特征,对于光照、仿射和投影变换也有一定的不变性,是一种非常优秀的局部特征描述算法。
SIFT算法流程
尺度空间极值点检测:
特征点检测需要知道特征点的位置和尺度,真实世界中的物体只有在一定尺度下才有意义,要找到连续尺度空间下位置不发生改变的点(尺度空间内核是高斯函数,尺度为σ,与分辨率成正比),就需要构建高斯金字塔,从而基于DOG得到高斯差分金字塔(特征稳定性最好的是LoG高斯拉普拉斯算子,考虑到DOG近似,可减少计算量)
高斯差分DOG函数:
kσ和σ是连续两个图象的平滑尺度,k-1是一个常数,每层金字塔k都是连续变化的,如下图所示
金字塔层数:一般为4,实际基于图像大小[log2(min(M,N))]-3或者[log2(min(M,N))]-2
金字塔每层组数:Si=s+3,s为极值检测需要层数,3~5。
参数:k=21/s,σ0=1.6,输入图像尺度为0.5。
第0组的图像尺度为σ=krσ0,r=0,1,…,s-2(则最后第三层σ=2σ0)
第1组的图像尺度为σ=2krσ0,r=0,1,…,s-2(则最后第三层σ=4σ0)
DoG金字塔生成,由高斯金字塔相邻两层相减
金字塔层数:一般为3,实际[log2(min(M,N))]-2或者[log2(min(M,N))]-1
金字塔每层组数:Sj=s+2。
确保尺度连续性:
对于每层:
高斯金字塔尺度:20σ0,21/sσ0,22/sσ0,23/sσ0,…,2s/sσ0,2s+1/sσ0,2s+2/sσ0
高斯差分金字塔尺度:20σ0,21/sσ0,22/sσ0,23/sσ0,…,2s/sσ0,2s+1/sσ0
最终极值所在尺度:20σ0,21/sσ0,22/sσ0,23/sσ0,…,2s/sσ0
层间传递:
下一层倒数第三组尺度为当层初始尺度,从而实现平滑尺度,满足连续性。(由于上下层之间尺度差2,分辨率也差2,则其基准层图像的尺度始终相同)
筛选极值点
极值点需要与前后组共同比对,9+9+8=26个点确保最大或最小。
如上图的最右方所示,只有当前点与其周围26个点值相比,如果是最大值或者最小值则该点为极值点,否则不是。对于除第一组以外的其他组中得到的极值点位置,根据位置的对应关系,映射到原图。
关键点定位
离散空间中的极值点并不是真实的连续空间中的极值点,需要对DoG空间进行拟合处理,以找到极值点的精确位置和尺度。另外,那些边缘位置的极值点应该剔除,提高关键点的稳定性。
明确极值点X=(x,y,σ) 为三维向量,关于X0=(x0,y0,σ0)基于泰勒展开得到:
求导上式,找出极值点,则有
若X帽>0.5,则认为偏移量过大,移动到拟合后的新位置再次迭代,若一定次数后仍>0.5则抛弃该点;若X帽<0.5,则停止迭代,该点为关键点;若f(x帽)过小,则抛弃该点,阈值0.03。
去除不稳定极值点
图像边缘点难定位,易受噪声影响,要剔除。
由于图像中的物体的边缘位置的点的主曲率一般会比较高,因此我们可以通过主曲率来判断该点是否在物体的边缘位置。主曲率可以用Hessian矩阵计算。
关键点方向确定
根据特征点所在的高斯尺度图像中的局部特征计算特征点方向。所谓局部特征就是特征点邻域区域内所有像素的梯度幅角和梯度幅值,这里邻域区域定义为在图像中以特征点为圆心,以r=3x1.5σ为半径的圆形区域
(σ是该组的基准图像尺度) 类似HOG中的操作
基于上式计算出幅值和幅角,基于G(x,y,1.5σ)的高斯加权,完成36个方向的直方图统计h(i),每个10°,再以高斯平滑加权邻域像素点,得到H(i)。
i取值范围[0,35],对应各个方向,h(i)为循环量,
寻找最大幅值的方向作为主方向,准确值可以通过以下公式求取
其他方向若有阈值达到主方向阈值的80%,则把其作为副方向。
此时得到特征点集K(x,y,σ,θ)。
特征向量生成
我们已经得到关键点(x,y,σ)以及方向,下面求取关键点描述符。
关键点描述符是一种以数学方式定义关键的过程。描述子不但包含关键点,也包括关键点周围对其有贡献的邻域点。
1.旋转
以关键点为圆心,考虑附近邻域dxd范围子区域(每个子区域就是一个正方形!),正方形边长为3σ(实际常用d+1)。
为了保证关键点的方向不变性,我们需要把特征点及其邻域进行旋转,旋转角度即为关键点的角度。为包括整个正方形,旋转半径为对角线/2。相当于对上述特征点邻域区域旋转,坐标对应关系:
2.统计局部方向直方图
关于G(x,y,d2/2)高斯加权统计旋转后邻域区域像素的梯度幅值和幅角,处理方式与关键点方向相同,不赘述。
ps.实际往往直接统计r为半径圆内幅值、幅角,再进行坐标变换,得到新坐标位置。
基于统计直方图,构建统计三维直方图,立方体的底就是邻域区域,4x4子区域,根据邻域像素位置归属其中;高代表幅角大小,把360°,8等分,根据邻域梯度幅角,结合高斯加权填入其中(结合特征点距离、结合立方体中心点距离两次加权)。完成三维直方图建立,那么这个4x4x8=128的特征向量,经过归一化处理,就是SIFT描述符了。(归一化去除光照变化影响)
以关键点为中心,取8x8窗口,每块的所有像素点的幅值做高斯加权,360°取8个方向,做直方图方向统计,得到2x2x8向量,即为中心关键点的数学描述。。。。。。。。。。。。。。。。。。。。。。。。。
Hough变换
经典霍夫变换(Hough Transform)
Hough变换检测圆
Opencv2.4.9源码分析——HoughLinesP
霍夫变换是一个特征提取技术,在参数空间中通过投票程序在特定类型的形状内找到对象的不完美实例。Hough变换主要优点是能容忍特征边界描述中的间隙,并且相对不受图像噪声的影响。
对于满足直线y=ax+b的点(x0,y0),为避免直角坐标系斜率无穷大的情况,采用极坐标表示r=xcosθ+ysinθ,则对于经过点(x0,y0),可以在(r,θ)hough空间表示出来。
那么如果用(ra,θa)曲线表示关于a点所有直线,(rb,θb)曲线表示b点所有直线,那么存在(r’,θ’),表示同时经过a,b点的直线。
那么相当于基于边缘检测结果,hough变换建立**(r,θ)**空间,按一定刻度划分单元,投票统计所有像素点,对于满足阈值要求的单元生成直线,完成直线检测。
概率霍夫变换(Progressive Probabilistic Hough Transform)的原理,利用概率霍夫变换来检测直线的。它的一般步骤为:
1、随机抽取图像中的一个特征点,即边缘点,如果该点已经被标定为是某一条直线上的点,则继续在剩下的边缘点中随机抽取一个边缘点,直到所有边缘点都抽取完了为止;
2、对该点进行霍夫变换,并进行累加和计算;
3、选取在霍夫空间内值最大的点,如果该点大于阈值的,则进行步骤4,否则回到步骤1;
4、复原直线L,沿着直线的方向位移(点与点距离<maxLineGap)连成线段,并删除初始点,从而找到直线的两个端点,记录线段参数(起点和终点);
5、计算直线的长度,如果大于某个阈值,则被认为是好的直线输出,回到步骤1。
一些数学
MATLAB实现最小二乘法
支持向量机通俗导论(理解SVM的三层境界)
SVM推导求解
极大似然估计详解
奇异值分解(SVD)原理
逆矩阵、广义逆矩阵和Moore-Penrose逆矩阵
深度学习
机器学习中正则化项L1和L2的直观理解
特征工程
One-Hot-encode
BN
GPU占用
带宽、算力与模型时间、空间复杂度
深度卷积参数量
没搞懂的梯度不稳定性
RNN+LSTM
理解 LSTM 网络
RNN以及LSTM的介绍和公式梳理
循环神经网络(RNN)
循环神经网络(RNN, Recurrent Neural Networks)
RNN、LSTM、GRU基础原理篇
RNN中梯度消失的解决方案