计算机视觉的基础
- 前言:
笔记未放去全 后面数学公式太多 临时只做了手写和其他零散部分
图片懒得单独传 字数太多太卡了 删掉了后半部分
下次下次
不过话说回来
我好像叫
下次也不一定
:)
1.图像预处理
- 图像处理方法
- 图像处理
- 空间域处理
点运算
HE、CLAHE
形态学运算
膨胀、腐蚀
临域运算
卷积、金字塔
- 频率域处理
傅里叶变换
小波变换
1.1.图像显示与存储原理
- 1.1.1.1.颜色空间
颜色空间 | 混色方式 | 通道数量 | 通道名称 | 一个像素颜色值 | 取值范围 |
---|---|---|---|---|---|
RGB | 加法 (屏幕) | 3 | Red Green Blue | (b,g,r) | [0,255] [0.0,1.0] |
CMY(K) | 减法 (印刷) | 4 | Cyan Magenta Yellow Key | (c,m,y,k) | [0,255] [0.0,1.0] |
HSV | 绘画 | 3 | Hue色调 Saturation饱和度 Value明度 | (h,s,v) | [0,255] [0.0,1.0] |
- RGB图片数据格式
- RGB三通道彩色图→3维矩阵([0,255])
- 单通道灰度图
亮度信息([0,255])
灰度化Gray=R0.3+G0.59+B*0.11
1.2.图像增强的目标
改善图像的视觉效果
转换为更适合于人或机器分析处理的形式
突出对人或机器分析有意义的信息
抑制无用信息,提高图像的使用价值
具体比如图像锐化,平滑、去噪,灰度调整(对比度增强)
1.3.点运算:基于直方图的对比度增强
- 直方图(Histogram)
- 对图片数据/特征分布的一种统计
灰度、颜色
梯度/边缘、形状、纹理
局部特征点、视觉词汇
- 区间(bin)
具有一定的统计或物理意义
一种数据或者特征的代表
需要预定义或基于数据经行学习
数值是一种统计量:概率、频数
- 对数据空间(bin)进行量化
- 直方图均衡化
直方图均衡化是指:利用图像直方图对对比度经行调整的方法。
直方图均衡通常用来增加许多图像的局部对比度,尤其是当图像的有用数据的对比度相当接近的时候。
直方图均衡化以后,亮度可以更好地在直方图上分布。这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。
直方图均衡化:实质上是对图像进行非线性拉伸。
重新分配各个灰度单位中的像素点数量,使一定灰度范围像素点数量的值大致相等。
- AHE 自适应直方图均衡
直方图均衡的经典算法对整幅图像的像素用相同的变换,如果图像中包括明显亮的或者暗的区域,则经典算法作用有限。
自适应直方图均衡(AHE)算法通过对局部区域进行直方图均衡,来解决上述问题。
移动模板在原始图片上安装特定步长滑动。
每次移动后,模板区域内做直方图均衡,映射后的结果赋值给模板区域内所有点。
每个点会有多次赋值,最终的取值为这些赋值的均值。
- CLAHE 限制对比度自适应直方图均衡
AHE会过度放大图像中相对均匀的噪音,可采用限制对比度自适应直方图均衡(CLAHE)。
与普通的AHE相比,CLAHE的不同地方在于直方图修建过程,用修剪后的自适应直方图均衡图像时,图像对比度会更加自然。
- 黑点的灰度直接由映射函数计算得到;
- 色区域内的灰度由映射函数计算而得;
- 色区域内的灰度由相邻2块灰度映射值线性插值而得;
- 他区域所有点的灰度由相邻4块的灰度映射值双线性插值而得。
- CLAHE算法步骤
- 像分块,以块为单位;
- 先计算直方图,然后修剪直方图,最后均衡
- 遍历操作各个图像块,进行块间双线性插值;
- 与原图做图层滤色混合操作。(可选)
1.4.形态学处理
- 形态学运算
膨胀是图像中的高亮部分进行膨胀,类似于领域扩张。
腐蚀是原图的高亮部分被腐蚀,类似于领域被腐蚀。
开运算:先腐蚀再膨胀,可以去掉目标外的孤立点。
闭运算:先膨胀再腐蚀,可以去掉目标内的控。
通常,当有噪声的图像用阈值二值化后,所得到的边界是很不平滑的,物体区域具有一些错判的孔洞,背景区域散布着一些小的噪声物体,连续的开和闭运算可以显著的改善这种情况。
1.5.空间域处理:卷积
- 滤波/卷积
在每个图片位置(x,y)上进行基于邻域的函数计算
滤波函数→权重相加
卷积核、卷积模板
滤波器、滤波模板
扫描窗不同功能需要定义不同的函数
平滑/去噪
梯度/锐化
边缘、显著点、纹理
模式检测
边界填充(Padding)
获得同尺寸输出的情况下,卷积核越大,补充越多
最后卷积前后的图像尺寸相同(不够的地方就补充)补充类型
- 补零(zero-padding)
- 边界复制(replication)
- 镜像(reflection)
- 块复制(wraparound)
目前最常用的是补零
为了避免补充过多的0 尽量减少卷积核的相对大小(相对于原图片尺寸) 同时大卷积核速度也相对减慢
- 卷积核、滤波模板 参数解释
参数解释:
f[k,l]是卷积核中在(k,l)上的权重参数 I[x+k,y+l]是与f[k,l]相对应的图片像素值 h[x,y]是图片中(x,y)像素的滤波/卷积结果
x,y是像素在图片中的位置/坐标
k,l是卷积核中的位置/坐标
(中心点的坐标为(0,0))
- 平滑
名称 | 尺寸 | 详细描述 | 特点 |
---|---|---|---|
平滑均值滤波/卷积 | 奇数尺寸 | 扫描步长:1 边框补零 | 使用较少 本身存在缺陷 既去不掉噪点又会模糊图片细节 |
平滑中值滤波/卷积 | 奇数尺寸 | 卷积域内的像素从小到大排序,取中间值作为卷积输出 | 有效去除椒盐噪声 |
平滑高斯滤波/卷积 | 奇数尺寸 | 模拟人眼,关注中心区域 | 有效去除高斯噪声 |
- 平滑高斯滤波/卷积:
x,y是卷积参数坐标 标准差σ(越小关注区域越集中)
- 分解特性(级联高斯)
2D卷积拆分成2个相同的1D卷积
行卷积``````列卷积
降计算
2D卷积:KxK次计算``````2x1D卷积:2K次计算
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2o3ACHua-1616758120678)(./图片/image-20210119222825905.png)]
- 梯度Prewitt滤波/卷积
水平梯度/垂直边缘
垂直梯度/水平边缘
- 梯度Sobel滤波/卷积
(和Prewitt滤波/卷积很相似 但是梯度中间有峰值)
水平梯度/垂直边缘
垂直梯度/水平边缘
- 梯度Laplacian滤波/卷积
- 二阶微分算子/一阶导数极值
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dMbxFAzo-1616758120680)(./图片/image-20210126121503355.png)]- 作用:
团块检测:周边高于(低于)中心点
边缘检测:像素值快速变化的区域
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6FjuxCDK-1616758120682)(./图片/image-20210126121549507.png)]
(相加为0 中心为一个较大的负数 避免把完全平滑(颜色一致等)的区域选出来 其他地方锐化)
- 其他滤波/卷积
- (左)移位
- 锐化
- 如何让卷积更快:空间卷积=频域乘积
FFT(fast Fourier transform) 快速傅里叶变换
1.6.卷积的应用(平滑、边缘检测、锐化等)
- 高斯金字塔
- 图像金字塔化:
先进行图像平滑,再进行降采样,根据降采样率,得到一系列尺寸逐渐减小的图像
- 操作:
n次(高斯卷积→2倍降采样)→n层金字塔
- 目的:
捕捉不同尺寸的物体
(比如目标检测中 大尺度图片中找小细节 小尺度图片里找大的物体)
高斯滤波的必要性:直接降采样损失信息
高斯金字塔本质上为信号的多尺度表示法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8v4IKxWV-1616758120685)(./图片/image-20210308133838738.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FDfrt2CY-1616758120686)(./图片/image-20210308133904666.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Enep7bwV-1616758120687)(./图片/image-20210308133857240.png)]
- 拉普拉斯金字塔(Laplacian)
-高频细节信息在卷积和采样中丢失(比如刚刚的高斯金字塔降采样)
保留所有层所丢失的高频信息,用于图像恢复(专门保留原图Gi 和 操作后的图像再上采样回来 的差别 即,公式中的Li)
*是高斯模糊 ↓是下采样/降采样 ↑是上采样 -是差/差异 +是叠加
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-txXC532h-1616758120689)(./图片/image-20210308135325562.png)]
1.7. 代码:
- 平滑、边缘检测、CLAHE等
- 随机加入噪点后 高斯滤波和中值滤波的效果
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 直接读为灰度图像
img = cv2.imread('../pictures/00.jpg', 0)
# 添加噪点
for i in range(40000):
temp_x = np.random.randint(0, img.shape[0])
temp_y = np.random.randint(0, img.shape[1])
img[temp_x][temp_y] = 255
# 高斯滤波
blur_1 = cv2.GaussianBlur(img, (5, 5), 0)
# 中值滤波
blur_2 = cv2.medianBlur(img, 5)
# 默认彩色,另一种彩色bgr
plt.subplot(1, 3, 1), plt.imshow(img, 'gray')
plt.subplot(1, 3, 2), plt.imshow(blur_1, 'gray')
plt.subplot(1, 3, 3), plt.imshow(blur_2, 'gray')
plt.show()
- Laplacian滤波和Sobel 横向、纵向滤波 找细节
import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('filePath',0)
laplacian = cv.laplacian(img,cv.CV_64F)
soblex = cv.Sobel(img,cv.CV_64F,1,0,ksize=5)
sobley = cv.Sobel(img,cv.CV_64F,0,1,ksize=5)
plt.subplot(2,2,1),plt.imshow(img,cmap='gray')
……
- 快速傅里叶变换 图像变频率
- AHE和CLAHE增强图像对比度
(AHE过度放大椒盐/噪声点 CLAHE则更加自然)
2.图像特征及描述
2.1.颜色特征
2.1.1.颜色特征直方图
- 量化颜色直方图
- 适用颜色空间:
RGB、HSV等颜色空间
- 操作:
颜色空间量化,单元(bin)由单元中心代表
统计落在量化单元上的像素数量
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LUI2LPlb-1616758120689)(./图片/image-20210312193723404.png)]
- HSV空间
- 优势:
计算高效
- 劣势:
量化问题
稀疏
(如下图 色带稀疏并且集中在后半部分)
2.1.2.聚类颜色直方图
- 适用颜色空间:
Lab等颜色空间
- 操作:
使用聚类算法对所有像素点颜色向量进行聚类
单元(bin)由聚类中心代表
(相对于颜色特征直方图 聚类算法则是考虑到图像的颜色特征在整个空间的分布情况,避免出现大量的bin中的像素数量非常稀疏的情况)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lzb0ijxP-1616758120690)(./图片/image-20210312194159524.png)]
- Lab空间
是用数字化的方法来描述人的视觉感应
- Lab颜色空间中:
L分量用于表示像素的亮度,取值范围是[0,100],表示从纯黑到纯白
a表示从品红到深绿色的范围,取值范围是[127,-128]
b表示从黄色到蓝色的范围,取值范围是[127,-128]
2.1.3.对比两种直方图
设想两幅图的颜色直方图几乎相同,只是互相错开了一个bin,这时如果采用L1距离或者普拉距离计算两者的相似度,会得到很小的相似度值
为了克服这个缺陷,需要考虑到相似但不相同的颜色之间的相似度:方法1:采用二次式距离
方法2:对颜色直方图实现进行平滑过滤,即每个bin中的像素对于相邻的几个bin也有贡献
2.2.几何特征
2.2.1.边缘Edge,角点Corner,斑点Blob
- 边缘(Edge)
像素明显边变化的区域
具有丰富的语义信息
用于:物体识别
几何、视角变换
- 边缘定义
像素值函数快速变化的区域→一阶导数的极值区域
- 边缘提取
先高斯去噪,再使用一阶导数获取极值(导数对噪声敏感)
高斯滤波一阶导(两个方向分别求)
标准差→尺度 (σ决定)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kt5doPPj-1616758120691)(./图片/image-20210312200751690.png)]
梯度幅值/强度
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zMJ46ZSS-1616758120692)(./图片/image-20210312200921929.png)]
梯度(增加最快)方向
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XULl4o2t-1616758120693)(./图片/image-20210312200927503.png)]
(下图p3为p1p2的结果合并 p4为p1红p2绿)
不同标准差的滤波(x方向)
能捕捉到不同尺度的边缘
数学模型/:
- Harris角点(Corner)
一种显著点
在任何方向上移动小观察窗,导致大的像素变动[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2wCVWfHt-1616758120694)(./图片/image-20210312220817469.png)]
- 数学模型:偏移(u,v)后窗内图像变化
取E(u,v)大的patch
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QdgpjgWf-1616758120694)(./图片/image-20210313153137295.png)]
- 判断Harris角点
图像 | 特征值 |
---|---|
图像中直线 | 特征值一大一小 |
图像中平面 | 均小 且近似相等 |
图像中角点 | 均大 且近似相等 |
- FAST角点(Corner)
- FAST角点检测
是一种快速的角点特征检测算法
- 定义
若某像素点与其周围领域内足够多的像素点处于不同的区域,则该像素点可能为角点,也就是某些属性与众不同。
FAST特征点检测是对兴趣点所在圆周上的16个像素点进行判断,若判断后的当前中心像素点为暗或亮,将决定其是否为角点。
确定一个阈值t,观察某像素点为中心的一个半径等于3像素的离散化发圆,这个圆的边界上有16个像素。
如果在这个大小为16个像素的圆上有n(一般为12)个连续的像素点,它们的像素值要么都比大,要么都比小,则p它就是一个角点。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yEszfADz-1616758120695)(./图片/image-20210313154422293.png)]
- 特点
- 优点:FAST角点检测计算的时间复杂度小,检测效果好。
- 缺点:FAST不产生多尺度特征,也没有方向信息,这样就会失去旋转不变性。
- 斑点(Blob)
- 拉普拉斯梯度
一阶导极值点→二阶导数零点
梯度/边缘可以通过寻找
- (二阶导数接近零)(两阶导、两个方向)
但对噪声很敏感,首先对图像进行高斯卷积滤波进行降噪处理,再采用Laplace算子进行边缘检测。
高斯拉普拉斯滤波 / Laplacian of Gaussian(LoG)
当σ较小时,将识别出更为细节的边缘(如下图↓)
LoG图找极值点→斑点
2.3.基于关键点的特征描述子
从不同的距离,不同的方向、角度,不同的光照条件下观察一个物体时,物体的大小,形状,明暗都会有所不同。但我们依然可以判断它是同一件物体。
理想的特征描述子应该具备这些性质。即,在大小、方向、明暗不同的图像中,同一特征点具有足够相似的描述子,称之为描述的可复现性。
- 特征点/关键点
不同视角图片之间的映射
稳定局部特征点可重复性、显著性
抗图片变换外貌变换(亮度、光照)
几何变换(平移、选择、尺度)
- 兴趣点/关键点(Interest point / Keypoint)
图片配准/拼接(如下图)
运动跟踪
物体识别
机器人导航
3D重建
2.3.1.局部特征:SIFT,SURF,ORB
- 尺度不变特征变换 SIFT(Scale-invariant feature transform)
- 特点:
具有良好的不变性:
旋转、尺度缩放、平移、亮度变化、
对视角变换、仿射变换和噪声也有一定程度的稳定性
独特性好,信息量丰富
适用于在海量特征数据库中进行快速、准确的匹配
多量性
即使少数物体也可以产生大量SIFT特征
计算快(虽然但是 有更快的)
经优化的SIFT匹配算法甚至可以到达实时性
- 特征计算步骤
- 在DoG(高斯函数差分 Difference of Gaussian)尺度空间中获取极值点,即关键点
LoG尺度空间和DoG尺度空间
- 对关键点处理
位置插值(获得精确的关键点)
去除边缘点
- 关键点的方向估计
- 关键点描述子的生成(这样才有良好的不变性)
区域坐标旋转
计算采样区域的直方图
- 尺度空间
- 使用不同的σ的LoG对图片进行滤波
- 使用LoG,则后续计算量较大,故使用DoG来代替LoG,用差分代替微分
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JFr0FbgB-1616758120699)(./图片/image-20210313161437872.png)]
高斯金字塔就是在传统金字塔的基础上,对每一层用不同的参数σ做高斯模糊,
使得每一层高斯金字塔有多张模糊图像,
这样一组图像是一个octave
octave(i+1) 的第一张(从上往下数)图像是由 octave(i) 中的倒数第三张图像降采样得到
- 步骤详解:
- SIFT-计算高斯差分(DoG)空间[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MlJWJ3fs-1616758120701)(./图片/image-20210313162232358.png)]
- SIFT-获取DoG空间极值点[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OWo8ixbM-1616758120703)(./图片/image-20210313162521782.png)]
- SIFT-DoG空间极值点就是“关键点”
- 圆半径→特征点尺度
- 圆心→特征点坐标
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qqDgcgDx-1616758120705)(./图片/image-20210313162613844.png)]
- SIFT-特征点方向估计
在尺度上计算梯度直方图
8方向 (以特征点为中心、以3x1.5σ为半径)
获取最高值方向为关键点主方向
为了匹配的稳定性,将超过最高值80%的方向,称为辅方向[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HIC5Up4T-1616758120707)(./图片/image-20210313162956382.png)]
更新梯度:
为了保持特征矢量具有旋转不变性,需要以特征点为中心,将特征点附近邻域内的图像旋转一个方向角θ
即,将原图像x轴旋转到与主方向相同的方向。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oTeR2ljF-1616758120709)(./图片/image-20210313163220731.png)]
- SIFT-关键点描述子的生成
在旋转后的坐标上采样16x16的像素窗
(SIFT缺点:计算太复杂,如果不借助硬件加速或专门的图像处理器很难实现)
4x4网格
8方向直方图
总共128维
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OB52CgK3-1616758120712)(./图片/image-20210313163609446.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DXwsgAfy-1616758120714)(./图片/image-20210313163756318.png)]
- SURF ( Speeded-Up Robust Features )算子
是Herbert Bay等人在2006年提出的,它是对SIFT的改进,可将速度提高3倍。
SURF主要是把SIFT中的某些运算作了简化。SURF把SIFT中的高斯二阶微分的模板进行了简化,使得卷积平滑操作仅需要转换成加减运算。>>在方向确定阶段,在圆形区域计算x,y方向的Haar小波响应,找到模最大的扇形方向。
为了找出图像中的特征点,需要对原图进行变换,变换图就是原图每个像素的Hessian矩阵行列式的近似值构成的
求Hessian时要先高斯平滑,然后求二阶导数,这对于离散的像素点而言,是用模板卷积形成的,这两种操作合在一起用一个Haar模板代替就可以了。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dmc8KGl7-1616758120716)(./图片/image-20210313171802817.png)]为了保证旋转不变性,在SURF中,统计特征点领域内的Haar小波特征。
即以特征点为中心,计算半径为6s(s为特征点所在的尺度值)的邻域内,统计60度扇形内所有点在x(水平)和y(垂直)方向的Haar小波响应总和。
然后60度扇形以一定间隔进行旋转,最后将最天值那个扇形的方问作为该特征点的主方尚。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JntswlU0-1616758120717)(./图片/image-20210313172230077.png)]在特征点周围取一个正方形框,框的边长为20s(s是所检测到该特征点所在的尺度)。该框带方向,就是检测出来的主方向。
最终,SURF的特征点特征向量的维度为64维。
然后把该框分为16个子区域,每个子区域统计25个像素的水平方向和垂直方向的Haar小波特征,这里的水平和垂直方向都是相对主方向而言的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gYSm7MZt-1616758120718)(./图片/image-20210313172443909.png)]
- SURF总结:
近似SIFT算法,实现快速版
先确定候选点,再找最大值
Haar模板加速3倍
亮度变化下效果好
模糊方面优于SIFT尺度不变上不及SIFT
旋转不变上差很多
- ORB特征描述
SIFT与SURF计算复杂,难以用于实时性特征检测
ORB特征基于FAST角点的特征点检测与BRIEF特征描述技术
- 与SIFT、SURF相比 ORB最大的优势是速度快
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YoqkFaJx-1616758120719)(./图片/image-20210313173117508.png)]
- 基本思路:
它是对FAST角点与BRIEF特征描述子的一种结合与改进。- FAST角点检测的缺点是:
缺乏尺度不变性的;
可以通过构建高斯金字塔,然后在每一层金字塔图像上检测角点,来实现尺度不变性;
- BRIEF的缺点是
缺乏旋转不变性的;
需要给BRIEF加上旋转不变性。
- BRIEF
· BRIEF需要先平滑图像,然后在特征点周围选择一个Patch,在这个Patch内通过一种选定的方法来挑选出来个点对。
· 比较点对中两点像素的大小,进行如下赋值:
· 所有个点对,都进行比较之间,我们就生成了一个长的二进制串。
点对的生成方式(共有5种):1、X和Y都服从在[-S/2,S/2]范围内的均匀分布,且相互独立;
2、X和Y都服从均值为0,方差为S2/25的高斯分布,且相互独立,即X和Y都以原点为中心,进行同方差的高斯分布;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0oCj3myQ-1616758120720)(./图片/image-20210313173655450.png)]