Contents

传统图像算法

传统图像算法

特征提取

Harris角点检测

Harris角点检测原理与OpenCV源码解读-1.pdf

检测图像中的角点,用于特征匹配和识别

角点是向各个方向移动窗口,灰度值都发生较大变化的点

/posts/algorithm_knowledge_base/1_%E4%BC%A0%E7%BB%9F%E5%9B%BE%E5%83%8F%E7%AE%97%E6%B3%95/image%2042.png

主要是根据矩阵分析的方法,构造了角点响应函数,以此作为判定依据

SIFT(尺度不变特征变换)

提取局部特征点,在尺度和旋转上具有不变性,常用于图像匹配。

Sift算法原理与OpenCV源码解读.pdf

特征点匹配——SIFT算法详解

第一步是特征点检测,第二步是生成特征描述

  1. 尺度空间上极值点检测
  2. 关键点精确定位
  3. 关键点方向分配(根据36个bins的峰值确定主导方向)
  4. 生成特征描述子(周围分为4 × 4个区域,各计算8个方向的梯度,128维特征描述子)
  • 特征点的 36 个方向是用来确定每个特征点的主方向,以便于在旋转和缩放变化中保持一致性。
  • 描述子的 8 个方向则是在特征点的主方向基础上,通过对局部区域的梯度信息进行统计生成的,确保描述子能够有效捕捉周围的局部特征。
  • 这两者的结合使得 SIFT 能够在各种图像变换下保持良好的特征匹配性能。

主方向与描述子的关系

  • 旋转不变性:特征点的主方向用于对描述子进行旋转对齐。这样可以确保即使图像发生旋转,描述子仍然可以保持一致性。
    • 具体来说,生成描述子时,首先将局部区域的梯度信息相对于特征点的主方向进行旋转。这种方法使得描述子在不同视角下对同一物体的表示是一致的。
  • 特征匹配:由于描述子是相对于主方向计算的,因此在特征匹配时,可以更容易地找到相似的特征点。例如,在两幅图像中找到具有相同描述子的特征点时,它们的主方向一致性提供了额外的匹配准确性。

首先构造高斯金字塔尺度空间,对图像进行高斯模糊不断降采样

具体分为4步:

• 第一阶段的计算搜索所有的尺度上的所有图像区域。
该算法利用高斯函数的微分来识别对尺度和方向不变性的潜在兴趣点。

• 第二阶段是关键点定位,在每个候选位置,一个精细的模型用于确定位置和尺度。
关键点是根据它们的稳定性来选择的。

离散空间的极值点并不一定是真的极值点,通过函数拟合精确定位
• 第三阶段是方向分配,基于局部图像梯度方向为每个关键点位置分配一个或多个方向。
所有的后续操作都是对已相对于每个特征的指定方向、比例和位置进行变换的图像执行的,从而为这些变换提供不变性。

• 最后生成关键点描述子(descriptor,又叫描述符),在每个关键点周围区域的选定比例上测量局部图像梯度。这些被转换成一种表示方法,允许较大的局部形状失真和照明变化。

对描述子使用关键点所在尺度空间内4 × 4 个子区域中计算8 个方向的梯度信息,也就是总共4 × 4 × 8 = 128 维向量。

SURF(加速稳健特征)

比SIFT更快,性能也较好,用于特征点提取和描述。

ORB

slam中使用较多

边缘检测

canny

Canny边缘检测

Canny算子是常用的边缘检测算法,其执行步骤如下:

  1. 应用高斯滤波器平滑图像以去除噪声
  2. 计算图像的强度梯度
  3. 应用非最大抑制(Non-maximum suppression)消除边缘检测的虚假响应

(不同于目标检测NMS)

  1. 应用双阈值确定潜在边缘

根据梯度强度将像素分为三类:

  • 强边缘:梯度强度大于高阈值的像素,被直接标记为边缘。
  • 弱边缘:梯度强度在低阈值和高阈值之间的像素,可能是边缘,但需要进一步判断。
  • 非边缘:梯度强度小于低阈值的像素,被抑制为非边缘。
  1. 通过滞后(hysteresis)方法跟踪边缘:通过抑制所有其他弱边缘和未连接到强边缘的边缘,完成边缘检测

图像拼接

特征点法(最常用)

  • 特征提取

    • 使用特征检测算法(如 SIFT、SURF、ORB 等)从每张图像中提取关键点,并计算对应的特征描述子。
  • 特征匹配

    • 使用最近邻匹配或基于距离比率的匹配(如 KNN 匹配)来找到不同图像中的相似特征点对。FLANN快速最近邻
  • 求解单应矩阵(Homography Matrix)

    • 使用 RANSAC 等鲁棒算法估计两张图像间的单应矩阵,以剔除错误匹配点,并获取精确的几何变换关系。
  • 图像变换与对齐

    • 使用单应矩阵将图像进行几何变换(如透视变换或仿射变换),实现图像的对齐。

    总结对比

    特性仿射变换单应变换
    矩阵大小3×23×3
    自由度6 个参数8 个参数(一个比例因子)
    支持变换类型旋转、平移、缩放、剪切透视变换(包含仿射变换)
    适用场景小视角变换、图像小幅旋转、平移、缩放大视角变换、透视失真、图像拼接
    准确性适合简单几何变形适合复杂几何变形
    适用平面适合在同一平面内的平移或旋转适用于不同平面视角拍摄的透视场景
  • 图像融合

    • 采用多种融合算法(如渐变融合、拉普拉斯融合)对重叠区域进行平滑过渡,减少拼接痕迹。

光流法

lk光流 稀疏光流

基于灰度不变假设,适用于特征缺失的情况

光流法是一种基于图像运动估计的拼接方法,主要应用于相邻帧的运动估计。

适合于处理连续帧图像间的拼接,尤其在视频帧拼接、微小相对运动的场景中效果较好。

光流法基于假设:图像中相邻帧之间的亮度在运动过程中是保持恒定的,即光流约束方程。它通过对相邻帧图像像素点进行运动估计,从而计算出每个像素的位移向量,进而实现图像拼接。

光流约束方程

图像配准

基于特征点

光流法

模板匹配 通过计算两幅图像之间的互相关系数,找到最佳的平移量进行对齐

去噪、增强

滤波器(平滑、积分运算)

  • 均值滤波:通过计算邻域像素的均值来平滑图像,减少噪声。
  • 高斯滤波:使用高斯函数作为卷积核进行平滑,能更好地保留边缘信息。
  • 中值滤波:用邻域像素的中值替代中心像素,有效去除椒盐噪声。

锐化、微分运算

直方图均衡化

通过调整图像的直方图,使得图像的对比度得到增强,尤其适用于低对比度图像。

变为灰度分布均匀的新图像

形态学处理

  • 膨胀和腐蚀:用于图像的形态学处理,膨胀增加物体的边界,腐蚀则减小物体的边界。
  • 开运算和闭运算:开运算用于去除小的物体,闭运算用于填补小的空洞。

详见OpenCV章节


HDR

https://linux.cn/article-9754-1.html

https://www.orzzz.cn/index.php/archives/44/

CRF估计:与计算机视觉中的许多问题一样,找到 CRF 的问题本质是一个最优解问题,其目标是使由数据项和平滑项组成的目标函数最小化。 这些问题通常会降维到线性最小二乘问题,这些问题可以使用奇异值分解Singular Value Decomposition(SVD)来解决,奇异值分解是所有线性代数包的一部分。Debevec算法

hdr合成:针对某一个位置的像素点,将不同曝光图片的这个位置的辐照度进行加权平均,求出最终 hdr 图片的这个位置的像素值。多种策略,中间亮度权重更高

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import numpy as np
import cv2

np.set_printoptions(suppress=True)

# 1、读图
img_fn = ["img_0.033.jpg", "img_0.25.jpg", "img_2.5.jpg", "img_15.jpg"]
img_list = [cv2.imread(fn) for fn in img_fn]
exposure_times = np.array([0.033, 0.25, 2.5, 15.0], dtype=np.float32)

# 2、对齐
alignMTB = cv2.createAlignMTB()
alignMTB.process(img_list, img_list)

# 3、计算响应曲线crf
calibrateDebevec = cv2.createCalibrateDebevec()
responseDebevec = calibrateDebevec.process(img_list, exposure_times)
print(type(responseDebevec),responseDebevec.shape)
print(responseDebevec)

# 4、hdr融合
mergeDebevec = cv2.createMergeDebevec()
hdrDebevec = mergeDebevec.process(img_list, exposure_times, responseDebevec)
cv2.imwrite("hdrDebevec.hdr", hdrDebevec)

# 5、色调映射
tonemapMantiuk = cv2.createTonemapMantiuk(2.2, 0.85, 1.2)
ldrMantiuk = tonemapMantiuk.process(hdrDebevec)
ldrMantiuk = 3 * ldrMantiuk
cv2.imwrite("ldr-Mantiuk.jpg", ldrMantiuk * 255)

变换技术

傅里叶变换

将图像从空间域转换到频率域,常用于图像分析和滤波。

空间域是指图像本身的像素值分布,它直接描述了图像的视觉内容。

频率域是指图像的频率成分分布,它描述了图像中像素值变化的速率,描述结构特征。空间域和频率域提供了两种不同的视角来分析和处理图像。空间域直接反映了图像的视觉内容,而频率域则揭示了图像中的频率成分及其分布,描述的是整体特征,不直接与空间位置对应

空间域与频率域

  • 空间域:在空间域中,图像是由像素组成的矩阵,每个像素值表示该位置的灰度或颜色值。空间域描述了图像的直接视觉内容。
  • 频率域:在频率域中,图像被分解为不同的频率成分,表示图像中像素值变化的速率频率域描述了图像的结构特征,如边缘和纹理

低频与高频

  • 低频成分:代表图像中的大面积平滑区域,变化缓慢。低频成分在频谱的中心区域,包含了图像的整体轮廓和主要特征。
  • 高频成分:代表图像中的细节和边缘,变化迅速。高频成分在频谱的外围区域,包含了图像的细节和噪声。
  • 频谱图:通过傅里叶变换得到的频谱图直观地显示了图像的频率成分,中心亮表示低频成分强,外围亮表示高频成分强。

幅度谱和相位谱是图像傅里叶变换的两个重要组成部分。幅度谱描述频率成分的强度,反映图像的对比度和亮度;相位谱描述频率成分的相位,反映图像的结构和细节。

图像处理2:二维图像的频谱图理解_图像频谱图的含义-CSDN博客

1、频谱图以图像的中心为圆心,,半径对应频率高低。低频半径小,高频半径大,中心为直流分量,某点的灰度值对应该频率的能量高低。

2、频谱图用来表示图像的频率分布,频率分布是图像的整体特征,因此频谱图与原图像之间并不存在坐标点上的对应关系。

  • 小波变换:用于多分辨率分析,能在不同尺度上表示图像信息。
  • PCA 降维(主成分分析):对原始信息进行重新线性组合,指向信息量更大的方向。

RAW图像

RAW图像保留了传感器的原始数据,没有经过ISP的进一步处理,因此能够为后续的图像处理提供更灵活的调整空间。

https://www.cnblogs.com/powerforme/p/16722603.html

RAW格式文件本质上是一个没有经任何图像处理的源文件,它能原原本本的记录下相机拍摄到的的信息,没有因为图像处理(如锐化、增加色彩对比)和压缩而造成的信息丢失,但需要经过相关的ISP处理才能够呈现出来。

ISP 图像信号处理

ISP(Image Signal Processing)算法是图像信号处理的关键技术,主要应用在相机传感器捕获图像后的处理环节中,将原始传感器数据转换为可视图像。ISP算法通常用于数码相机、智能手机摄像头和监控摄像头等设备中。ISP算法可以包含多个步骤,以实现对色彩、清晰度、动态范围等的优化。

主要ISP算法模块

  1. 去噪(Denoising)

    • 图像传感器会在低光环境和高增益设置下产生噪声。去噪算法(如中值滤波、均值滤波、双边滤波、非局部均值滤波等)可以减少这些噪声,同时保持边缘细节。
  2. 黑电平校正(Black Level Correction)

    • 由于传感器的基准噪声,所有像素的起始电平并非零。黑电平校正可以将电平重新归一化,调整黑色像素的基准。
  3. 白平衡(White Balance)

    • 不同光源会导致色温不同,白平衡校正能让白色区域在不同光源下看起来都接近白色。自动白平衡算法可以调整RGB通道的增益,以实现色彩还原。
  4. 去伪色(Demosaicing)

    • 图像传感器通常使用拜耳滤波器捕获彩色信息,每个像素只能记录一种颜色。去伪色算法通过插值填充其他颜色的信息,从而生成完整的RGB图像。
  5. 色彩校正(Color Correction)

    • 传感器的RGB响应与人眼感知的颜色不同。色彩校正矩阵(CCM)可以校准RGB信号,使得图像的色彩更符合真实场景。
  6. 伽马校正(Gamma Correction)

    • 伽马校正用于调整图像的亮度分布,使图像在视觉上更加自然。此操作根据非线性伽马曲线,将图像的亮暗区域调整到更适合人眼观察的效果。
  7. 锐化(Sharpening)

    • 锐化处理可以增强图像的边缘细节,增加图像的清晰度。常用的锐化算法有拉普拉斯锐化、Unsharp Masking等。
  8. 色调映射(Tone Mapping)

    • 主要用于HDR图像处理,将高动态范围图像映射到低动态范围显示设备上,以适应屏幕显示。常用的色调映射算法包括全局色调映射和局部色调映射。
  9. 伽马校正与亮度增强

    • 伽马校正可以使图像的亮度更符合人眼的感知。同时,通过亮度增强,图像在低光条件下会显得更明亮。
  10. 畸变校正(Distortion Correction)

    • 广角镜头或其他特殊镜头会导致图像变形。畸变校正算法可以纠正镜头引起的桶形或枕形畸变。
  11. 图像裁剪和缩放(Cropping and Scaling)

    • 为了适应不同显示分辨率和需求,对图像进行裁剪和缩放是必不可少的操作。双线性插值和双三次插值是常用的缩放算法。
  12. 降采样(Downsampling)

    • 在某些应用场景中,如视频流传输中需要更低的分辨率。降采样通过减少图像分辨率,来降低带宽需求。
  13. 去马赛克(Demosaicing)

    由于大多数图像传感器采用拜耳滤波器阵列(Bayer Filter Array),每个像素只能记录红、绿或蓝中的一种颜色,去马赛克算法会通过插值计算还原每个像素的完整RGB信息,以生成彩色图像。

3A算法

3A算法(Auto Focus、Auto Exposure、Auto White Balance)是相机图像处理中的三项核心自动化技术,用于自动优化图像质量。

1. 自动对焦(Auto Focus,AF)

自动对焦算法用于将目标对象调至清晰成像的位置,确保图像具有最佳锐度。常见的自动对焦技术包括:

  • 相位检测自动对焦(PDAF):通过检测图像传感器上成对的光线相位差,快速计算出焦点位置,适用于快速运动物体。
  • 对比度检测自动对焦:通过分析图像对比度的变化来确定焦点,但速度较慢。
  • 激光自动对焦(Laser AF):利用激光测距,可以在暗光条件下快速对焦。

在3A算法中,自动对焦模块通过对场景的动态分析,选择合适的对焦模式,并不断调整以适应场景的变化。

2. 自动曝光(Auto Exposure,AE)

自动曝光算法通过调节图像传感器的曝光参数(如快门速度、光圈大小和ISO感光度),确保图像亮度适中,不会过曝或欠曝。AE通常包括以下几种测光模式:

  • 点测光:测量特定区域的亮度,适合高对比度的场景。
  • 中心加权测光:主要测量画面中心的亮度,但也参考边缘区域,适用于大多数场景。
  • 矩阵测光:将画面分为多个区域,综合分析亮度来决定曝光值,是较为智能的一种方式。

AE算法会分析场景的亮度分布和动态范围,并根据不同场景的需要,动态调整曝光参数。

3. 自动白平衡(Auto White Balance,AWB)

自动白平衡算法通过调节红、绿、蓝三通道的增益,以还原场景中的真实色彩,防止不同光源色温带来的色偏。常见的白平衡算法有:

  • 灰度世界假设:假设图像中所有颜色的平均值是中性灰,从而推导出适合的色温。
  • 动态白平衡检测:通过实时分析图像中高光、中间调和阴影区域的颜色信息,动态调整白平衡。
  • 基于场景的白平衡:在特定场景(如日光、荧光灯)下,直接使用预设的白平衡参数。

AWB算法会分析场景的光源特性,自动调节三通道的增益值,使得白色区域尽可能接近真实白色,从而使图像的色彩更加自然。