Opencv-C++笔记 (23) :图像特征提取(Harris角点检测、Shi-Tomasi角点检测、自定义角点检测)

一、常用图像特征描述

SIFT、SURF、HOG、Haar、LBP、KAZE、AKAZE、BRISK

SIFT

是用于描述图像中的局部特征,在空间尺度(使用高斯卷积核实现多尺度空间)中寻找极值点(LoG近似DoG找到关键点),并且提取出其位置、尺度、旋转不变量,因此具有尺度和旋转不变的性质

SURF

与sift的算法相似,只是sift算法更加稳定,检测得到的特征点更多。但是surf的运算简单,运算时间更短一些。 surf最大的特点是采用HARR 特征以及积分图像。

HOG

方向梯度直方图。用来表示图像的物体特征,算法流程如下: 【图像预处理:伽马校正和灰度化】 -> 【计算每一个像素点的梯度值,得到梯度图】
-> 【计算梯度直方图】 -> 【对16*16大小的block归一化】 -> 【得到HOG特征向量】

Haar

Haar特征是一种反映图像的灰度变化的,像素分模块求差值的一种特征。它分为三类:边缘特征、线性特征、中心特征和对角线特征。用黑白两种矩形框组合成特征模板,矩形特征只对一些简单的图形结构,如边缘、线段较敏感,所以只能描述在特定方向(水平、垂直、对角)上有明显像素模块梯度变化的图像结构。
在这里插入图片描述
详情查看:https://blog.csdn.net/lanxuecc/article/details/52222369

LBP

LBP(Local Binary Pattern,局部二值模式)是一种用来描述图像局部纹理特征的算子;它具有旋转不变性和灰度不变性等显著的优点。它是首先由T. Ojala,M.Pietikäinen, 和D. Harwood 在1994年提出,用于纹理特征提取。而且,提取的特征是图像的局部的纹理特征;
详情查看:https://blog.csdn.net/xidianzhimeng/article/details/19634573

KAZE

KAZE Features 算法是由法国学者在在2012年的ECCV会议 (论文) 中提出的, 是一种比SIFT更稳定的特征检测算法。KAZE特征检测是在图像域中进行非线性扩散处理的过程。

SITF、SURF算法是通过线性尺度空间,在线性尺度空间来检测特征点的,容易造成边界模糊和细节丢失;而KAZE算法是通过构造非线性尺度空间,并在非线性尺度空间来检测特征点,保留了更多的图像细节。
KAZE算法主要包括以下步骤:
(1) 非线性尺度空间的构建;
(2) 特征点的检测与精确定位;
(3) 特征点主方向的确定;
(4) 特征描述子的生成。
关于详情查看:https://www.cnblogs.com/xinyuyuanm/archive/2013/03/25/2980817.html

AKAZE

AKAZE是KAZE的加速版本。KAZE在构建非线性空间的过程中很耗时。 在非线性扩散滤波方面:AKAZE中将Fast Explicit
Diffusion(FED)加入到金字塔框架可以dramatically speed-up。
在描述子方面:AKAZE使用了更高效的Modified Local Difference
Binary(M-LDB),可以从非线性空间中利用梯度信息gradient
information。M-LDB是旋转和尺度不变的,并且对内存的要求更低。
详情链接:https://blog.csdn.net/zcg1942/article/details/84570068
论文及github地址:http://www.robesafe.com/personal/pablo.alcantarilla/kaze.html
在AKAZE算法中默认使用二进制描述符,故汉明距离进行比较

BRISK

Binary Robust Invariant Scalable
Keypoints。它是一种二进制的特征描述算子。它具有较好的旋转不变性、尺度不变性,较好的鲁棒性等。在对有较大模糊的图像配准时,BRISK算法在其中表现最为出色。
在图像配准应用中,速度比较:SIFT<SURF<BRISK<FREAK<ORB。
详情查看:https://www.cnblogs.com/welen/articles/6088639.html、https://blog.csdn.net/Daker_Huang/article/details/84960704 算法流程:
1.特征点检测(建立尺度空间、特征点检测、非极大值抑制、亚像素插值)
2.特征点描述(高斯滤波、局部梯度计算、特征描述符)
3.匹配方法(汉明距离进行比较)
图像特征描述子用于: Detection、Description、Matching

二、Harris角点检测

988 年的文章《A CombinedCorner and Edge Detector》中就已经提出了焦点检测的方法,被称为Harris 角点检测。
关于理论详情请查看:OpenCV—python 角点特征检测之一(cornerHarris、Shi-Tomasi、FAST)

void cornerHarris(
InputArray src,     输入图像
OutputArray dst,     输出图像
int blockSize,     计算时候的矩阵大小
int ksize,        窗口大小
double k,       阈值:计算角度响应时候的参数大小,默认在0.04~0.06
int borderType = BORDER_DEFAULT   边界处理
)
#pragma once
#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;


class ImageFeature {
   
   
public:
	void harris_demo(Mat& image);
	void shi_tomasi_demo(Mat& image);
	void custome_corner_demo(Mat& image);
};
#include "image_feature_all.h"



int main(int argc, char** argv) {
   
   
	const char* img_path = "D:\\Desktop\\xiaomuren.jpg";
	Mat image = imread(img_path);
	if (image.empty()) {
   
   
		cout << "图像数据为空,读取文件失败!" << endl;
	}
	ImageFeature imgfeature;
	imgfeature.harris_demo(image);
	imgfeature.shi_tomasi_demo(image);
	imgfeature.custome_corner_demo(image);

	imshow("image", image);
	waitKey(0);
	destroyAllWindows();
	return 0;
}

演示Harris角点检测

#include "image_feature_all.h"

void ImageFeature::harris_demo(Mat& image) {
   
   
	Mat gray_img
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓纪同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值