(二)OpenCV特征提取与检测_03_Shi-Tomasi角点检测

  1. Shi-Tomasi角点检测
    跟Harris角点检测的理论几乎完全一致,唯一不同的是 在使用矩阵特征值计算角度响应的时候公式不一样
  2. 基于Harris角点检测,只要两个特征值中较小的一个特征值min(λ1,λ2)大于最小的阈值就会产生良好的角点。
  3. R = min(λ1,λ2)
goodFeaturesToTrack(
InputArray 	image,
OutputArray 	corners,
int		maxCorners,	//表示返回角点的数目,如果检测出来角点数目大于最大数目则返回响应值最强前规定数目。
double		qualityLevel,	//表示最小可接受的向量值1500, 0.01,15
double		minDistance,	//两个角点之间的最小距离(欧几里得距离)
InputArray 	mask=noArray(),
int 		blockSize=3,	//计算导数微分不同的窗口大小
bool 		useHarrisDetector=false,//是否使用Harris角点检测
double 		k=0.04)
#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;
void Shi_Tomasi_Demo
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
特征提取是计算机视觉中非常重要的一个部分,它可以从图像中提取出有用的信息,为后续的图像处理、分类、识别等任务提供基础数据。在你所提到的特征提取部分中,包括了纹理特征和点特征两个方面,下面分别进行介绍: 1. 纹理特征 纹理是指图像中的一些重复模式,例如布料、木纹、墙壁等,它们在视觉上具有一定的规律性和连续性。纹理特征提取是在图像中寻找纹理的一些统计规律,通过这些规律来描述纹理的特征。常用的纹理特征提取方法包括Gabor特征和LBP特征。 (1)Gabor特征提取 Gabor滤波器是一种基于人类视觉系统的滤波器,它能够提取图像中的纹理信息。Gabor滤波器可以看作是一个正弦波与高斯函数的乘积,具有一定的方向选择性和尺度选择性。使用Gabor滤波器可以得到一组复数值图像,其中每个像素对应一个Gabor滤波器的响应值。这些响应值可以用来表示图像的纹理信息。具体的提取步骤可以参考以下代码: ```python import cv2 import numpy as np # 定义Gabor滤波器参数 ksize = 31 # 滤波器大小 sigma = 5 # 高斯核标准差 theta = 0 # 滤波器方向,0表示水平 lambd = 10 # 波长 gamma = 0.5 # 椭圆度,越小表示滤波器越圆形 psi = 0 # 相位偏移 # 创建Gabor滤波器 kernel = cv2.getGaborKernel((ksize, ksize), sigma, theta, lambd, gamma, psi) # 加载图像并进行滤波 img = cv2.imread('image.jpg') img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) img_gabor = cv2.filter2D(img_gray, cv2.CV_32F, kernel) # 显示滤波结果 cv2.imshow('Gabor Filter', img_gabor) cv2.waitKey(0) cv2.destroyAllWindows() ``` (2)LBP特征提取 LBP(Local Binary Pattern)是一种局部纹理特征描述符,它能够描述图像中像素点周围的纹理信息。LBP算法的基本思想是将每个像素与其周围的8个像素进行比较,将像素值比中心像素大的设置为1,否则设置为0,然后将这些进制位组成一个8位进制数,即为该像素点的LBP值。对于图像中的每个像素都可以计算出其对应的LBP值,从而得到一个LBP图像。LBP特征可以通过直方图统计等方式进行提取。以下是使用OpenCV进行LBP特征提取的示例代码: ```python import cv2 import numpy as np # 定义LBP参数 radius = 1 # 半径 n_points = 8 * radius # 领域像素点数 # 加载图像并进行LBP特征提取 img = cv2.imread('image.jpg') img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) img_lbp = cv2.spatialGradient(img_gray, radius, n_points, cv2.SCALING_NON_UNIFORM) # 计算LBP特征直方图 hist, _ = np.histogram(img_lbp.ravel(), bins=np.arange(0, 256), range=(0, 255)) # 显示LBP特征直方图 plt.bar(np.arange(256), hist) plt.show() ``` 2. 点特征提取 点特征是指在图像中具有明显区别的关键点,例如角点、边缘点等。点特征提取是在图像中找到这些关键点的算法。常用的点特征提取算法包括Harris、Shi-Tomasi、FAST、SIFT和ORB等。 在GUI界面中实现点特征提取,可以通过OpenCV的GUI工具箱实现。以下是一个使用Harris角检测的示例代码: ```python import cv2 # 加载图像并进行角检测 img = cv2.imread('image.jpg') img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) img_gray = np.float32(img_gray) dst = cv2.cornerHarris(img_gray, 2, 3, 0.04) # 标记角点 dst = cv2.dilate(dst, None) img[dst > 0.01 * dst.max()] = [0, 0, 255] # 显示结果 cv2.imshow('Harris Corner Detection', img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 除了Harris角检测,还可以使用Shi-Tomasi检测、FAST、SIFT和ORB等算法进行点特征提取。这些算法的具体使用方法可以参考OpenCV官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值