《深度学习》OpenCV 角点检测、特征提取SIFT 原理及案例解析

目录

一、角点检测

1、什么是角点检测

2、检测流程

        1)输入图像

        2)图像预处理

        3)特征提取

        4)角点检测

        5)角点定位和标记

        6)角点筛选或后处理(可选)

        7)输出结果

3、邻域

4、案例实现

        运行结果:

二、特征提取sift

1、什么是特征提取

2、步骤

        1)数据预处理

        2)特征选择

        3)特征提取

        4)特征表示

3、案例实现

        运行结果:


一、角点检测

1、什么是角点检测

        角点检测是计算机视觉中的一种特征检测方法,用于寻找图像中的角点或者具有角点特征图像区域。角点是指图像中突然改变方向的点,即在其周围的不同方向上都有较大的灰度变化。角点具有一些特殊性质,如旋转不变性、尺度不变性和光照不变性等,因此在图像处理和计算机视觉中具有广泛的应用。

2、检测流程

        1)输入图像

                将待检测的图像作为输入。

        2)图像预处理

                对输入图像进行必要的预处理,如灰度化、降噪等,以便更好地进行角点检测。

        3)特征提取

                使用角点检测算法对预处理后的图像进行角点特征提取。常见的角点检测算法有Harris角点检测算法、Shi-Tomasi角点检测算法等。

        4)角点检测

                根据所选的角点检测算法,计算图像中的每个像素点的角点响应值,以判断其是否为角点。具体算法会根据不同的方法而有所差异。

        5)角点定位和标记

                根据角点响应值,确定角点的位置,并进行标记。可以使用函数或算法来绘制或返回角点的位置信息。

        6)角点筛选或后处理(可选)

                根据具体需求,可以对检测到的角点进行筛选或进行后处理操作,如非极大值抑制阈值过滤等,以去除不准确的角点或增强有效的角点。

        7)输出结果

                根据需要,可以将检测到的角点的位置信息、图像中绘制的标记或其他相关信息作为输出结果。

3、邻域

        在角点检测中,邻域指的是一个中心像素周围的一组像素点。在检测角点时,我们需要考虑中心像素周围的像素点的特征,如灰度变化,梯度等。这些特征的计算通常需要使用邻域内的像素信息。

        邻域的大小在角点检测中非常重要,它决定了我们考虑的像素点的数量。通常,邻域的大小取决于具体的角点检测算法和应用场景。较大的邻域可以捕获更多的细节信息,但会增加计算的复杂性;较小的邻域可以加快计算速度,但可能会导致角点检测结果不准确。

4、案例实现

# 角点指图像中局部区城与周围区域有较大灰度变化的点或像素。
# cornerHarris(img,blockSize, ksize, kl, dst[, borderType]])-> dst
# img:输入图像。
# blocksize:角点检测中要考虑的领域大小。
# ksize:Sobel求导中使用的窗口大小。
# k:Harris角点检测方程中的自由参数,取值参数为[0.04,0.06]。
# dst:返回numpy.ndarray对象,大小和src相同,值越大,对应像素点是角的機率越高img = cv2.imread('huanghelou.png')   # 导入图像
cv2.imshow('img1',img)
cv2.waitKey(0)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)  # 转变为灰度图
dst = cv2.cornerHarris(gray,4,3, 0.04)  # 输入图像gray必须是灰度图,4表示领域的大小为2*2,
# 3为计算梯度图的Sobel算子的孔径大小,0.04表示角点检查灵敏度,越小检测到的角点越多
# dst为与输入图像相同大小的矩阵
# Sobel算子是一种常用的边缘检测算子# 标记检测到的角点
img[dst > 0.05 * dst.max()] = [0,255,0]  # 将原图像中灰度值大于0.05*dst.max()的值标记为绿色
# 这里通过对角点响应进行阈值处理,标记出检测到的角点。
# 0.05 * dst.max() 是一个阈值,大于这个值的像素点会被标记为绿色。
cv2.imshow('img',img)
cv2.waitKey(0)
        运行结果:

二、特征提取sift

1、什么是特征提取

        特征提取是指从原始数据提取出具有辨识性代表性特征,用于描述和表示数据的关键信息。在计算机视觉、模式识别和机器学习等领域,特征提取是一项关键的任务,因为原始数据通常含有大量冗余和噪声,通过提取特征可以减少数据的维度、去除冗余信息,从而更好地捕捉数据的潜在模式和结构。

        特征可以是数据的某种可测量的属性,比如颜色、纹理、形状、梯度等。特征提取的目标是选择和计算这些特征,使其能够表达出不同类别或实例之间的差异和相似性。

        SIFI尺度不变特征转换是一种机器视觉的算法用来侦测与描述影像中的局部性特征,它在空间尺度中寻找极值点,并提取出其位置、尺度、旋转不变数。

2、步骤

        1)数据预处理

                对原始数据进行预处理,如去噪、归一化、平滑等

        2)特征选择

                从原始数据中选择合适的特征子集,以避免冗余和噪声。

        3)特征提取

                根据领域知识或数学算法,计算和提取数据中的特征。

        4)特征表示

                将提取到的特征表示成一组数值、向量或其他形式,便于计算机处理和分析。

        特征提取的好坏对于后续的数据分析、模型训练和模式识别任务至关重要。一个好的特征应该能够具有辨别性区分不同类别或实例,并且具有鲁棒性,对于数据的变形和噪声有一定的容忍度

3、案例实现

import numpy as npman = cv2.imread('man.png')
cv2.imshow('man',man)
cv2.waitKey(0)
man_gray = cv2.cvtColor(man,cv2.COLOR_BGR2GRAY)
sift = cv2.SIFT_create()  # 创建一个sift对象
kp = sift.detect(man_gray)   # 在灰度图中查找关键点
for x in kp:   # 打印所有关键点坐标print(x.pt)# drawKeypoints(image,keypoints,outImage, color=None, flags=None)
# image:原始图片
# keypoints:从原图中获得的关键点,这也是画图时所用到的数据
# outputimage:输出图像,可以是原始图片,也可以是None
# color:颜色设置过修改(b,g,r)的值,更改画笔的颜色,b=蓝色,g=绿色,r=红色。
# flags:绘图功能尚标识设置
# 绘制关键点,在原始图像上,绘制点kp,None表示不使用绘制匹配项的图像,cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS指定绘制关键点的样式
man_sift = cv2.drawKeypoints(man,kp,None,flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)cv2.imshow('man sift',man_sift)   # 展示绘制了关键信息的图片
cv2.waitKey(0)# 使用sift.compute()计算关键点描述符,方便后期的特征匹配
keypoints,des = sift.compute(man,kp)  # man原始图像,kp检测到的关键点坐标的列表,des是一个numpy数组,包含所有关键点的描述符
print(np.array(keypoints).shape,des.shape)  # 打印关键点的个数,以及关键点的描述符矩阵的形状
# 输出关键点的形状和描述符的形状。
# np.array(keypoints).shape 表示关键点的数量和形状。
        运行结果:

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

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

相关文章

2024最新国内镜像源设置(npm、yarn、pnpm)

淘宝镜像源https://registry.npmmirror.com/ 腾讯云镜像源https://mirrors.cloud.tencent.com/npm/ cnpm是一个基于npm的中国镜像源https://r.cnpmjs.org/ # 查询当前使用的镜像源 npm get registry# 设置为淘宝镜像源 npm config set registry https://registry.npmmirror.co…

物联网智能项目全面解析

目录 引言 一、物联网概述 1.1 什么是物联网 1.2 物联网的历史与发展 二、物联网智能项目分类 三、关键组件与技术 3.1 传感器和执行器 3.2 连接技术 3.3 数据处理与分析 3.4 用户界面 四、物联网智能项目案例分析 4.1 智能家居 4.2 智慧城市 4.3 工业物联网 4.4…

前端编程艺术(2)----CSS

目录 1.CSS 2.CSS引入 3.选择器 1.标签选择器 2.类选择器 3.id选择器 4.属性选择器 5.后代选择器 5.直接子元素选择器 6.伪类选择器 链接相关 动态伪类 结构化伪类 否定伪类 其他伪类 UI元素状态伪类 4.字体 1.font-family 2.font-size 3.font-style 4.fo…

【分布式微服务云原生】探索微服务架构下的服务治理

一、引言 随着业务需求的不断膨胀和技术的迅速迭代,单体应用逐渐暴露出其可扩展性和灵活性的局限性。微服务架构应运而生,通过将大型复杂系统拆分成一组小而专注的服务来提升系统的敏捷性和可维护性。然而,服务数量的增加也带来了新的挑战&a…

追梦无Bug的软件世界

追梦无Bug的软件世界:测试人员的视角与探索 我有一个梦想,今天我们共同承载着一个愿景:创造一个没有Bug的软件世界。 我梦想有一天,用户将享受到完全无Bug的软件体验,用户不再因为软件中的Bug而感到困扰和沮丧。 我梦…

进入xwindows后挂起键盘鼠标没有响应@FreeBSD

问题: 在升级pkg包后,系统无法进入xfce等xwindows,表现为黑屏和看见鼠标,左上角有一个白字符块,键盘鼠标没有反应,整个系统卡住。但是可以ssh登录,内部的服务一切正常。 表现 处理过程&#xf…

C++之多线程

前言 多线程和多进程是并发编程的两个核心概念,它们在现代计算中都非常重要,尤其是在需要处理大量数据、提高程序性能和响应能力的场景中。 多线程的重要性: 资源利用率:多线程可以在单个进程中同时执行多个任务,这可以更有效地利用CPU资源,特别是在多核处理器上。 性…

奔驰EQS450suv升级增强AR抬头显示HUD案例分享

以下是奔驰 EQS450 SUV 升级增强版 AR 抬头显示的一般改装案例步骤及相关信息: 配件:通常包括显示屏、仪表模块、饰板等。 安装步骤: 1. 拆下中控的仪表。 2. 在仪表上预留位置切割出合适的孔位,用于安装显示器。 3. 将显示器…

(IDEA)spring项目导入本地jar包方法和项目打包时找不到引入本地jar包的问题解决方案

系列文章目录 文章目录 系列文章目录一、(IDEA)spring项目导入本地jar包方法和项目打包时找不到引入本地jar包的问题解决方案1.资料 一、(IDEA)spring项目导入本地jar包方法和项目打包时找不到引入本地jar包的问题解决方案 1.资料…

Python案例--水仙花数的探索之旅

一、引言 水仙花数,也称为阿姆斯特朗数,是一种特殊的三位数,其各位数字的立方和等于其本身。例如,153就是一个水仙花数,因为 135333153135333153。这种数字的发现不仅展示了数字的内在美,也激发了人们对数…

大学学校用电安全远程监测预警系统

1.概述: 该系统是基于移动互联网、云计算技术,通过物联网传感终端,将办公建筑、学校、医院、工厂、体育场馆、宾馆、福利院等人员密集场所的电气安全数据,实时传输至安全用申管理服务器,为用户提供不间断的数据跟踪&a…

五子棋双人对战项目(4)——匹配模块(解读代码)

目录 一、约定前后端交互接口的参数 1、websocket连接路径 2、构造请求、响应对象 二、用户在线状态管理 三、房间管理 1、房间类: 2、房间管理器: 四、匹配器(Matcher) 1、玩家实力划分 2、加入匹配队列(add) 3、移除…

一个简单的摄像头应用程序1

这个Python脚本实现了一个基于OpenCV的简单摄像头应用,我们在原有的基础上增加了录制视频等功能,用户可以通过该应用进行拍照、录制视频,并查看已拍摄的照片。以下是该脚本的主要功能和一些使用时需要注意的事项: 功能 拍照: 用户可以通过点击界面上的“拍照”按钮或按…

解决ModuleNotFoundError: No module named ‘torchcrf‘

运行深度学习程序时候,出现报错:ModuleNotFoundError: No module named torchcrf 将 from torchcrf import CRF 改为 from TorchCRF import CRF

C#案例 | 基于C#语言在Excel中进行二次开发(一):简单系统搭建:打印输出“Hello Excel C#”

基于C#语言在Excel中进行二次开发(一):简单系统搭建:打印输出”Hello Excel & C#” 实现效果第一步:前期准备第二步:打开VS 2022,创建项目第三步:程序界面设计 实现效果 在Exce…

GPT对话知识库——C、C++,还有Java,他们之间有什么区别

目录 1,问: 1,答: 1. 语言特性与设计理念 C 语言: C 语言: Java 语言: 2. 内存管理 3. 运行效率 C 和 C: Java: 4. 程序的执行方式 C 和 C: Jav…

《蓝桥杯算法入门》(C/C++、Java、Python三个版本)24年10月出版

推荐:《算法竞赛》,算法竞赛大全书,网购:京东 天猫  当当 文章目录 《蓝桥杯算法入门》内容简介本书读者对象作者简介联系与交流《蓝桥杯算法入门 C/C》版目录 《蓝桥杯算法入门 Java》版目录 《蓝桥杯算法入门 Python》版目录 …

STM32器件支持包安装,STLINK/JLINK驱动安装

一、支持包安装 1、离线安装 先下载支持包之后,再进行安装。如下图要安装STM32F1系列,双击 出现如下,会自动锁定安装路径,然后点击下一步,直接安装。 2、在线安装 首先需要电脑联网。如下。先点击第一个红框绿色按钮…

【EXCEL数据处理】000011 案列 EXCEL带有三角形图标的单元格转换,和文本日期格式转换。

前言:哈喽,大家好,今天给大家分享一篇文章!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 【EXCEL数据处理】000011 案列 EXCEL带有三角形图标的单元格转换。使用…

vim(1) -- 环境配置

1. 配置文件 编辑~/.vim/vimrc文件,内容如下。 " 开启语法高亮 syntax on " 显示行号 set number " 显示行下划线 set cursorline set scrolloff5 " 智能缩进 set smartindent " 行太长时换行显示 set wrap" 高亮搜索内容 set hlse…