一、角点特征
在计算机视觉中,角点(或称为兴趣点)是图像中的一个重要特征。角点通常出现在物体的边界、纹理变化较大的地方或者不同表面的交界处。这些点具有良好的稳定性和可重复性,因此在图像匹配、目标跟踪、三维重建等领域有广泛的应用。
1、什么是角点
角点是图像中局部区域内的灰度值变化显著的点。具体来说,如果在一个小区域内,无论你朝哪个方向移动一小段距离,灰度值都有显著的变化,那么这个点就是一个角点。
2、常见的角点检测算法
【1】Harris角点检测:通过计算每个像素点的自相关矩阵来判断该点是否为角点。
【2】Shi-Tomasi角点检测:是对Harris角点检测的一种改进,选择最小的特征值作为角点响应函数。
【3】FAST角点检测:快速特征点检测,适用于实时应用。
【4】ORB(Oriented FAST and Rotated BRIEF):结合了FAST和BRIEF的优点,用于快速特征点检测和描述。
3、例子
假设你有一张照片,照片中有一个立方体。立方体的每个顶点处,由于三个面的交界,形成了明显的灰度变化。这些顶点就是角点。如果我们用计算机视觉的方法来检测这些角点,可以帮助我们识别和跟踪立方体的位置和姿态。
Python实现:
【1】读取图像:使用`cv2.imread`读取图像,并将其转换为灰度图像。
【2】Harris角点检测:使用`cv2.cornerHarris`函数进行角点检测。参数`blockSize`、`ksize`和`k`分别表示邻域大小、Sobel算子的大小
和Harris角点检测的自由参数。
【3】膨胀处理:使用`cv2.dilate`对检测结果进行膨胀处理,使角点更加明显。
【4】设置阈值:将大于阈值的点标记为角点。
【5】显示结果:使用`matplotlib`库显示原图和角点检测结果。
'''
import cv2
import numpy as np
import matplotlib.pyplot as plt
import os
import matplotlib as mpl
# 设置Matplotlib的字体为SimHei,显示中文
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 用黑体显示中文
mpl.rcParams['axes.unicode_minus'] = False # 正常显示负号
# 读取图像
image = cv2.imread('data/jiaodian.jpg', cv2.IMREAD_GRAYSCALE)
# 确保图像已正确加载
if image is None: