白话文讲计算机视觉-第十一讲-Harris算子

news2025/3/1 8:11:33

Moravec算子

       说白了就是求两个像素点之间的差,然后平方一下给它变成正值。

       其中,x,y表示像素点,u、v表示水平竖直方向的偏移量;w(x,y)为滤波函数,一般直接等于常数1。 I(x+u,x+v)I(x,y )表示像素点(x+u,x+v)、(x,y)的灰度值。

Harris算子

   将moravec算子进一步推导,根据泰勒展开,仅保留二阶项的公式为:

       把上面公式带入moravec算子中,得到:

        Ix和Iy就是我们讲边缘检测时候的水平竖直梯度,可以用sobel算子作为滤波器进行计算。

        再进一步简化公式,变成矩阵形式:

        我们令

       接下来,我们对一个窗口的角点进行打分,通过公式:

       λ1λ2表示M的特征值。特征值表示2个方向上的变化(变化最快和最慢的方向),特征值大变化快,特征值小变化慢;k是一个常数值,人为设定

(1)若λ1λ2都很小,接近于0,那么R也不大,这样的区域就是平坦区域。

(2)若一个大,一个小(接近于0),那么R<0,这样是边缘区域。

(3)若两个都很大,这样就是角点区域。

       这个我们可以用一个形象的图像来举例子:

       这有个图,是一个矩形。我们选择最左边那条边的一个点,然后向上移动。

       我们会发现,在这条线上面的任意一个点,Y方向的像素值没有变化,而X方向移动一格,像素值变化很大。这就说是(2)的情况,也就是特征值一个大一个小。也就是边缘。

       我们一直移动,直到如下图的绿色点:

       这一点Y方向、X方向移动一格,像素值都变化很大,所以这个点是(3)情况,特征值两个都大,是角点。

       我们把绿色的点再往上面移动,我们会发现像素都是白色了,Y方向、X方向移动一格,像素值都毫无变化,这就是(1)的情况,是平坦区域。

实战

输入

 最后奉上代码:

import cv2
import numpy as np
#导入图片
img = cv2.imread('chessboard.png')
#显示图片
cv2.namedWindow("origin", cv2.WINDOW_NORMAL)
cv2.imshow('origin',img)
#转换为灰度图像
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
gray = np.float32(gray)
#Harris角点检测,2表示u,v的值,3表示sobel卷积核是3*3的,0.03为k值
dst = cv2.cornerHarris(gray,2,3,0.03)
# 膨胀一下角点,使得更清晰
dst = cv2.dilate(dst,np.ones((15, 15), np.uint8))
# 设定阈值为0.01*角点里面的最大值,小于的角点都舍去
img[dst>0.01*dst.max()]=[0,0,255]
#显示图片
cv2.namedWindow("dst", cv2.WINDOW_NORMAL)
cv2.imshow('dst',img)
#按任意键结束
cv2.waitKey()
cv2.destroyAllWindows()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/515421.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于zemax的折叠光路的激光扩束系统设计

激光扩束系统是激光干涉仪、激光测距仪、激光雷达等诸多仪器设备的重要组成部分&#xff0c;其光学系统多采用通过倒置的望远系统&#xff0c;来实现对激光的扩束&#xff0c;其主要作用是压缩激光束的空间发散角&#xff0c;使扩束后的激光束口径满足其他系统的要求。 激光器…

MySQL-图形化界面工具 (上)

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a;小刘主页 ♥️每天分享云计算网络运维课堂笔记&#xff0c;努力不一定有收获&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️树高千尺&#xff0c;落叶归根人生不易&…

【sorting+双指针+数学】CF845div2 C. Quiz Master

和我一开始想的不太一样 一开始想的也是排序&#xff0c;然后双指针&#xff0c;但是我想的双指针是l1,rn的&#xff0c;因为我没注意到极差尽可能小这个条件可以转化为区间长度最短 其实就是尺取法&#xff0c;然后合法性就是这个区间内的数的所有因子能填满1~m这些格子 找…

Vue2 Vue3 Scoped 样式穿透

概念 主要是用于修改很多 Vue 常用的组件库&#xff08;Element, Vant, AntDesigin&#xff09;&#xff0c;虽然配好了样式但是还是需要更改其他的样式&#xff0c; 因为添加了 scoped 实现 css 模块化 就需要用到 样式穿透 &#xff0c;更改组件的样式 scoped 的原理 Vue …

route详解

一、前言 个人主页: ζ小菜鸡大家好我是ζ小菜鸡&#xff0c;让我们一起学习route。如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连) 二、什么是route Route就是用来显示、人工添加和修改路由表项目的。大多数主机一般都是驻留在只连接一台路由器的网段上。由于只有一台路…

1000个已成功入职的软件测试工程师简历经验总结:软件测试工程师简历项目经验怎么写?(含真实简历模板)

一、前言&#xff1a;浅谈面试 面试是我们进入一个公司的门槛&#xff0c;通过了面试才能进入公司&#xff0c;你的面试结果和你的薪资是息息相关的。那如何才能顺利的通过面试&#xff0c;得到公司的认可呢?面试软件测试要注意哪些问题呢?下面和笔者一起来看看吧。这里分享一…

【面试常见】链表带环

前言 一、什么是环形链表 二、判断链表是否带环 三、&#xff08;问题1&#xff09;slow和fast一定会相遇吗&#xff1f; 四、&#xff08;问题2&#xff09;fast一次走3/4/n步&#xff0c;还会相遇吗&#xff1f; 五、总结 前言 链表是面试中常见的一类题。分为单链表&#x…

Maven详细教程(图文并茂)

一、maven概述 1.1、项目开发中的问题 1、我的项目依赖一些jar包&#xff0c;我把他们放在哪里&#xff1f;直接拷贝到项目的lib文件夹中?如果我开发的第二个项目还是需要上面的那些jar包&#xff0c;再把它们复制到我当前项目lib中&#xff1f;那如果现在是第三次了&#xf…

ALSA子系统(十八)------指纹解锁动画提示声卡顿问题解析

你好&#xff01;这里是风筝的博客&#xff0c; 欢迎和我一起交流。 很久没写kernel相关的东西了&#xff0c;主要是来到手机厂之后&#xff0c;大部分还是在Android上&#xff0c;Kernel虽然也有涉及&#xff0c;但毕竟只是有所涉及&#xff0c;主要业务逻辑还是在HAL之上&am…

【c语言】详解 结构体的内存对齐补齐

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c语言系列专栏&#xff1a;c语言之路重点知识整合 &#x…

计算机网络的性能指标

1.计算机网络的性能指标 笔记来源&#xff1a;湖科大教书匠&#xff1a;计算机网络的性能指标 声明&#xff1a;该学习笔记来自湖科大教书匠&#xff0c;笔记仅做学习参考 1.1 速率 注意&#xff1a;数据量中1KB 2 10 B 2^{10}B 210B、数据率中1kb/s 1 0 3 10^{3} 103b/s 1.2…

Chatgpt如何引入新的知识?我们来看下ACL2023 预训练模型能否对新注入的知识进行推理这篇文章

一、概述 title&#xff1a;Can LMs Learn New Entities from Descriptions? Challenges in Propagating Injected Knowledge 论文地址&#xff1a;https://arxiv.org/abs/2305.01651 相关代码&#xff1a; EKP数据和代码&#xff1a;GitHub - yasumasaonoe/entity_knowle…

香橙派4和树莓派4B构建K8S集群实践之四:BuildKit与LNMP

目录 1. 说明 2. 开始前的准备工作 2.1 docker 验证用户信息设置 2.2 安装BuildKit 3. 安装步骤 3.1 申请一个pvc存储区 (wwwroot-pvc.yaml) 3.2 Nginx 3.3 php-fpm 3.3.1 构建并推送镜像 4. 遇到的问题 5. 相关命令 6. 参考 1. 说明 k8s带来的灵活性&#xff0c;使…

Linux系统之安装PDF阅读器

Linux系统之安装PDF阅读器 一、PDF介绍1. PDF简介2. PDF特点3. evince介绍 二、本次实践环境介绍1. 本地环境规划2. 本次实践介绍 三、本地环境检查1. 检查操作系统版本2. 查看系统内核版本 四、安装前准备工作1. 配置yum仓库2. 检查本地yum仓库状态3. 查看evince安装包 五、安…

怎样做好一场线上研讨会?

怎样做好一场线上研讨会&#xff1f; 1-策划和准备。在开始前&#xff0c;需要仔细策划和准备。确定研讨会的主题、目标、议程和参与者&#xff0c;并为参与者提供足够的信息和资源&#xff0c;以确保他们能够充分准备并参与讨论。 2-选择合适的在线平台。选择一个适合您需求…

Ubuntu搭建VPN服务,PPTD和OpenVPN

本文提供了两种vpn方式&#xff0c;pptd移动端支持不够&#xff0c;OpenVPN跨平台能力更前&#xff0c;且安全性更好。 但pptd也不是一无是处&#xff0c;在使用midjuriney网站时&#xff0c;openvpn搭建的网络出现了无法将机器人加入服务器的情况&#xff0c;更换pptd后操作无…

基于Maven创建多模块的Spring Boot项目

使用 Spring Boot的初始化器等创建Spring Boot项目时,需要在pom.xml指定该项目的父项目是 spring-boot-starter-parent。 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><versio…

OSPF综合实验(第二部分)

目录 配置OSPF动态路由协议 重发布 减少路由条目&#xff1a;​ 特殊区域&#xff1a; 收敛配置 认证 NAT地址转换 空接口 配置OSPF动态路由协议 AR1&#xff1a; [r1]ospf 1 router-id 1.1.1.1 [r1-ospf-1]area 1 [r1-ospf-1-area-0.0.0.1]network 172.16.32.0 0.0.0.…

DeepLab V3+

Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation 分割图像的语义编码器-解码器和带孔可分离卷积的技术 摘要 对于语义分割任务&#xff0c;深度神经网络通常使用空间金字塔池化模块或编码器-解码器结构。前者通过以多种速率和多种有效视…

手把手教你安装Redis

在上一篇《Redis简介》中介绍了Redis的一特性和使用场景&#xff0c;下面我们就来动手安装一下Redis 主要分为Windows安装、Linux下安装和Docker下安装 Windows下安装Redis 很不幸&#xff0c;Redis官方不支持windows版本&#xff0c;以下是官方原话 Redis is not officiall…