目录
1 常用的边缘检测算子比较
Roberts 算子
Sobel算子和Prewitt算子
Canny算子
Laplacian算子
综合比较:
2 常用的插值检测算法
3 常用的特征提取方法
4 常用的图像分割算法
5 常用的目标检测算法
6 常用的图像特征、特征点提取以及匹配算法
(1) 特征
(2) 特征点算法:
(3) 特征点匹配算法
7 常用的去噪方法
(1) 均值滤波(低通滤波)
(2) 高斯滤波(低通滤波)
(3) 中值滤波
(4) 维纳滤波(最小均方误差滤波)
(5) 双边滤波
(6) 引导滤波
8 彩色图像处理
9 直方图均衡化
10 相机标定
11 最优化方法
(1) 最小二乘法
12 几何变换
(1) 仿射变换(最常用的空间坐标变换)
(2) 投影变换
13 图像重建质量评价指标
一阶微分:
利用局部差分算子寻找边缘,边缘定位精度较高,但容易丢失一部分边缘,同时由于图像没经过平滑处理,因此不具备抑制噪声的能力。该算子对具有陡峭边缘且含噪声小的图像效果较好.
都考虑了邻域信息, 相当于对图像先做加权平滑处理,然后再做微分运算,所不同的是平滑部分的权值有些差异,因此对噪声具有一定的抑制能力,但不能完全排除检测结果中出现的虚假边缘。虽然这两个算子边缘定位效果不错, 但检测出的边缘容易出现多像素宽度.
步骤:用高斯滤波器平滑图像 →
用一阶偏导的有限差分来计算梯度的幅值和方向→
对梯度幅值进行非极大值抑制(细化边缘) →
用双阀值算法检测和连接边缘(减少假边缘以及真边缘的断裂)
二阶微分:
由于对噪声太敏感,一般不单独使用,通常和平滑高斯滤波器结合使用
通过二阶导数过零点定位边缘,Laplacian算子不具方向性,对灰度突变敏感,定位精度较高,同时对噪声也敏感,一般不用原始形式进行边缘检测。
LOG(Laplacian of Gaussìan))算子
克服了拉普拉斯算子抗噪声能力比较差的缺点,但是在抑制噪声的同时也可能将原有的比较尖锐的边缘也平滑掉了。
(1) 从边缘定位的精度看
Roberts 算子和Log 算子定位精度较高。(思考:Roberts由于没有进行平滑作用,定位较为精准)
Roberts 算子简单直观. Log 算子则利用二阶导数零交叉特性检测边缘。但Log 算子只能获得边缘位置信息,不能得到边缘的方向等信息.
(2) 从对不同方向边缘的响应看
从对边缘方向的敏感性而言. Roberts 算子检测斜向阶跃边缘效果较好,Sobel 算子、Prewitt算子检测水平和垂直边缘效果较好。Log 算子则不具备边缘方向检测能力。而Sobel算子可以提供最精确的边缘方向估计.
(3) 从去噪能力看
Roberts和Log 算子定位精度虽然较高, 但受噪声影响大.
Sobel算子和Prewitt算子模板相对较大因而去噪能力较强,具有平滑作用,能滤除一些噪声,去掉部分伪边缘, 但同时也平滑了真正的边缘, 这也正是其定位精度不高的原因.
从总体效果来衡量. Canny 算子给出了一种边缘定位精确性和抗噪声干扰性的较好折衷办法。
(4)边缘宽度
一阶导数通常产生较宽的边缘,二阶导数通过选取过零点可以得到较细边缘
(二级导数对细节有较强的响应,如细线和孤立噪声点,对图像增强而言,基于二级导数的算子应用更多一些,对于边缘检测中,基于一阶倒数的算子用的多一些)
最近邻插值:用1个最近邻点去估计
双线性插值:用4个邻点线性估计
双三次内插:用16个邻点估计
几何空间变换可以使用两种基本方法:
第一种方法称为前向映射
输入图像中的两个或更多个像素可被变换到输出图像中的同一位置,这就产生了如何把多个输出值合并到一个输出像素的问题。
一种可能是某些输出位置可能完全没有赋值的像素。
第二种方法,称为反向映射
扫描输出像素的位置,并在每一个位置使用逆变换计算输入图像中的相应位置,然后用插值算法确定灰度值
对于实现来说,反向映射比前向才更有效,因而被许多空间变换的商业实现所采用(如MATLAB 就采用该方法)
边界描绘子:周长、长短轴、曲率、傅里叶描绘子等
区域描绘子:面积、圆形度、灰度均值等
纹理描绘子:直方图及其统计特性(均值、方差、平滑度、熵(表示信息量的大小))、灰度共生矩阵(灰度i和j具有某种相对位置关系出现的次数)、LBP(局部二进制模式)
(1) 边缘检测:各种边缘检测算子、霍夫变换
(2) 阈值分割:如OTSU算法
(3)基于区域的分割:
区域生长:选取种子点,依相似性准则(生长准则)进行生长,按生长停止条件提示生长。应用举例:有缺陷焊缝分割
区域分裂与合并:分裂直至各小区域满足相似性准则,相将满足相似性条件的相邻区域进行合并。应用举例:哈勃望远镜拍摄的天鹅星座超新星分割
(4)形态学分水岭的分割
原理:将灰度图像想象为地形图,灰度越大,高度越高,在每个盆地区域(各区域称为分水岭或汇水盆地)灌水,让水上升,并修构建水坝阻止不同区域的水聚合,水坝对应分水线即为分割线。应用举例:电泳现象图像分割
(1) 传统方法
背景差分法:效果较好,然而建立一个良好的背景模型需要花费很大计算量和存储量的开销。
帧间差分法:计算简单,但是检测结果不完整;
光流法:计算复杂, 不适用于实时监控系统;
(2) 深度学习方法
目标检测算法
a. HOG特征
方向梯度直方图(Histogram of Oriented Gradient, HOG),通过计算和统计图像局部区域的梯度方向直方图来构成特征
HOG+SVM的算法已经被广泛应用于图像识别中,尤其在行人检测中获得了极大的成功
原理
颜色空间归一化
对采集到的人脸进行图像预处理,主要是处理光线太暗或太强的情况,这里有两次处理:图像灰度化、Gamma校正。
梯度计算
梯度方向直方图
将图像划分成若干个cells(单元),8x8=64个像素为一个cell(cell之间没有重叠),每个cell内统计梯度方向直方图
将所有梯度方向划分为9个bin(即9维特征向量),作为直方图的横轴,角度范围所对应的梯度值累加值作为直方图纵轴
重叠块直方图归一化
特征组合
将所有block的特征向量都组合(拼接在一起)起来,则形成26x37x36=34632维特征向量,这就是HOG特征,这个特征向量就可以用来表征整个图像了。
实际上运用中,通常是选取一幅图像中的一个滑动窗(候选区域)来进行特征提取,而不是对增幅图像
参考资料:https://blog.csdn.net/hujingshuang/article/details/47337707
b. LBP特征
c. SIFT特征
SIFT(Scale Invariant Feature Transform)全称尺度不变特征变换,是1999年Lowe提出的一种局部特征描述子,在2004年得到了改善。
SIFT算子是把图像中检测到的特征点用一个128维的特征向量进行描述,因此一幅图像经过SIFT算法后表示为一个128维的特征向量,该特征向量具有对图像缩放,平移,旋转不变性,对于光照、仿射和投影变换也有一定的不变性,是一种非常优秀的局部特征描述子。
算法流程
尺度空间特征点检测(高斯差分金字塔中的邻域极值点)
尺度空间,σ表示尺度空间的大小,σ越大则表示越模糊,表示图像的概貌,σ越小则表示越清晰,表示图像的细节。经过一系列的尺度空间变换和二倍的下采样,最终得到高斯金字塔。
经过一系列的尺度空间变换和二倍的下采样,最终得到高斯金字塔。
为了在尺度空间中找到稳定不变的极值点,在SIFT算法中使用了高斯差分(DOG)函数(LOG的近似)其中kσ和σ是连续的两个图像的平滑尺度,所得到的差分图像再放到高斯差分金字塔中
金字塔的组数:一般取4,与图像大小有关
每组层数:s+3层,σ = k^r σ0,r=0,1,...s+2 , s一般取3~5
参数:k = 2^(1/s), σ0 = 1.6(某组第一层有上一组的倒数第三层降采样得到)
极值点的选取:只有当前点与其周围26个点值相比,如果是最大值或者最小值则该点为极值点,否则不是。这种比较计算量比较小,因为大多数的点在比较的前几步就已经被pass掉了。
特征点精确定位
我们之前找到的极值点也就是离散空间中的极值点,但是离散空间中的极值点并不是真实的连续空间中的极值点,所以需要对DoG空间进行拟合处理,以找到极值点的精确位置和尺度。另外,我们还需要去除那些在边缘位置的极值点,以提高特征点的稳定性
在Lowe的论文中,使用的是泰勒展开式作为拟合函数
图像中的物体的边缘位置的点的主曲率一般会比较高,因此我们可以通过主曲率(由二维的Hessian矩阵H计算得到)来判断该点是否在物体的边缘位置
特征点的方向计算
为了实现特征点的旋转不变性,因此需要计算特征点的主方向。在计算特征点的方向时是根据特征点所在的高斯尺度图像中的局部特征计算出的
所谓的局部特征就是特征点的邻域区域(以特征点为圆心,以r为半径的圆形区域)内所有像素的梯度幅角和梯度幅值(注意不同像素值还需进行加不同权值,根据与特征点的距离进行高斯加权)
建立梯度方向直方图(论文中分36个柱,每个10度),直方图中的最高柱作为该特征点的主方向
特征向量的生成(特征点描述子的计算)
特征点描述子是跟特征点所在的尺度相关的,因此我们需要在特征点所在的尺度图像中生成特征点的描述子,把特征点的邻域区域划分为d∗d个正方形区域,Lowe论文中取d=4。每个正方形的区域的边长为3σ(σ为该组中基准层的尺度)
为了保证特征点的方向不变性,我们需要把特征点及其邻域进行旋转,旋转角度即为特征点的主方向。计算梯度幅值和幅角(不同像素值进行高斯加权)(也可以旋转之前进行计算,在一一对应)
最终形成的是一个128柱的梯度方向直方图(d∗d∗8,这里d=4,8是把360度分成8份,取8个梯度方向),这个直方图的结果也就是我们的特征描述子
为了去除光照的影响,需要进行归一化处理,为了去除非线性光照的变化,在实现的过程中对于已经归一化好的描述符{q1,q2,...,q128}需要设定一个阈值,一般阈值为0.2,当qi超过0.2以后,则qi=0.2
参考资料:https://blog.csdn.net/lhanchao/article/details/52345845
https://blog.csdn.net/lyl771857509/article/details/79675137
SURF全称 Speeded Up Robust Features,是在SIFT算法的基础上提出的,主要针对SIFT算法运算速度慢,计算量大的缺点进行了改进。
SURF的流程和SIFT比较类似,这些改进体现在以下几个方面:
特征点检测是基于Hessian矩阵,依据Hessian矩阵行列式的极值来定位特征点的位置。并且将Hession特征计算与高斯平滑结合在一起,两个操作通过近似处理得到一个核模板。
在构建尺度空间时,使用box filter与源图像卷积,而不是使用DoG算子。
SURF使用一阶Haar小波在x、y两个方向的响应作为构建特征向量的分布信息。
图像的特征点算法包含两个部分:
特征点的提取,在图像检测到特征点的位置
特征点的描述,也就是描述子。
特征点描述子:在图像中提取到关键点的位置信息后,为了能够更有效的匹配(主要是保证尺度和旋转不变性),通常使用一个向量来描述关键点及其周围的信息。特征的描述子,在特征点的匹配中是非常重要的
a. SIFT(Scale Invariant Feature Transform,尺度不变特征变换)
b. SURF(Speeded Up Robust Features)
c. ORB(Oriented FAST and Rotated BRIEF)
FAST(Features From Accelerated Segment Test)特征点提取算法
BRIEF描述子
a. 交叉匹配
b. KNN匹配
c. RANSAC(Random Sample Consensus,随机采样一致性)匹配
详见: SLAM入门之视觉里程计(1):特征点的匹配 - Brook_icv - 博客园
空域滤波和变换域滤波(如频域或小波域)
均值滤波是典型的线性滤波算法, 其采用的主要方法为邻域平均法
效果:均值滤波对高斯噪声, 乘性噪声的抑制是比较好的, 但对椒盐噪声的抑制作用不好, 椒盐噪声仍然存在, 只不过被削弱了而已。而且会模糊边缘
平均平滑对邻域内的像索一视同仁,为了减少处理中的模糊,得到更自然的平滑效果,则会很自然地想到适当加大模板中心点的权重,随着远离中心点,权重迅速减小,从而可以确保中心点看起来更接近与它距离更近的点(可降低平滑后的模糊化),基于这种考虑得到的模板即为高斯模板.
中值滤波是常用的非线性滤波方法, 也是图像处理技术中最常用的预处理技术。它可以克服线性滤波器给图像带来的模糊, 在有效清除颗粒噪声的同时, 又能保持良好的边缘特性, 从而获得较满意的滤波效果, 特别适合于去除图像的椒盐噪声。
维纳滤波( N Wiener 最早在1942 年提出的方法) 是一种对退化图像进行恢复处理的一种常用算法, 也是最早也最为人们熟知的线性图像复原方法。
该方法建立在图像和噪声都是随机变量的基础上,目标是找到未污染图像f的一个估计f^ ,使他们之间的均方误差最小。(《数字图像处理》P222)
效果:维纳滤波对高斯噪声、乘性噪声都有明显的抑制作用, 相对与均值滤波和中值滤波, 维纳滤波对这两种噪声的抑制效果更好, 缺点就是容易失去图像的边缘信息。维纳滤波对椒盐噪声几乎没有抑制作用。
是一种同时考虑了像素空间差异与强度差异的滤波器,具有保持图像边缘的特性
普通的高斯滤波器, 权重只和像素之间的空间距离有关系,无论图像的内容是什么,都有相同的滤波效果。
双边滤波: 在像素强度变换不大的区域,双边滤波有类似于高斯滤波的效果,而在图像边缘等强度梯度较大的地方,可以保持梯度,梯度较小的地方,进行平滑。
它与双边滤波最大的相似之处,就是同样具有保持边缘特性。在引导滤波的定义中,用到了局部线性模型
局部线性模型: 某函数上一点与其邻近部分的点成线性关系,一个复杂的函数就可以用很多局部的线性函数来表示,当需要求该函数上某一点的值时,只需计算所有包含该点的线性函数的值并做平均即可。这种模型,在表示非解析函数上,非常有用。
以认为图像是一个二维函数,而且没法写出解析表达式,因此我们假设该函数的输出与输入在一个二维窗口内满足线性关系
当把引导滤波用作边缘保持滤波器时,往往有 I = p ,
在边缘区域进行保持,在平坦区域进行平滑
变化较大的区域,ak较大,由最优化问题,可得输出与输入相差较小,从而边缘保持;
变化较小的区域,ak较小,趋于0,相当于做均值滤波,从而进行平滑;
|
双边滤波器 | 引导滤波器 |
优点 |
|
继承双边滤波的优势 改进双边滤波的缺点,得到O(1)的复杂度,而且没有梯度失真 应用更加广泛,除了边缘保持平滑(一般guide = p)外,还可以用于羽化、去雾等问题。 |
缺点 |
|
|
参考:
http://kaiminghe.com/eccv10/
https://blog.csdn.net/AIchipmunk/article/details/20704681
https://blog.csdn.net/LG1259156776/article/details/51816875
退化函数的估计方法:
1.图像观察估计
2.试验估计,冲激响应的傅里叶变换估计H(u,v)
3.建模估计,用通用的大气湍流退化模型或者从数学原理推导退化函数(如运动模糊)
RGB
CMY(K)
HSV
直方图均衡化
把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布,对直方图进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同
方法
通过使用累积分布函数(CDF)对灰度值进行“调整”
作用
增强对比度,增大动态范围,使图像细节丰富
这种方法对于背景和前景都太亮或者太暗的图像非常有用,这种方法尤其是可以带来X光图像中更好的骨骼结构显示以及曝光过度或者曝光不足照片中更好的细节
优缺点
优点:它是一个相当直观的技术并且是可逆操作,如果已知均衡化函数,那么就可以恢复原始的直方图,并且计算量也不大
缺点:它对处理的数据不加选择,它可能会增加背景噪声的对比度并且降低有用信号的对比度(?为什么会降低有用信号)。
实现
%计算灰度分布密度
ProbPixel = zeros(1,256);
for i = 1:256
ProbPixel(i) = NumPixel(i) / (height * width * 1.0);
end
%计算累计直方图分布
CumuPixel = zeros(1,256);
for i = 1:256
if i == 1
CumuPixel(i) = ProbPixel(i);
else
CumuPixel(i) = CumuPixel(i - 1) + ProbPixel(i);
end
end
%累计分布取整
CumuPixel = uint8(255 .* CumuPixel + 0.5); %四舍五入
%对灰度值进行映射(均衡化)
for i = 1:height
for j = 1: width
I(i,j) = CumuPixel(I(i,j));
end
end
后面内参矩阵可以换成3*3
相机坐标系上的可以归一化为(xc/zc,yc/zc,1)
详见文章:相机标定原理
矩阵证明:
求最极值问题直接对应的就是导数为零
https://blog.csdn.net/monsterhoho/article/details/46753673
最小二乘解的形式:Ax = b -> A_T *A*x = A_T *b -> (A_T*A)^-1 (A_T*A) x = (A_T*A)^-1*A_T *b
一般证明:使平方误差最小即可,各偏导数为0,如下为线性回归最小二乘法的结果
仿射变换在图形中的变换包括:平移、缩放、旋转、偏移及它们的组合形式。
这些变换的特点是:平行关系和线段的长度比例(应该是平行线段的长度比例)保持不变
通用的变换公式为:
投影变换:是将图片投影到一个新的视平面(Viewing Plane),也称作投影映射(Projective Mapping)。
特点:平面的形状不会保留,例如正圆在投影后会变为椭圆,另外,角度、距离、距离比,等等,都不会保留。唯一能保留的几何属性似乎只有直线的共线性(一条直线成像后仍为直线)。
通用的变换公式为:
https://blog.csdn.net/oppo62258801/article/details/78642218
均方误差MSE(mean square error)
峰值信噪比PSNR(Peak Signal to Noise Ratio)
结构相似性SSIM(structural similarity)
与主观视觉感知相关的方法有: universal image quality index(UIQI),SSIM,VIF,FSI
IFC > NQM > WPSNR > MSSSIM > SSIM > UIQI > PSNR >VIF
https://blog.csdn.net/smallstones/article/details/42198049