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

这篇具有很好参考价值的文章主要介绍了基于Python手动实现Harris角点检测。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

基于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 np

img = 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角点检测

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

import cv2 
import numpy as np

def My_corner_Harris(image, blockSize, ksize, k):
    #将图片转化为灰度图像,并转化类型为float32
    gray_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, Iy2
    Ix2=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.04

image = 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()

测试一下结果

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

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

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

                      cornerHarris()                                                   My_corner_Harris

四、总结

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

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

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

此致

        感谢阅读

WSZYM 

2022.12.01文章来源地址https://www.toymoban.com/news/detail-412745.html

到了这里,关于基于Python手动实现Harris角点检测的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenCV(四十二):Harris角点检测

    1.Harris角点介绍 什么是角点? 角点指的是两条边的交点,图中红色圈起来的点就是角点。 Harris角点检测原理:首先定义一个矩形区域,然后将这个矩形区域放置在我的图像中,求取这个区域内所有的像素值之和,之后沿着多个方向移动我这个区域,再次计算新区域的像素值

    2024年02月07日
    浏览(53)
  • OpenCV 入门教程: Harris角点检测

    Harris 角点检测是图像处理中常用的角点检测算法,用于寻找图像中的角点特征。角点是图像中具有明显边缘变化的位置,具有独特性和不变性,常用于图像匹配、目标跟踪和特征提取等应用。本文将以 Harris 角点检测为中心,为你介绍使用 OpenCV 进行角点检测的基本原理、步

    2024年02月16日
    浏览(45)
  • opencv进阶14-Harris角点检测-cv2.cornerHarris

    类似于人的眼睛和大脑,OpenCV可以检测图像的主要特征并将这 些特征提取到所谓的图像描述符中。然后,可以将这些特征作为数据 库,支持基于图像的搜索。此外,我们可以使用关键点将图像拼接起 来,组成更大的图像。(想象一下把很多图片放到一起组成一幅360°的全景

    2024年02月11日
    浏览(87)
  • Harris和Shi-tomasi角点检测笔记(详细推导)

            一般来说,角点就是极值点,在某些属性上强度最大或者最小的孤立点、线段的终点或拐点等。其实理解角点可以按照我们的直觉来理解,以下图为例,图中用颜色标注的地方都是角点:         原图地址:理解经典角点检测算法–Harris角点 | 码农家园         

    2024年02月11日
    浏览(43)
  • Opencv中goodFeaturesToTrack函数(Harris角点、Shi-Tomasi角点检测)算子速度的进一步优化(1920*1080测试图11ms处理完成)。

    搜索到某个效果很好的视频去燥的算法,感觉效果比较牛逼,就是速度比较慢,如果能做到实时,那还是很有实用价值的。于是盲目的选择了这个课题,遇到的第一个函数就是角点检测,大概六七年用过C#实现过Harris角点以及SUSAN角点。因此相关的理论还是有所了解的,不过那

    2024年02月06日
    浏览(51)
  • 基于Harris角点的多视角图像全景拼接算法matlab仿真

    目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 Harris角点检测 4.2 图像配准 4.3 图像变换和拼接 4.4 全景图像优化 5.算法完整程序工程 matlab2022a         基于Harris角点的多视角图像全景拼接算法是一种在计算机视觉和图像处理领域中广泛应用

    2024年01月18日
    浏览(45)
  • 模式识别与图像处理课程实验一:图像处理实验(颜色算子实验、Susan、Harris角点检测实验、 sobel边缘算子检测实验)

    要求编写一个包含颜色算子,Susan,Harris,角点,sobel边缘算子的程。 实验的程序如下 运行结果如下 实验原图 实验结果图 实验的程序如下 运行结果如下 实验原图 实验结果图 实验的程序如下 运行结果如下 实验原图 实验结果图 Susan角点检测程序如下 运行结果如下 实验原图

    2024年02月02日
    浏览(50)
  • OpenCV基本图像处理操作(十)——图像特征harris角点

    角点 角点是图像中的一个特征点,指的是两条边缘交叉的点,这样的点在图像中通常表示一个显著的几角。在计算机视觉和图像处理中,角点是重要的特征,因为它们通常是图像中信息丰富的区域,可以用于图像分析、对象识别、3D建模等多种应用。 角点的识别可以帮助在进

    2024年04月23日
    浏览(64)
  • SUSAN角点检测算法实现(详细版)

    无 一、SUSAN算子是什么?         SUSAN ( Small univalue segment assimilating nucleus) 算子是一种基于灰度的特征点获取方法, 适用于图像中边缘和角点的检测, 可以去除图像中的噪声, 它具有简单、有效、抗噪声能力强、计算速度快的特点。         对于图像中非纹理区域的任一点

    2024年02月07日
    浏览(31)
  • Python Opencv实践 - Shi-Tomasi角点检测

    参考资料:Harris和Shi-tomasi角点检测笔记(详细推导)_harris焦点检测_亦枫Leonlew的博客-CSDN博客  cv.goodFeaturesToTrack:Shi-Tomasi角点检测-OpenCV-python_独憩的博客-CSDN博客  

    2024年02月09日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包