图像尺度空间
在一定的范围内,无论物体是大还是小,人眼都可以分辨出来。然而,计算机要具备相同的能力却很难。因此,为了让机器能够对物体在不同尺度下有一个统一的认知,就需要考虑图像在不同尺度下所存在的特点。这就是图像尺度空间的概念。
1. 尺度空间的定义
尺度空间是指通过对图像进行多尺度处理,生成一系列图像的集合。每个图像代表了原始图像在不同尺度下的特征。这种处理方式使得计算机能够在不同的尺度上识别和分析图像中的物体。
2. 高斯模糊与尺度空间
尺度空间的获取通常使用高斯模糊来实现。高斯模糊是一种通过卷积操作将图像平滑化的技术,其核心思想是用高斯函数对图像进行加权平均,从而消除图像中的噪声和细节。
2.1 高斯函数
高斯函数的数学表达式为:
G ( x , y , σ ) = 1 2 π σ 2 e − x 2 + y 2 2 σ 2 G(x, y, \sigma) = \frac{1}{2\pi\sigma^2} e^{-\frac{x^2 + y^2}{2\sigma^2}} G(x,y,σ)=2πσ21e−2σ2x2+y2
其中:
- G ( x , y , σ ) G(x, y, \sigma) G(x,y,σ) 是高斯函数的值。
- ( x , y ) (x, y) (x,y) 是图像中的坐标。
- σ \sigma σ 是标准差,控制模糊的程度。
2.2 多尺度表示
通过改变标准差 σ \sigma σ 的值,可以生成不同尺度的图像。具体步骤如下:
-
选择不同的 σ \sigma σ 值:根据需要选择一系列的 σ \sigma σ 值,通常从小到大。
-
应用高斯模糊:对原始图像应用高斯模糊,生成不同尺度的图像。
-
构建尺度空间:将所有模糊后的图像组合在一起,形成尺度空间。
3. 尺度空间的应用
尺度空间在计算机视觉和图像处理领域有广泛的应用,包括但不限于:
-
特征检测:在尺度空间中,可以有效地检测到不同尺度的特征点,如边缘、角点等。这些特征点对于后续的图像分析和处理至关重要。
-
物体识别:通过在尺度空间中对物体进行分析,计算机可以更好地识别和分类不同尺度的物体。
-
图像分割:尺度空间可以帮助在不同尺度下进行图像分割,从而提高分割的准确性。
4. 总结
图像尺度空间是计算机视觉中的一个重要概念,通过高斯模糊等技术实现多尺度图像处理,使得计算机能够在不同尺度上识别和分析图像中的物体。随着计算机视觉技术的发展,尺度空间的应用将越来越广泛,为图像处理和分析提供更强大的支持。
不同σ的高斯函数决定了对图像的平滑程度,越大的σ值对应的图像越模糊。
多分辨率金字塔
多分辨率金字塔
多分辨率金字塔是一种用于图像处理和计算机视觉的技术,旨在通过创建图像的不同分辨率版本来有效地表示和处理图像。金字塔结构使得在不同的尺度上进行图像分析和处理变得更加高效,尤其是在特征提取、图像压缩和图像识别等任务中。
1. 金字塔的构建
多分辨率金字塔通常由多个层级组成,每一层代表图像在不同分辨率下的表示。金字塔的构建过程通常包括以下步骤:
-
原始图像:从原始图像开始,作为金字塔的底层。
-
下采样:通过对原始图像进行下采样(如使用高斯模糊后再进行降采样),生成较低分辨率的图像。下采样可以通过丢弃某些像素或使用卷积操作来实现。
-
重复过程:对每一层生成的图像重复下采样过程,直到达到所需的最小分辨率。
1.1 高斯金字塔
高斯金字塔是最常见的多分辨率金字塔类型。在高斯金字塔中,每一层都是通过对上一层应用高斯模糊和下采样生成的。其构建过程如下:
- 对原始图像应用高斯模糊。
- 将模糊后的图像下采样(例如,按比例缩小为原来的 1/2)。
- 重复上述步骤,直到达到所需的层数。
1.2 拉普拉斯金字塔
拉普拉斯金字塔是另一种金字塔结构,它在高斯金字塔的基础上构建。拉普拉斯金字塔的每一层表示的是当前层与下一层之间的差异,通常用于图像压缩和重建。
- 首先构建高斯金字塔。
- 然后计算每一层与其下层之间的差异,形成拉普拉斯金字塔。
2. 多分辨率金字塔的应用
多分辨率金字塔在多个领域中得到了广泛应用,包括但不限于:
-
特征检测:在多分辨率金字塔中,可以有效地检测到不同尺度的特征点,如边缘、角点等。这对于物体识别和图像匹配非常重要。
-
图像压缩:拉普拉斯金字塔可以用于图像压缩,通过存储金字塔的各层差异而不是完整图像,从而减少存储空间。
-
图像融合:在图像融合任务中,可以将来自不同源的图像在金字塔的不同层次上进行融合,以获得更高质量的合成图像。
-
图像分割:多分辨率金字塔可以帮助在不同尺度下进行图像分割,从而提高分割的准确性。
多分辨率金字塔是一种强大的图像表示技术,通过创建不同分辨率的图像层次,使得在不同尺度上进行图像分析和处理变得更加高效。无论是在特征提取、图像压缩还是图像识别等任务中,多分辨率金字塔都发挥着重要作用,为计算机视觉领域的发展提供了有力支持。
高斯差分金字塔(DOG)
高斯差分金字塔(Difference of Gaussian, DoG)
高斯差分金字塔(DoG)是一种用于图像处理和计算机视觉的多尺度特征提取方法。它通过计算不同尺度下的高斯模糊图像之间的差异来检测图像中的特征,如边缘和角点。DoG 是一种有效的特征检测工具,广泛应用于图像分析、物体识别和计算机视觉中的其他任务。
1. 高斯差分金字塔的构建
高斯差分金字塔的构建过程通常包括以下步骤:
-
构建高斯金字塔:
- 从原始图像开始,生成一系列不同标准差( σ \sigma σ)的高斯模糊图像。每一层的图像都是通过对上一层图像应用高斯模糊得到的。
- 高斯模糊的公式为:
G ( x , y , σ ) = 1 2 π σ 2 e − x 2 + y 2 2 σ 2 G(x, y, \sigma) = \frac{1}{2\pi\sigma^2} e^{-\frac{x^2 + y^2}{2\sigma^2}} G(x,y,σ)=2πσ21e−2σ2x2+y2 - 通过选择一系列的 σ \sigma σ 值,生成高斯金字塔。
-
计算高斯差分:
- 对于相邻的高斯模糊图像,计算它们之间的差异。具体来说,对于每一对相邻的高斯图像 G ( x , y , σ 1 ) G(x, y, \sigma_1) G(x,y,σ1) 和 G ( x , y , σ 2 ) G(x, y, \sigma_2) G(x,y,σ2),计算它们的差值:
D ( x , y , σ 1 , σ 2 ) = G ( x , y , σ 1 ) − G ( x , y , σ 2 ) D(x, y, \sigma_1, \sigma_2) = G(x, y, \sigma_1) - G(x, y, \sigma_2) D(x,y,σ1,σ2)=G(x,y,σ1)−G(x,y,σ2) - 这个差值图像即为高斯差分图像。
- 对于相邻的高斯模糊图像,计算它们之间的差异。具体来说,对于每一对相邻的高斯图像 G ( x , y , σ 1 ) G(x, y, \sigma_1) G(x,y,σ1) 和 G ( x , y , σ 2 ) G(x, y, \sigma_2) G(x,y,σ2),计算它们的差值:
-
构建 DoG 金字塔:
- 将所有的差分图像组合在一起,形成高斯差分金字塔。
2. 高斯差分金字塔的特性
-
特征检测:DoG 可以有效地检测图像中的边缘和角点等特征,因为这些特征在不同尺度下的高斯模糊图像之间会产生明显的差异。
-
尺度不变性:由于 DoG 在多个尺度上进行特征提取,因此它具有一定的尺度不变性,能够识别不同大小的特征。
-
噪声抑制:高斯模糊的应用有助于抑制图像中的噪声,从而提高特征检测的准确性。
3. 应用场景
高斯差分金字塔在多个领域中得到了广泛应用,包括但不限于:
-
特征点检测:DoG 是许多特征点检测算法的基础,如 SIFT(尺度不变特征变换)算法。SIFT 使用 DoG 来检测关键点,并提取其描述符。
-
图像匹配:在图像匹配和拼接任务中,DoG 可以帮助识别和匹配不同图像中的特征点。
-
物体识别:通过提取和匹配特征,DoG 可以用于物体识别和分类。
高斯差分金字塔(DoG)是一种有效的多尺度特征提取方法,通过计算不同尺度下的高斯模糊图像之间的差异,能够有效地检测图像中的特征。它在计算机视觉和图像处理领域中发挥着重要作用,尤其是在特征点检测和物体识别等任务中。随着技术的发展,DoG 的应用和改进将继续推动计算机视觉领域的进步。
定义公式
D ( x , y , σ ) = [ G ( x , y , k σ ) − G ( x , y , σ ) ] ∗ I ( x , y ) = L ( x , y , k σ ) − L ( x , y , σ ) 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) D(x,y,σ)=[G(x,y,kσ)−G(x,y,σ)]∗I(x,y)=L(x,y,kσ)−L(x,y,σ)
DoG空间极值检测
为了寻找尺度空间的极值点,每个像素点要和其图像域(同一尺度空间)和尺度域(相邻的尺度空间)的所有相邻点进行比较,当其大于(或者小于)所有相邻点时,该点就是极值点。如下图所示,中间的检测点要和其所在图像的3×3邻域8个像素点,以及其相邻的上下两层的3×3领域18个像素点,共26个像素点进行比较。
关键点的精确定位
这些候选关键点是DOG空间的局部极值点,而且这些极值点均为离散的点,精确定位极值点的一种方法是,对尺度空间DoG函数进行曲线拟合,计算其极值点,从而实现关键点的精确定位。
消除边界响应后为:
特征点的方向
每个特征点可以得到三个信息(x,y,σ,θ),即位置、尺度和方向。具有多个方向的关键点可以被复制成多份,然后将方向值分别赋给复制后的特征点,一个特征点就产生了多个坐标、尺度相等,但是方向不同的特征点。
生成特征描述
在完成关键点的梯度计算后,使用直方图统计邻域内像素的梯度和方向。
为了保证特征矢量的旋转不变性,要以特征点为中心,在附近邻域内将坐标轴旋转θ角度,即将坐标轴旋转为特征点的主方向。
旋转之后的主方向为中心取8x8的窗口,求每个像素的梯度幅值和方向,箭头方向代表梯度方向,长度代表梯度幅值,然后利用高斯窗口对其进行加权运算,最后在每个4x4的小块上绘制8个方向的梯度直方图,计算每个梯度方向的累加值,即可形成一个种子点,即每个特征的由4个种子点组成,每个种子点有8个方向的向量信息。
论文中建议对每个关键点使用4x4共16个种子点来描述,这样一个关键点就会产生128维的SIFT特征向量。
代码实现
sift = cv2.SIFT_create()函数是使用OpenCV库中的SIFT算法创建一个SIFT对象。调用cv2.SIFT_create()就可以创建一个SIFT对象。SIFT算法是一种用于图像特征提取的算法,可以用于在图像中检测和描述关键点(特征点),以及计算关键点的描述子。
import cv2
import numpy as npimg = cv2.imread('test_1.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
sift = cv2.SIFT_create()
kp = sift.detect(gray, None)
img = cv2.drawKeypoints(gray, kp, img)cv2.imshow('drawKeypoints', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
kp, des = sift.compute(gray, kp)
print (np.array(kp).shape)