harris角点检测算法实现

article/2025/10/8 2:03:27

算法流程:

        1、将图像转换为灰度图像;

        2、利用Sobel滤波器求出 海森矩阵 (Hessian matrix) :

0

        3、将高斯滤波器分别作用于Ix²、Iy²、IxIy;

        4、计算每个像素的 R= det(H) - k(trace(H))²。det(H)表示矩阵H的行列式,trace表示矩阵H的迹。通常k的取值范围为[0.04,0.16];

        5、满足 R>=max(R) * th 的像素点即为角点。th常取0.1。

python代码实现:

#!/usr/bin/env python3
# coding: utf-8import cv2
import copy
import numpy as npdef bgr2gray(img):gray = 0.2126 * img[..., 2] + 0.7152 * img[..., 1] + 0.0722 * img[..., 0]gray = gray.astype(np.uint8)return graydef sobel_filtering(gray):# get shapeimg_h, img_w = gray.shape# sobel kernelsobel_y = np.array(((1, 2, 1),(0, 0, 0),(-1, -2, -1)), dtype=np.float32)sobel_x = np.array(((1, 0, -1),(2, 0, -2),(1, 0, -1)), dtype=np.float32)# paddingtmp = np.pad(gray, (1, 1), 'edge')# prepareix = np.zeros_like(gray, dtype=np.float32)iy = np.zeros_like(gray, dtype=np.float32)# get differentialfor y in range(img_h):for x in range(img_w):ix[y, x] = np.mean(tmp[y: y + 3, x: x + 3] * sobel_x)iy[y, x] = np.mean(tmp[y: y + 3, x: x + 3] * sobel_y)ix2 = ix ** 2iy2 = iy ** 2ixy = ix * iyreturn ix2, iy2, ixydef gaussian_filtering(I, k_size=3, sigma=3):# get shapeimg_h, img_w = I.shape# gaussiani_t = np.pad(I, (k_size // 2, k_size // 2), 'edge')# gaussian kernelK = np.zeros((k_size, k_size), dtype=np.float32)for x in range(k_size):for y in range(k_size):_x = x - k_size // 2_y = y - k_size // 2K[y, x] = np.exp(-(_x ** 2 + _y ** 2) / (2 * (sigma ** 2)))K /= (sigma * np.sqrt(2 * np.pi))K /= K.sum()# filteringfor y in range(img_h):for x in range(img_w):I[y, x] = np.sum(i_t[y: y + k_size, x: x + k_size] * K)return Idef corner_detect(img, ix2, iy2, ixy, k=0.04, th=0.1):# prepare output imageout = copy.deepcopy(img)# get RR = (ix2 * iy2 - ixy ** 2) - k * ((ix2 + iy2) ** 2)# detect cornerout[R >= np.max(R) * th] = [255, 0, 0]out = out.astype(np.uint8)return outdef harris_corner(img):# 1. grayscalegray = bgr2gray(img)# 2. get difference imageix2, iy2, ixy = sobel_filtering(gray)# 3. gaussian filteringix2 = gaussian_filtering(ix2, k_size=3, sigma=3)iy2 = gaussian_filtering(iy2, k_size=3, sigma=3)ixy = gaussian_filtering(ixy, k_size=3, sigma=3)# 4. corner detectout = corner_detect(img, ix2, iy2, ixy)return outdef main():# Read imageimg = cv2.imread("test.jpg")img = cv2.resize(img, (512, 512))img = img.astype(np.float32)# Harris corner detectionout = harris_corner(img)cv2.imwrite("out.jpg", out)print("proc ok.")if __name__ == "__main__":main()

结果:

 opencv python版本实现:

        对于每一个像素(x,y),在(blockSize*blockSize)邻域内,计算梯度图的协方差矩阵M(x,y) ,然后通过上面第二步中的角点响应函数得到结果图。图像中的角点可以为该结果图的局部最大值。即可以得到输出图中的局部最大值,这些值就对应图像中的角点。

        Harris 角点检测函数:

cv2.cornerHarris(src, blockSize, ksize, k, dst, borderType)

        src:数据类型为float32的输入图像

        blockSize:角点检测中要考虑的领域大小

        ksize:Sobel求导中使用的窗口大小

        k:Harris 角点检测方程中的自由参数,取值参数为 [0,04,0.06].

        dst:目标图像

        borderType:边界类型

import cv2
import numpy as npdef test():img = cv2.imread("test.jpg")img = cv2.resize(img, (512, 512))gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)gray = np.float32(gray)# 输入图像必须是 float32,最后一个参数在 0.04 到 0.05 之间dst = cv2.cornerHarris(gray, 3, 3, 0.04)# result is dilated for marking the corners, not important# dst = cv2.dilate(dst, None)# Threshold for an optimal value, it may vary depending on the image.img[dst > 0.1 * dst.max()] = [255, 0, 0]cv2.imwrite("out2.jpg", img)print("proc ok.")

结果:

相关链接:

1、harris角点检测原理

2、SHI-TOMASI角点检测

参考文章:

1、python实现Harris角点检测算法(本文代码来源)

https://www.jb51.net/article/201957.htm

2、opencv实现版本python

https://blog.csdn.net/yukinoai/article/details/88759615

3、opencv c++版本实现

https://blog.csdn.net/zhu_hongji/article/details/81235643


http://chatgpt.dhexx.cn/article/o1O4OMyg.shtml

相关文章

Python计算机视觉——Harris角点检测

Python计算机视觉——Harris角点检测 文章目录 Python计算机视觉——Harris角点检测写在前面1 Harris角点检测基本思想2 Harris角点检测公式推导3 实验分析 写在前面 在传统目标识别中,特征提取是最终目标识别效果好坏的一个重要决定因素,因此&#xff…

Harris角点检测原理-

本文是本人看bilibili教学结合官方文档的观后笔记,链接在下: (全)基于python的Opencv项目实战_哔哩哔哩_bilibili 如果有什么理解不到位的地方,欢迎指正。 理论: 先放角点定义(百度百科&…

计算机视觉(二)HARRIS角点检测算法与SIFT

文章目录 前言一、HARRIS角点检测算法1.什么是角点(corner points)2.角点检测算法的基本思想3.什么是好的角点检测算法4.角点特征的数学刻画5.度量角点响应6.HARRIS角点检测器的响应函数7.HARRIS角点检测算法的优点8.HARRIS角点检测算法的缺点9.HARRIS角…

【特征检测】Harris角点检测中的数学推导

简介 本文主要是对Harris角点检测的数学公式进行推导,更加深入的掌握原理性的理论知识。 预备知识 椭圆的矩阵方程表示 在高中课本中,我们学习到标准椭圆及其方程(如下图所示): 其实,矩阵在运算中使用非…

Matlab实现Harris角点检测

一、代码 close all; clc; % 读取图像信息(原图为灰度图) img imread(lena.bmp); [m,n] size(img); % 先在原图外围扩展一圈 tmp zeros(m2,n2); tmp(2:m1,2:n1) img; % 初始化各一阶偏导矩阵 Ix zeros(m2,n2); Iy zeros(m2,n2); E zeros(m2,n2);…

角点检测和匹配之Harris与FAST角点检测

这一章主要内容: 1. Harris角点检测 2. FAST特征检测 3. 尺度不变的SURF特征检测 4.SURF检测描述 一、引言 在计算机视觉中,特征点或称兴趣点,角点(即图像的极值点,线段的终点,曲线曲率最大的点或水平、竖直方向上属性…

Matlab实现Harris角点检测算法

角点 一般的角点检测都是对有具体定义的、或者是能够具体检测出来的兴趣点的检测。这意味着兴趣点可以是角点,也可以是在某些属性上强度最大或者最小的孤立点、线段的终点,或者是曲线上局部曲率最大的点。在实践中,通常大部分称为角点检测的…

Harris 角点检测原理及实现

1. 图像中角点定义 沿各个方向,图像灰度均发生变化; 2.Harris原理 Harris中也是根据角点定义经角点定义,Harris中使用该像素点周围像素块和其周围的其它像素块的相关性刻画角点,相关性用平方差之和进行计算(SSD),SS…

基于Python手动实现Harris角点检测

最近在上数字图像处理课程,需要使用Python手动编写Harris角点检测算法,但是网上几乎没有找到手动编写的,只能手敲。 同时作为自己的第一篇博客,在这里记录一下。 一、Harris角点检测 原理(略) 可以参考博…

【OpenCV入门教程之十六】OpenCV角点检测之Harris角点检测

本系列文章由浅墨_毛星云 出品,转载请注明出处。 文章链接: http://blog.csdn.net/poem_qianmo/article/details/29356187 作者:毛星云(浅墨) 微博:http://weibo.com/u/1723155442 知乎:ht…

Harris 角点检测(Harris Corner Detection)(OpenCV实现)

匹配问题 Harris角点检测是Chris Harris和Mike Stephens在1988年提出的。主要用于运动图像的追踪。当时的普遍想法是利用边缘进行追踪,但是当相机或物体运动时你不知道朝哪个方向,相机的几何变换也是未知的,所以边缘匹配很难达到预期的效果。…

图像处理(九)——Harris角点检测

实现Harris角点检测算法,并与OpenCV的cornerHarris函数的结果进行比较。 特征点在图像中一般有具体的坐标,并具有某些数学特征,如局部最大或最小灰度、以及某些梯度特征等。角点可以简单的认为是两条边的交点。如下图所示: 在各个…

Harris角点检测 及 Matlab实验

目录 1 基础知识 1.1 图像变化的类型 1.2 提取点特征的作用 1.3 什么是好的角点检测算法? 2 Harris 角点检测 2.1 Harris角点检测基本思想 2.2 Harris角点检测:数学描述 3 总结 4 Matlab 实验 参考资料 角点是图像重要的特征,对图像…

Harris的角点检测和特征匹配

一.特征检测(提取) 基于特征的图像配准方法是图像配准中最常见的方法之一。它不是直接利用图像像素值,二十通过像素值导出的符号特征(如特征点、特征线、特征区域)来实现图像配准,因此可以克服利用灰度信息…

Harris角点及Shi-Tomasi角点检测

一、角点定义 有定义角点的几段话: 1、角点检测(Corner Detection)是计算机视觉系统中用来获得图像特征的一种方法,广泛应用于运动检测、图像匹配、视频跟踪、三维建模和目标识别等领域中。也称为特征点检测。 角点通常被定义为两条边的交点&#xff0…

Harris角点检测算法详解

Harris角点算法 特征点检测广泛应用到目标匹配、目标跟踪、三维重建等应用中,在进行目标建模时会对图像进行目标特征的提取,常用的有颜色、角点、特征点、轮廓、纹理等特征。现在开始讲解常用的特征点检测,其中Harris角点检测是特征点检测的基…

Harris角点检测算子

Harris角点检测算子是于1988年由CHris Harris & Mike Stephens提出来的。在具体展开之前,不得不提一下Moravec早在1981就提出来的Moravec角点检测算子。 1.Moravec角点检测算子 Moravec角点检测算子的思想其实特别简单,在图像上取一个W*W的“滑动窗…

特征检测之Harris角点检测

点击上方“小白学视觉”,选择加"星标"或“置顶” 重磅干货,第一时间送达特征点又叫兴趣点或者角点。常被用于目标匹配,目标跟踪,三维重建等应用中。点特征主要指图像中的明显点,如突出的角点、边缘端点、极值…

Harris角点检测原理分析

主要参考了:http://blog.csdn.net/yudingjun0611/article/details/7991601 Harris角点检测算子 本文将该文拷贝了过来,并做了一些数学方面的补充,以方便对数学已经生疏的小伙伴们参考理解。由于补充的内容还挺多,所以还是将本文标…

【理解】经典角点检测算法--Harris角点

目录 什么是角点角点检测算法的原始思想:Harris角点检测原理Harris角点算法的基本步骤实践:Harris角点检测可能会用到的OpenCV API:手写API:1.展示图片:2.手写Harris特征:3.手写非极大值抑制:4.在原图标注角…