当前位置: 首页 > article >正文

【进阶OpenCV】 (2)--Harris角点检测

文章目录

  • harris角点检测
    • 一、基本思想
    • 二、算法实现
      • 1. 函数方法
      • 2. 检测角点
      • 3. 标记角点
  • 总结

harris角点检测

Harris角点检测算法是一种常用的计算机视觉算法,用于检测图像中的角点。该算法通过计算图像中每个像素的局部自相关矩阵,来判断该像素是否为角点

角点指图像中局部区域与周围区域有较大灰度变化的点或像素。

一、基本思想

使用一个固定的小窗口在图像上进行任意方向的滑动,比较滑动前与滑动后两种情况,窗口中的像素灰度变化程度,如果存在任意方向上的滑动都有着较大灰度变化(sobel算子),那么我们可以认为该窗口中存在角点

二、算法实现

原图:

在这里插入图片描述

1. 函数方法

cornerHarris(img,blockSize,ksize,k[,dst[,borderType]]) --> dst

该方法通过分析图像中每个像素点周围的局部特征来判断该点是否为角点。

参数:

-- img:输入图像
-- blockSize:角点检测中要考虑的领域大小
-- ksize:Sobel求导中使用的窗口大小
-- k:Harris角点检测方程中的自由参数,取值参数为[0.04,0.06]
-- dst:返回numpy.ndarray对象,大小和src相同,值越大,对应像素点是角的概率越高

2. 检测角点

将图片转化为灰度图,简化图像信息,去除了颜色变化对特征检测的影响,使得算法能够更专注于像素值(即亮度)的变化。检测亮度变化。

img = cv2.imread("tu.jpg")
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
dst = cv2.cornerHarris(img_gray,4,3,0.04)

3. 标记角点

cornerHarris()函数方法会返回一串数值数据,cornerHarris()函数方法返回的dst中数值并不是每个点的亮度大小,而是每个像素点作为角点的响应值(R值)。这些R值构成了一个灰度图像,其中灰度图像的坐标会与原图像对应,而R值则反映了该像素点是角点的可能性大小。具体来说,当R值很大时,可以认为这个点是一个角点

在这里插入图片描述

其中,min与max参数表示dst中的最大值与最小值。

基于此,我们可以对dst设定一个大小范围,大于某个值怎将它标记为角点:

# 标记检测到的角点
img[dst > 0.01 * dst.max()] = [0,0,255]
# 这里通过对焦点响应进行阈值处理,标记出检测到的角点
# 0.05 * dst.max()是一个阈值,大于这个值的像素点会被标记为红色
cv2.imshow('img',img)
cv2.waitKey(0)

在这里插入图片描述

总结

本篇介绍了:

如何使用Harris角点检测算法来检测图片的角点。使用一个固定的小窗口在图像上进行滑动,如果存在任意方向上的滑动都有着较大灰度变化(sobel算子),那么我们可以认为该窗口中存在角点
算法上,通过比较cornerHarris()函数方法中返回值的大小,来确定角点。


http://www.kler.cn/news/328056.html

相关文章:

  • 衡水中学资料大全-重构版(状元、学霸笔记)
  • .NET MAUI(.NET Multi-platform App UI)下拉选框控件
  • UE5: Content browser工具编写02
  • 【抽代复习笔记】29-群(二十三):生成子群的两道例题及子群陪集的定义
  • hdlbits系列verilog解答(Exams/m2014 q3)-77
  • 【qt】QQ仿真项目1
  • 【洛谷】P4551 最长异或路径 的题解
  • 自然语言处理的应用领域有哪些?
  • 【漏洞复现】孚盟云oa AjaxSendDingdingMessage接口 存在sql注入漏洞
  • 云计算 Cloud Computing
  • 前端——DOM与BOM总结
  • macOS开发环境配置与应用
  • vant 数据校验
  • 华为OD机试 - 最长回文字符串 - 贪心算法(Python/JS/C/C++ 2024 E卷 100分)
  • ZYNQ: GPIO 之 MIO 控制 LED 实验
  • Qt(9.28)
  • 深入理解 `strtok()` 函数:字符串分割的艺术
  • go语言 常用的web框架
  • Ansible学习之ansible-pull命令
  • LLaMA: 开源大语言模型的革新者
  • react是一种语言?
  • PHP中的PEAR是什么
  • Metasploit渗透测试之服务端漏洞利用
  • 【基于spring-cloud-gateway实现自己的网关过滤器】
  • 通过 IPv6 进行远程 ADB 调试
  • 《RabbitMQ篇》基本概念介绍
  • 用于多模态MRI重建的具有空间对齐的深度展开网络|文献速递--基于多模态-半监督深度学习的病理学诊断与病灶分割
  • 基于C++和Python的进程线程CPU使用率监控工具
  • 【Linux 报错】“make: ‘xxxx‘ is up to date.” 解决办法
  • 红米k60至尊版工程固件 MTK芯片 资源预览 刷写说明 与nv损坏修复去除电阻图示