OpenCV与图像处理学习十三——Harris角点检测(含代码)

OpenCV与图像处理学习十三——Harris角点检测(含代码)

  • 一、角点的概念
  • 二、Harris角点检测的实现过程
  • 三、Harris代码应用

一、角点的概念

角点: 在现实世界中, 角点对应于物体的拐角, 道路的十字路口、 丁字路口等。

从图像分析的角度来定义角点可以有以下两种定义:

  1. 角点可以是两个边缘的交点;
  2. 角点是邻域内具有两个主方向的特征点;

角点计算方法

  1. 前者通过图像边缘计算, 计算量大, 图像局部变化会对结果产生较大的影响;
  2. 后者基于图像灰度的方法通过计算点的曲率及梯度来检测角点;

角点所具有的特征

  1. 轮廓之间的交点;
  2. 对于同一场景, 即使视角发生变化, 通常具备稳定性质的特征;
  3. 该点附近区域的像素点无论在梯度方向上还是其梯度幅值上有着较大变化

性能较好的角点

  1. 检测出图像中“真实” 的角点
  2. 准确的定位性能
  3. 很高的重复检测率
  4. 噪声的鲁棒性
  5. 较高的计算效率

下图展示了一些角点的例子:
在这里插入图片描述

二、Harris角点检测的实现过程

  1. 计算图像在X和Y方向的梯度:
    在这里插入图片描述
  2. 计算图像两个方向梯度的乘积:
    在这里插入图片描述
  3. 使用高斯函数对三者进行高斯加权, 生成矩阵M的A,B,C:
    在这里插入图片描述
  4. 计算每个像素的Harris响应值R, 并对小于某一阈值 t 的R置为零;
  5. 在3× 3或5× 5的邻域内进行非最大值抑制, 局部最大值点即为图像中的角点;

三、Harris代码应用

函数:

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

参数如下所示:

  1. src:数据类型为 float32 的输入图像;
  2. blockSize:角点检测中要考虑的领域大小;
  3. ksize:Sobel 求导中使用的窗口大小;
  4. k:Harris 角点检测方程中的自由参数,取值参数为 [0,04,0.06]。

看个例子:

import cv2
import numpy as np
from matplotlib import pyplot as pltimg = cv2.imread('image/harris2.png')
print(img.shape)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray = np.float32(gray)
dst_block9_ksize19 = cv2.cornerHarris(gray, 9, 19, 0.04)
img1 = np.copy(img)
img1[dst_block9_ksize19 > 0.01 * dst_block9_ksize19.max()] = [0, 0, 255]dst_block5_ksize19 = cv2.cornerHarris(gray, 5, 19, 0.04)
img2 = np.copy(img)
img2[dst_block5_ksize19 > 0.01 * dst_block5_ksize19.max()] = [0, 0, 255]dst_block9_ksize5 = cv2.cornerHarris(gray, 9, 5, 0.04)
img3 = np.copy(img)
img3[dst_block9_ksize5 > 0.01 * dst_block9_ksize5.max()] = [0, 0, 255]dst_block9_ksize31 = cv2.cornerHarris(gray, 9, 31, 0.04)
img4 = np.copy(img)
img4[dst_block9_ksize31 > 0.01 * dst_block9_ksize31.max()] = [0, 0, 255]dst_block9_ksize19_k6 = cv2.cornerHarris(gray, 9, 19, 0.06)
img5 = np.copy(img)
img5[dst_block9_ksize19_k6 > 0.01 * dst_block9_ksize19_k6.max()] = [0, 0, 255]dst_block9_ksize19_k6_1e_5 = cv2.cornerHarris(gray, 9, 19, 0.06)
img6 = np.copy(img)
img6[dst_block9_ksize19_k6_1e_5 > 0.00001 * dst_block9_ksize19_k6_1e_5.max()] = [0, 0, 255]titles = ["Original", "block9_ksize19", "dst_block5_ksize19", "dst_block9_ksize5", "dst_block9_ksize31","dst_block9_ksize19_k6", "dst_block9_ksize19_k6_1e_5"]
imgs = [img, img1, img2, img3, img4, img5, img6]for i in range(len(titles)):plt.subplot(3, 3, i + 1), plt.imshow(imgs[i]), plt.title(titles[i])plt.xticks([]), plt.yticks([])
plt.show()
# cv2.imshow('src',img)
# cv2.imshow('dst',img5)
# cv2.waitKey(0)
# cv2.destroyAllWindows()

结果如下所示:
在这里插入图片描述
在判断出的角点处标记为蓝色,上图为不同参数设置下的结果,效果也是不一样的。

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

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

相关文章

wpf prism IRegionManager 和IRegionViewRegistry

引入了一个新的问题,IRegionViewRegistry和IRegionManager都具有RegisterViewWithRegion方法,二者有区别么? 答案是——没有。我们已经分析过,在UnityBootstrapper的中,已经默认建立了IRegionManager和RegionManager的…

The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

python表示条件之间的逻辑与除了用and还可以用&,把and换成&即可

ubuntu zip解压

您好,zip xx.zip压缩,unzip xx.zip 解压,tar zcvf xx.tar.gz压缩tar zxvf xx.tar.gz解压转载于:https://www.cnblogs.com/zxouxuewei/p/4973319.html

Go map如何排序

1. 将key 或 value 单独组成其类型的切片或数组,进行排序 package mainimport ("fmt""sort" )func main() {table : map[string]string{"hello": "hello","world": "world","a": "…

德勤发布《中国智能制造分析报告》

来源:CIO俱乐部亚洲正受到自动化、智能化大潮冲击。国际劳工组织调研发现,越南、柬埔寨、菲律宾和印度尼西亚的工人的失业风险最高,据估计这几个区域约50%的工人工作可能在未来20年被自动化取代。亚洲尤其是中国作为制造业的重要区域&#xf…

OpenCV与图像处理学习十四——SIFT特征(含代码)

OpenCV与图像处理学习十四——SIFT特征(含代码)一、SIFT算法二、SIFT实现过程三、代码实现一、SIFT算法 SIFT, 即尺度不变特征变换算法(Scale-invariant feature transform,SIFT) , 是用于图像…

tf.TensorArray

TensorArray可以看做是具有动态size功能的Tensor数组。通常都是跟while_loop或map_fn结合使用。 ta tf.TensorArray(size, dtype, dynamic_sizeTrue) # dynamic_size指定数组长度可变 ta.stack(nameNone) # 将TensorArray中元素叠起来当做一个Tensor输出 ta.unstack(value,…

液态大脑与固态大脑——圣塔菲最新群体智能文集

来源:The Royal society撰文 | Ricard Sol, Melanie Moses, and Stephanie Forrest大脑,神经元构成的器官根植于许多生物体内。这是一种固态的大脑,且组成它们的元素在空间中相对固定。但是相对的,大脑是否可以拥有流动不定的存在…

设置按钮中的图片的旋转,并且旋转之后不变形

1、设置按钮属性:self.titleBtn.imageView.contentMode UIViewContentModeCenter;self.titleBtn.imageView.clipsToBounds NO; 2、处理点击事件 - (void)titleBtnClick {self.titleBtn.imageView.transform CGAffineTransformMakeRotation(M_PI_2); }转载于:http…

OpenCV与图像处理学习十五——LBP纹理特征(含代码)

OpenCV与图像处理学习十五——LBP纹理特征(含代码)一、LBP介绍二、LBP原理三、代码应用一、LBP介绍 LBP(Local Binary Pattern, 局部二值模式) , 是一种用来描述图像局部纹理特征的算子; 它具有…

pycharm运行程序时看不到任何结果显示

原因是用程序选择了console来运行,取消console方法如下: Run->Edit Configurations 取消run with python console的勾

iOS 的 XMPPFramework 简介

XMPPFramework是一个OS X/iOS平台的开源项目,使用Objective-C实现了XMPP协议(RFC-3920),同时还提供了用于读写XML的工具,大大简化了基于XMPP的通信应用的开发。 1. 登录和好友上下线 1.1XMPP中常用对象们 XMPPStream&a…

OpenCV与图像处理学习十六——模板匹配

OpenCV与图像处理学习十六——模板匹配一、模板匹配介绍二、代码应用一、模板匹配介绍 模板匹配是一种最原始、最基本的模式识别方法,研究某一特定目标的图像位于图像的什么地方,进而对图像进行定位。 在待检测的图像上,从左到右&#xff0…

李剑锋:意识科学就在身边

来源: 科技日报-中国科技网近些年,生命科学家开始关注神奇的大脑,因此各国纷纷提出各自的脑计划;当前有一个更基础的、但极富争议性的领域却被大家忽视了,就是意识科学。事实脑计划的终点应该就是意识科学,但由于目前大…

tf.train.get_checkpoint_state

函数功能:找出训练时保存的模型 ckpt.model_checkpoint_path可以找出所有模型中最新的模型 ckpt tf.train.get_checkpoint_state(/mnist/summary/train) if ckpt and ckpt.model_checkpoint_path:print(ckpt.model_checkpoint_path) 输出: /mnist/s…

永恒的终结

无意间在豆瓣发现这本书,是阿西莫夫写的,对他的基地系列和银河帝国系列仰慕很久了,却因太长没有时间看.看这本<<永恒的终结>>篇幅不是很长,也就拿过来看了. 故事是这样的.在24世纪一个叫马兰松的的科学家发明了一种叫"时空力场"的东西,东西太超前,人们在…

OpenCV与图像处理学习十七——OpenCV人脸检测(含代码)

OpenCV与图像处理学习十七——OpenCV人脸检测&#xff08;含代码&#xff09;一、人脸识别概要1.1 人脸检测1.2 人脸对齐&#xff08;Face Alignment&#xff09;1.3 人脸特征提取&#xff08;Face Feature Extraction&#xff09;1.4 人脸识别&#xff08;Face Recognition&am…

清华大学:人工智能之知识图谱(附PPT)

来源&#xff1a;笑看国际风云【导读】知识图谱&#xff08;Knowledge Graph)是人工智能重要分支知识工程在大数据环境中的成功应用&#xff0c;知识图谱与大数据和深度学习一起&#xff0c;成为推动互联网和人工智能发展的核心驱动力之一。基于此背景&#xff0c;《人工智能之…

RandomShuffleQueue '_1_input/shuffle_batch/random_shuffle_queue' is closed and has insufficient elem

TensorFlow报错&#xff1a; RandomShuffleQueue _1_input/shuffle_batch/random_shuffle_queue is closed and has insufficient elements (requested 128, current size 0) image tf.decode_raw(features[image_raw], tf.float32) 将tf.float32改成tf.float64或者tf.uint…

Day10

会议讨论 628&#xff1a;今天是冲刺的最后一天了&#xff0c;好紧张好激动&#xff0c;我们组还有好些个功能没实现呢&#xff0c;感觉崩崩哒&#xff01;还要实现选择不同的专业导入不同的课表呢。 601&#xff1a;在修改教师帐号信息的页面要有当密码格式、用户名格式等不符…