8月19日计算机视觉理论学习笔记——图像特征与描述


前言

本文为8月19日计算机视觉理论学习笔记——图像特征与描述,分为两个章节:

  • 颜色特征;
  • 几何特征。

一、颜色特征

1、量化颜色直方图

  • 优势: 计算高效;
  • 劣势:
    • 量化问题;
    • 稀疏。

1

2、聚类颜色直方图

  • 适用颜色空间: Lab等。
  • 操作:
    • 使用聚类算法对所有像素点的颜色向量进行聚类;
    • 单元(bin)由聚类中心代表。

2

  • Lab空间:
    • L 表示像素的亮度,取值范围:[0, 100],从纯黑到纯白;
    • a 表示从品红色到深绿色,取值范围:[127, -128];
    • b 表示从黄色到蓝色,取值范围:[127, -128]。

3


二、几何特征

1、边缘(Edge)

像素明显变化的区域,用于:

  • 物体识别;
  • 几何、视角变换。

4

像素值函数快速变化的区域 ⇒ 一阶导数极值区域。

5

  • 边缘提取: 先高斯去噪,再使用一阶导数获取极值。

6
h σ ( u , v ) = 1 2 π σ 2 e − u 2 + v 2 2 σ 2   ∂ ∂ x h σ ( u , v )   ⇒ h x ( x , y ) = ∂ h ( x , y ) ∂ x = − x 2 π σ 4 e − x 2 + y 2 2 σ 2   ⇒ h y ( x , y ) = ∂ h ( x , y ) ∂ y = − y 2 π σ 4 e − x 2 + y 2 2 σ 2 h_{\sigma}(u,v) = \frac{1}{2\pi \sigma^2} e^{-\frac{u^2+v^2}{2\sigma^2}}\\\ \frac{\partial}{\partial x} h_{\sigma} (u, v)\\\ ⇒ h_x(x, y) = \frac{\partial h(x, y)}{\partial x} = \frac{-x}{2\pi \sigma^4}e^{-\frac{x^2 + y^2}{2\sigma^2} }\\\ ⇒ h_y(x, y) = \frac{\partial h(x, y)}{\partial y} = \frac{-y}{2\pi \sigma^4}e^{-\frac{x^2 + y^2}{2\sigma^2} } hσ(u,v)=2πσ21e2σ2u2+v2 xhσ(u,v) hx(x,y)=xh(x,y)=2πσ4xe2σ2x2+y2 hy(x,y)=yh(x,y)=2πσ4ye2σ2x2+y2

  • 梯度幅值/强度:
    • 水平方向: ▽ f = [ ∂ f ∂ x , 0 ] \bigtriangledown f = [\frac{\partial f}{\partial x}, 0 ] f=[xf,0].
    • 垂直方向: ▽ f = [ 0 , ∂ f ∂ y ] \bigtriangledown f = [0, \frac{\partial f}{\partial y} ] f=[0,yf].
    • 有角度: ▽ f = [ ∂ f ∂ x , ∂ f ∂ y ] \bigtriangledown f = [\frac{\partial f}{\partial x}, \frac{\partial f}{\partial y} ] f=[xf,yf]
    • 梯度变化最快的方向: a r c t a n ( h y ( x , y ) h x ( x , y ) ) arctan(\frac{h_y(x, y)}{h_x(x, y)} ) arctan(hx(x,y)hy(x,y)).

7
8
9

2、关键点

稳定局部特征点:

  • 可重复性、显著性;
  • 抗图片变换:
    • 外貌变换(亮度、光照);
    • 几何变换(平移、选择、尺度)。

(1)、Harris 角点

在任何方向上移动小观察窗,导致大的像素变动。

10- 数学模型: 偏移(u, v)后窗内图像的变化:
E ( u , v ) = ∑ x , y w ( x , y ) [ I ( x + u ,   y + v ) − I ( x , y ) ] E(u, v) = \sum_{x, y} w(x, y)[I(x+u,\ y+v) - I(x, y)] E(u,v)=x,yw(x,y)[I(x+u, y+v)I(x,y)]
其中, w ( x , y ) w(x, y) w(x,y) 为窗口函数, I ( x + u ,   y + v ) I(x+u,\ y+v) I(x+u, y+v) 位移后的强度, I ( x , y ) I(x, y) I(x,y) 为像素强度。

  • 如何判断:
    • 直线:一个特征值大,另一个特征值小;
    • 平面:两个特征值都小,且近似相等;
    • 角点:两个特征值都大,且近似相等。

11
代码如下:

filename = r'./chessboard.png'
img = cv.imread(filename)

gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
gray = np.float32(gray)
dst = cv.cornerHarris(gray, 2, 3, 0.04)
dst = cv.dilate(dst, None)

# Threshold for an optimal value, it may vary depending on the image
img[dst>0.01*dst.max()] = [0, 0, 255]
cv.imshow('dst', img)
if cv.waitKey(0) & 0xff == 27:
    cv.destroyAllWindows()

(2)、FAST 角点

一种快速角点特征检测算法。

  • 检测:
    • 确定一个阈值t,观察以某像素点为中心的一个半径为3像素的园(16个像素);
    • 若在这个圆上有n(12)个连续的像素点,它们的像素值要么都比 I p + t I_p + t Ip+t 大,要么都比 I p − t I_p - t Ipt 小,则 p p p 就是一个角点。

3、斑点(Blob)

一阶导极值点 ⇒ 二阶导零点。
首先对图像进行高斯卷积滤波降噪,再采用 Laplace 算子进行边缘检测。
12

  • 高斯拉普拉斯滤波/Laplacian of Gaussian(LoG):
    G ( x , y , σ ) = 1 2 π σ 2 e − u 2 + v 2 2 σ 2   ▽ 2 G = − 2 σ 2 + x 2 + y 2 2 π σ 6 e − x 2 + y 2 2 σ 2 G(x, y, \sigma) = \frac{1}{2\pi \sigma^2} e^{-\frac{u^2+v^2}{2\sigma^2}}\\\ \bigtriangledown^2G = \frac{-2\sigma ^2+x^2+y^2}{2\pi \sigma^6} e^{-\frac{x^2+y^2}{2\sigma ^2} } G(x,y,σ)=2πσ21e2σ2u2+v2 2G=2πσ62σ2+x2+y2e2σ2x2+y2
    σ \sigma σ 较小时,可识别出更细节的边缘。

LoG 图找到极值点 ==> 斑点。

拉普拉斯算子锐化:

# 读入原图像
img = Image.open(r'./butterfly.jpg')
img.show()

# 转为灰度图,以减少计算的维度
img_gray = img.convert('L')
img_gray.show()

# 得到像素矩阵
img_arr = np.array(img_gray)
h = img_arr.shape[0] # 行
w = img_arr.shape[1] # 列

# 拉普拉斯算子锐化图像,用二阶微分
new_img_arr = np.zeros((h, w))
for i in range(2, h-1):
    for j in range(2, w-1):
        new_img_arr[i][j] = img_arr[i+1, j] + img_arr[i-1, j] + \
                            img_arr[i, j+1] + img_arr[i, j-1] - \
                            4*img_arr[i, j]
        
# 锐化后的图像与原图像相加
laplacian_img_arr = np.zeros((h, w))
for i in range(2, h-1):
    for j in range(2, w-1):
        laplacian_img_arr[i][j] = new_img_arr[i][j] + img_arr[i][j]

img_laplacian = Image.fromarray(np.uint8(new_img_arr))
img_laplacian.show()

img_laplacian2 = Image.fromarray(np.uint8(laplacian_img_arr))
img_laplacian2.show()

but1
but2

4、局部特征 SIFT

基于尺度空间不变的特征,有以下特点:

  • 不变性;
  • 独特性;
  • 多量性;
  • 计算快。

尺度空间:

  • 使用不同的 σ \sigma σ 的LOG对图片进行滤波;
  • 使用 DOG 代替 LOG,用差分代替微分:
    ▽ 2 G = − 2 σ 2 + x 2 + y 2 2 π σ 6 e − x 2 + y 2 2 σ 2 ⇒   ▽ 2 G = G ( x , y , k σ ) − G ( x , y , σ ) k σ − σ \bigtriangledown^2G = \frac{-2\sigma ^2+x^2+y^2}{2\pi \sigma^6} e^{-\frac{x^2+y^2}{2\sigma ^2} } ⇒ \\\ \bigtriangledown^2G = \frac{G(x, y, k\sigma ) - G(x ,y, \sigma )}{k\sigma -\sigma } 2G=2πσ62σ2+x2+y2e2σ2x2+y2 2G=σG(x,y,)G(x,y,σ)

计算高斯差分(DoG)空间:

13
特征点方向估计:

  • 在尺度上计算梯度直方图;
  • 获取最高值方向为关键点主方向;
  • 辅方向:超过最高值80%的方向。

14
代码如下:

img = cv.imread(r'./home.jpg')
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
sift = cv.SIFT_create()
kp = sift.detect(gray, None)
img = cv.drawKeypoints(gray, kp, img)

cv.imshow('SIFT', img)
cv.imwrite('sift_keypoints.jpg', img)
cv.waitKey(0)
cv.destroyAllWindows()

15

5、局部特征 SURF

对 SIFT 的改进,速度提高3倍,在亮度变化下效果好,模糊方面优于 SIFT,但尺度不变上不及 SIFT,旋转不变上差很多。

  • 步骤:
    • 统计特征点领域内的 Haar 小波特征;
    • 以特征点为中心,计算半径为6s的邻域内,统计60度扇形内所有在x和y方向的 Haar 小波响应总和;
    • 60度扇形以一定间隔进行旋转,将最大值那个扇形的方向作为该特征点的主方向。

15
代码如下:

img = cv.imread(r'./butterfly.jpg', 0)

surf = cv.SURF_create(400)
surf = setHessianThreshold(50000)

kp, des = surf.detectAndCompute(img, None)

img2 = cv.drawKeypoints(img, kp, None, (255, 0, 0), 4)
cv.imshow('surf', img2)

cv.waitKey(0)
cv.destroyAllWindows()

6、ORB 特征描述

基于 FAST 角点的特征点检测与 BRIEF 特征描述技术。

16
代码如下:

img1 = cv.imread(r'./box.png', 0) # queryImage
img2 = cv.imread(r'./box_in_scene.png', 0) # trainImage

# 初始化 ORB detecter
orb = cv.ORB_create()
# 找到 keypoints and descriptors
kp1, des1 = orb.detectAndCompute(img1, None)
kp2, des2 = orb.detectAndCompute(img2, None)

# create BFMatcher object
bf = cv.BFMatcher(cv.NORM_HAMMING, crossCheck=True)
# Match descriptions
matches = bf.match(des1, des2)
# 根据距离排序
matches = sorted(matches, key=lambda x: x.distance)
# Draw first 10 matches
img3 = cv.drawMatches(img1, kp1, img2, kp2, matches[:20], None, flags=2)
plt.imshow(img3), plt.show()

17

7、LBP 局部二值模式

将每个像素点与周围点大小比较:

  • 半径为 R 的圆上,均匀采样 P 个点;
  • 大小量化为 0 或 1.
    多个 bit 组成一个数,统计每个数的直方图。

17


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值