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

article/2025/10/8 2:00:15

最近在上数字图像处理课程,需要使用Python手动编写Harris角点检测算法,但是网上几乎没有找到手动编写的,只能手敲。

同时作为自己的第一篇博客,在这里记录一下。

一、Harris角点检测

原理(略)

可以参考博主 拾牙慧者 的博客

角点检测(Harris角点检测法)_拾牙慧者的博客-CSDN博客_harris角点检测

二、Python中的Harris角点检测函数

Opencv库自带函数:cornerHarris()函数

void cornerHarris( InputArray src, OutputArray dst, int block Size,  int ksize, double k, int borderType = BORDER_DEFAULT)

参数如下

1.InputArray类型的src,输入图像,即原图像,填Mat类型即可,且需要为单通道8位或者浮点型图像;
2.OutputArray类型的dst,函数调用后的运算结果存在这里,即这个参数用于存放Harris角点检测的输出结果,和原图片有一样的尺寸和类型;
3.int类型的blockSize,表示邻域的大小,更多详细信息在cornerEigenValsAndVecs()中讲到;
4.int类型的ksize,表示Sobel()算子的孔径的大小;
5.double类型的k,Harris参数;
6.int类型的borderType,图像像素的边界模式。注意它有默认值BORDER_DEFAULT;

使用方法

import cv2
import numpy as npimg = cv2.imread('exp3/NEU_library.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
gray = gray.astype(np.float32)
dst = cv2.cornerHarris(gray,5,3,0.04)
img[dst>0.01*dst.max()] = [0,0,255]
cv2.imshow('',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

结果如下(东北大学宁恩承图书馆)

三、手动写Python代码实现Harris焦点检测算法

import cv2 
import numpy as npdef My_corner_Harris(image, blockSize, ksize, k):#将图片转化为灰度图像,并转化类型为float32gray_img = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)src = gray_img.astype(np.float32)#获取图像长和高SrcHeight = src.shape[0]SrcWidth = src.shape[1]#利用Sobel函数计算图像梯度#src为原图像,-1表示输出图像大小与原图像相同#ksize为sobel算子,定义为角点检测敏感度,必须为3-31之间的奇数#(1,0)表示对x求偏导,(0,1)表示对y求偏导Ix=cv2.Sobel(src,-1,1,0,ksize)Iy=cv2.Sobel(src,-1,0,1,ksize)#计算Ix2, Ixy, Iy2Ix2=np.multiply(Ix,Ix)Ixy=np.multiply(Ix,Iy)Iy2=np.multiply(Iy,Iy)#使用高斯平滑滤波进行加权计算Ix2=cv2.GaussianBlur(Ix2,(blockSize,blockSize),1.3)Ixy=cv2.GaussianBlur(Ixy,(blockSize,blockSize),1.3)Iy2=cv2.GaussianBlur(Iy2,(blockSize,blockSize),1.3)#计算最后的R值R=np.zeros((SrcHeight,SrcWidth))#定义空的R矩阵for i in range(SrcHeight):for j in range(SrcWidth):M=np.array([[Ix2[i,j],Ixy[i,j]],[Ixy[i,j],Iy2[i,j]]])R[i,j]= np.linalg.det(M) - k * ((M.trace())**2)return R# detector parameters
block_size = 5
sobel_size = 3
k = 0.04image = cv2.imread('exp3/NEU_library.jpg')
R  = My_corner_Harris(image, block_size, sobel_size, k)
image[R>0.01*R.max()] = [0,0,255]cv2.imshow('detection result', image)cv2.waitKey(0)
cv2.destroyAllWindows()

测试一下结果

 和官方的cornerHarris()函数对比一下

   

                      cornerHarris()                                                   My_corner_Harris

四、总结

1.简单手动实现Harris角点检测算法,未进行改进

2.可以考虑非极大值进行抑制,参考Harris角点算法 - bldong - 博客园 (cnblogs.com)

3.后续会考虑实现Shi-Tomasi、亚像素检测等方法,做出来的话会更新。

此致

        感谢阅读

WSZYM 

2022.12.01


http://chatgpt.dhexx.cn/article/9datVSmr.shtml

相关文章

【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.在原图标注角…

角点检测(Harris角点检测法)

博主联系方式: QQ:1540984562 QQ交流群:892023501 群里会有往届的smarters和电赛选手,群里也会不时分享一些有用的资料,有问题可以在群里多问问。 目录 原理讲解【1】为何选取角点作为特征?【2】角点的定义&#xff1a…

Harris角点检测原理详解

关于角点的应用在图像处理上比较广泛,如图像匹配(FPM特征点匹配)、相机标定等。网上也有很多博客对Harris角点检测原理进行描述,但基本上只是描述了算法流程,而其中相关细节并未作出解释,这里我想对有些地方做出补充说明&#xff…

OpenCV——Harris角点检测

目录 一、Harris角点检测二、C代码三、python代码四、结果展示1、原始图像2、Harris角点 一、Harris角点检测 角点原理来源于人对角点的感性判断,即图像在各个方向灰度有明显变化。算法的核心是利用局部窗口在图像上进行移动判断灰度发生较大的变化,所以…

Harris角点检测

目录 一.基本原理 1.基本思想 2.数学模型 二.实现代码 三.实验结果与分析 1.场景一:纹理平坦场景 2.场景二:多水平边缘场景 3.场景三:角点丰富场景 四.实验总结 一.基本原理 1.基本思想 判断图像的角点,可以利用卷积窗…

harris角点检测原理

目录 1、角点概述 2、数学知识 3、Harris角点检测基本原理 4、优化改进 1、角点概述 如果一个点在任意方向的一个微小变动都会引起灰度很大的变化,那么我们就把它称之为角点,也就是一阶导数(即灰度图的梯度)中的局部最大所对应的像素点就是角点。在现…

计算机视觉(角点检测)- 1 - Harris角点检测

计算机视觉(角点检测)- 1 - Harris角点检测 学习前言一、Harris角点检测  1、什么是角点?  2、Harris角点检测的基本原理&基本思想  3、Harris角点检测的数学表达  4、获取点数据后,计算 I x , I y I_x&#x…

Visual Studio的sln工程设置VTK、ITK项目

Visual Studio的sln工程设置VTK、ITK项目 最近在学习使用VTK和ITK,使用Visual Studio新建Qt项目时发现项目不是使用过去使用的CMake组织,而是使用的Visual Studio默认的.sln文件,便学习了一下使用Visual Studio的sln工程设置VTK、ITK项目&am…

windows sln的qt 工程

看起来应该vs开发 qt项目不需要qtcreator? 画界面应该还是需要的。装一个vs的插件 2019的如果打开的工程跟你本地的qt不一致 在工程名字上右键change qt version弹出一个框框,里面有俩这里应该选第一个,这个是我本地安装的,vs2015 x86 版本windows sln 工程【这个新建一个q…

Visual studio 2015修改项目文件名及.sln文件名

Visual studio 2015修改项目文件名及.sln文件名: 问题描述 提示:在使用原有的项目代建一个新项目时,为了方便区分与原项目,故要修改该项目的项目名。 如图: 需要将QtGuiApplication1.vcxproj修改成CARFILM.vcxproj&…