SIFT四部曲之一:高斯滤波

一.高斯滤波器

高斯滤波器:使用正态分布计算的一种卷积模板,利用高斯滤波器和图像进行卷积运算,可对图像进行模糊处理。公式如下(二维高斯滤波器):

G ( x , y ) = 1 2 π σ 2 e − ( x − m / 2 ) 2 + ( y − n / 2 ) 2 2 σ 2 \mathrm{G}(x, y)=\frac{1}{2 \pi \sigma^{2}} e^{-\frac{(x-m / 2)^{2}+(y-n / 2)^{2}}{2 \sigma^{2}}} G(x,y)=2πσ21e2σ2(xm/2)2+(yn/2)2

利用python绘制高斯滤波器,代码如下:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

x = np.linspace(-3, 3, 1000)
y = np.linspace(-3, 3, 1000)
x, y = np.meshgrid(x, y)
w0 = 1
gaussian = np.exp(-((pow(x, 2) + pow(y, 2)) / pow(w0, 2)))

# 二维面振幅分布图
plt.figure()
plt.imshow(gaussian)

# 三维曲面振幅分布图
fig = plt.figure()
ax = Axes3D(fig)
ax.plot_surface(x, y, gaussian, cmap='jet')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show()

绘制的二维高斯曲面如下:

在这里插入图片描述
在这里插入图片描述

当然上面只是一个连续的曲面,在对图像进行高斯模糊的过程中需要的是高斯模板,这个模板和图像卷积便可得到高斯模糊图像。

二.高斯金字塔

高斯金字塔主要是为了得到不同尺度的图片,这些图片的尺度必须是连续的,所以要对图片进行高斯滤波。高斯金字塔是一个原始图像,产生几组(octave)每一组中又包含着几层(interval)。结构如下:
在这里插入图片描述

高斯金字塔的构建主要包括以下4个过程:

  • 1.金字塔的阶数(O)的确定
  • 2.每一组层数(S)的确定
  • 3.每一层的尺度(N)的确定
  • 4.下一组的图片降采样母本的确定
  1. 金字塔的阶数(O):一般为4,也可以根据图像的大小来选择,但需要满足下列关系:

    ∣ O = [ log ⁡ 2 ( min ⁡ ( M , N ) ) ] − 3 \mid \mathrm{O}=\left[\log _{2}(\min (M, N))\right]-3 O=[log2(min(M,N))]3

    其中M,N为图像的行数和列数。

  2. 每一阶的层数(S):一般选择5或者6,一般选择6的时候效果最好。在这边就要根据前面的说明,特征点的选举是要在相邻的两层差分金字塔上面进行检测的,所以要得到N个尺度的特征点,就要在层的差分金字塔上检测,(自己画个图就ok了),然而要产生N+2层的差分金字塔,就要有N+3层的高斯金字塔,这样相邻的相减,才能产生N+2层差分。注意:这里的检测都是同阶里面不同层的操作。所以S = N + 3。记住这个N,有用!

  3. 尺度因子N的选择

猜你喜欢

转载自blog.csdn.net/qq_30150579/article/details/129790908