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

news2024/11/17 23:42:04

目录

一、角点检测

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 np

man = 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.coloradmin.cn/o/2176292.html

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

相关文章

深度学习反向传播-过程举例

深度学习中,一般的参数更新方式都是梯度下降法,在使用梯度下降法时,涉及到梯度反向传播的过程,那么在反向传播过程中梯度到底是怎么传递的?结合自己最近的一点理解,下面举个例子简单说明! 一、…

Qt开发技巧(九)去掉切换按钮,直接传样式文件,字体设置,QImage超强,巧用Qt的全局对象,信号槽断连,低量数据就用sqlite

继续讲一些Qt开发中的技巧操作: 1.去掉切换按钮 QTabWidget选项卡有个自动生成按钮切换选项卡的机制,有时候不想看到这个烦人的切换按钮,可以设置usesScrollButtons为假,其实QTabWidget的usesScrollButtons属性最终是应用到QTabWi…

衡石分析平台系统管理手册-功能配置之AI 助手集成嵌入指南

AI 助手集成嵌入指南​ 本文档将引导您通过几个简单的步骤,将 AI 助手集成或嵌入到您的系统中。HENGSHI SENSE AI 助手提供了多种集成方式,您可以通过 iframe、JS SDK 或 API 调用等方式将 AI 助手嵌入集成到您的系统中。 1. 通过 iframe 集成​ ifra…

老板最想要的20套模板!基于 VUE 国产开源 IoT 物联网 Web 可视化大屏设计器

如有需求,文末联系小编 Cola-Designer 是一个基于VUE开发,实现拖拽和配置方式生成数据大屏,提供丰富的可视化模板,满足客户业务监控、数据统计、风险预警、地理信息分析等多种业务的展示需求。Cola-Designer 帮助工程师通过图形化…

MySQL - 单表增删改

1. MySQL 概述 MySQL 是一种流行的开源关系型数据库管理系统 (DBMS),广泛应用于互联网公司和企业开发中。它支持 SQL 语句操作数据,并提供多种版本供选择。 1.1 MySQL 安装和连接 社区版:免费版本,适合开发者使用。商业版&…

sizeof 和 strlen

一 . sizeof 关键字 这个是我们的老朋友了昂,经常都在使用,它是专门用来计算变量所占内存空间大小的,单位是字节,当然,如果我们的操作对象是类型的话,计算的就是类型所创建的变量所占内存的大小&#xff0…

【笔记】神领物流day1.1.13前后端部署【未完】

使用jenkins 前端部署 需要将前端开发的vue进行编译,发布成html,然后通过nginx进行访问,这个过程已经在Jenkins中配置,执行点击发布即可 网址栏输入神领TMS管理系统 (sl-express.com)即可看见启动成功 后端部署看linux 回到Jenki…

25维谛技术面试最常见问题面试经验分享总结(包含一二三面题目+答案)

开头附上工作招聘面试必备问题噢~~包括综合面试题、无领导小组面试题资源文件免费!全文干货。 【免费】25维谛技术面试最常见问题面试经验分享总结(包含一二三面题目答案)资源-CSDN文库https://download.csdn.net/download/m0_72216164/8979…

单调递增/递减栈

单调栈 单调栈分为单调递增栈和单调递减栈 单调递增栈:栈中元素从栈底到栈顶是递增的 单调递减栈:栈中元素从栈底到栈顶是递减的 应用:求解下一个大于x元素或者是小于x的元素的位置 给一个数组,返回一个大小相同的数组&#x…

一文了解:最新版本 Llama 3.2

Meta AI最近发布了 Llama 3.2。这是他们第一次推出可以同时处理文字和图片的多模态模型。这个版本主要关注两个方面: 视觉功能:他们现在有了能处理图片的模型,参数量从11亿到90亿不等。 轻量级模型:这些模型参数量在1亿到3亿之间…

llamafactory0.9.0微调qwen2vl

LLaMA-Factory/data/README_zh.md at main hiyouga/LLaMA-Factory GitHubEfficiently Fine-Tune 100+ LLMs in WebUI (ACL 2024) - LLaMA-Factory/data/README_zh.md at main hiyouga/LLaMA-Factoryhttps://github.com/hiyouga/LLaMA-Factory/blob/main

【Java SE】初遇Java,数据类型,运算符

🔥博客主页🔥:【 坊钰_CSDN博客 】 欢迎各位点赞👍评论✍收藏⭐ 1. Java 概述 1.1 Java 是什么 Java 是一种高级计算机语言,是一种可以编写跨平台应用软件,完全面向对象的程序设计语言。Java 语言简单易学…

Android平台如何获取CPU占用率和电池电量信息

技术背景 我们在做Android平台GB28181设备接入模块、轻量级RTSP服务模块和RTMP推流模块的时候,遇到这样的技术诉求,开发者希望把实时CPU占用、电池信息等叠加在视频界面。 获取CPU占用率 Android平台获取CPU占用情况,可以读取/proc/stat文…

第十三届蓝桥杯真题Java c组D.求和(持续更新)

博客主页:音符犹如代码系列专栏:蓝桥杯关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 【问题描述】 给定 n 个整数 a1, a2, , an ,求它们两两相乘再相…

生信初学者教程(十六):GO富集分析

文章目录 介绍加载R包导入数据所需函数运行输出结果总结介绍 GO(Gene Ontology)是一个在生物信息学中广泛使用的概念,用于描述基因和基因产物的功能、它们所处的细胞位置以及它们参与的生物过程。GO项目是一个协作性的国际努力,旨在建立和维护一个适用于各种物种的、结构化…

用Python实现运筹学——Day 6: 单纯形法求解过程

一、学习内容 1. 单纯形法的详细步骤 单纯形法是通过迭代过程来优化线性规划问题的解决方案。该算法从可行解空间的一个顶点出发,逐步沿着可行解空间的边界移动到另一个顶点,直到找到最优解。单纯形法的求解过程分为以下几个步骤: 初始化&a…

EE trade:黄金T+D是什么意思

黄金TD,全称“黄金延期交割”,是由上海黄金交易所推出的标准化合约,允许投资者以保证金的形式进行黄金交易,并可以选择当日交割或延期交割。它为国内投资者提供了一个全新的黄金投资渠道,但也存在一些风险,…

Linux进程切换以及调度算法

目录 Linux进程切换以及调度算法 Linux进程切换介绍 前置知识 进程切换过程分析 调度算法 补充知识 Linux进程切换以及调度算法 Linux进程切换介绍 前面提到,分时操作系统下,CPU会在多个进程中做高速切换以实现多个进程看似同时执行的&#xff0…

会员办理--足浴店系统开发代码———未来之窗行业应用跨平台架构

function fun_会员查询_事务_新增(){var 未来之窗vos对话框_内容 ;var title"test";var 未来之窗vos对话框_id"hjksgfjkkhkj";CyberWin_Dialog.layer(未来之窗vos对话框_内容,{type:"frame",title:"新增会员",move:false,width:"…

828华为云征文|WordPress部署

目录 前言 一、环境准备 二、远程连接 三、WordPress简介 四、WordPress安装 1. 基础环境安装 ​编辑 2. WordPress下载与解压 3. 创建站点 4. 数据库配置 总结 前言 WordPress 是一个非常流行的开源内容管理系统(Content Management System, CMS&#xf…