单目视觉测量及双目视觉测量

一、单目视觉测量        

1.1 原理部分讲解        

        单目视觉系统通过采集图像,将图像转换为二维数据,然后对采集的图像进行模式识别,通过图像匹配算法识别行驶过程中的车辆、行人、交通标志等,最后依据目标物体的运动模式和定位技术,估算目标物体与本车的相对距离和相对速度。

        单目相机测距常用或者说实用的方法就是相似三角形法。这种方法假设我们有一个宽度为W的目标或者物体,然后我们将这个目标放在距离我们的相机为D的位置。我们用相机对物体进行拍照并且测量物体的像素宽度P。这样我们就得出了相机焦距的公式:F = (P x D) / W。通过这个公式,我们可以计算出物体离相机的距离。

        该算法具有结构简单、运算速度快、成本低等优点。它不需要像双目视觉那样进行复杂的特征点匹配,因此算法的实时性和鲁棒性较好。但一个主要挑战是缺乏深度信息,导致尺度模糊问题。此外,单目视觉系统在复杂环境下的距离估计、低光照条件下的性能表现等方面也面临挑战。

1.2 常用特征测量算法    

1.2.1 SIFT(尺度不变特征变换)

        SIFT(Scale-Invariant Feature Transform,尺度不变特征变换)是一种在计算机视觉领域广泛使用的特征检测和描述算法,由David G. Lowe在1999年提出,并在2004年完善。SIFT算法的核心思想是提取图像中的局部特征,并生成对应的特征描述子,这些特征对图像的旋转、尺度缩放、亮度变化保持不变性,对视角变化、仿射变换、噪声也保持一定程度的稳定性。

        其主要包括以下特点:

  1. 尺度不变性:SIFT特征对图像的缩放保持不变,这意味着在同一物体的不同尺度图像中,SIFT能够检测到相同的特征点。
  2. 旋转不变性:SIFT特征对图像的旋转保持不变,即旋转图像后,SIFT能够检测到相同的特征点。
  3. 亮度不变性:SIFT特征对图像的亮度变化不敏感,即使在不同光照条件下,也能检测到相同的特征点。

        同时SIFT对视角变化、仿射变换、噪声等具有一定的稳定性,具有较好的区分性,信息量丰富,适用于在海量特征数据库中进行快速、准确的匹配。即使在图像中只有少数几个物体,SIFT也能产生大量的特征向量,并且SIFT可以与其他形式的特征向量方便地联合使用。

        SIFT算法的实现步骤主要包括:

  1. 尺度空间极值检测:在不同尺度下,通过高斯滤波器构建图像的高斯金字塔,并在每个尺度上寻找局部极值点,作为关键点候选。
  2. 关键点定位:通过在尺度空间和图像空间中对极值点进行精确定位,找到稳定的关键点。
  3. 方向赋值:为每个关键点分配一个或多个方向,提高特征的旋转不变性。
  4. 特征描述:基于关键点的位置和方向,计算局部特征向量,构建特征描述符

1.2.2 SURF(加速稳健特征)

        SURF(Speeded Up Robust Features,加速稳健特征)算法是一种用于图像特征提取和描述的计算机视觉算法,由Herbert Bay等人在2006年提出。它是基于SIFT(Scale-Invariant Feature Transform)算法的改进版本,旨在提高特征检测和描述的速度,同时保持特征的尺度不变性和旋转不变性。

        其主要包括以下特点:

  1. 快速性:SURF算法通过使用积分图像和快速的盒式滤波器(Box Filter)来加速特征点检测和描述符生成,比SIFT算法快几倍。
  2. 稳健性:SURF算法对于旋转、缩放、亮度变化等干扰具有较好的鲁棒性,能够在不同的场景中保持稳定的性能。
  3. 特征点检测:SURF使用Hessian矩阵的行列式值作为特征点检测的依据,这种方法可以有效地识别图像中的角点、边缘等特征点。

        SURF算法在特征点周围选择一个区域,并计算该区域内的水平和垂直Haar小波响应,形成特征描述符。默认情况下,SURF描述符为64维,但也可以配置为128维以提高描述的精度。同时SURF算法可以为特征点分配一个主方向,以提高特征的旋转不变性。这一步骤可以通过统计特征点邻域内的Haar小波特征来实现。

        值得一提的是,与SIFT不同,SURF的专利已经过期,因此在商业应用中更加自由无碍,其在图像匹配、目标识别、全景拼接等领域有着广泛的应用。

二、双目视觉测量

2.1 原理部分讲解

        双目视觉测量算法是一种基于双目立体视觉原理的计算机视觉技术,它通过使用两个摄像头从不同角度捕捉同一场景的图像,来计算图像中每个像素点的视差信息,进而获取实际空间中物体的三维信息。通过双目视觉测量算法,甚至可以构建出三维空间中的点云,这些点云数据可以用于进一步的三维重建和分析。以下是双目视觉测量算法的关键步骤和原理:

  1. 双目标定:确定两个摄像头的内外参数。
  2. 立体校正(含消除畸变):对图像进行校正,使两个摄像头的图像位于同一平面且互相平行。
  3. 立体匹配:在两个校正后的图像中进行像素点匹配。
  4. 视差计算:根据匹配结果计算每个像素的视差。
  5. 深度计算(3D坐标):利用视差信息计算空间中物体的三维坐标

        这种双目视觉测量算法的精度受到多种因素的影响,包括相机畸变、视差偏差、基线距离与焦距、像素大小和物理尺寸、深度范围等。其中相机畸变是指由于镜头光学特性导致的图像失真,需要通过标定来校正这些畸变,以获得准确的几何关系。而立体校正作为是双目视觉中的一个重要步骤,它包括消除畸变和调整图像,使得两个摄像头的图像可以进行有效的匹配。

        立体匹配是双目视觉系统中的核心部分,它确定多幅图像之间投影点间的一一对应关系。有效的立体匹配可以使关键点更加容易被提取。视差图是立体匹配的结果,显示了场景中每个像素点的视差值。深度图是基于视差图计算得到的,它表示了场景中每个像素点到摄像头的距离。深度图的计算通常涉及到将视差值转换为实际的距离,这需要知道摄像头的焦距和摄像头之间的基线距离。

2.2 常用特征测量算法

        在双目视觉测量中,特征测量算法是用于从图像中提取关键信息并进行匹配的重要技术。以下是一些常用的特征测量算法:

        SIFT(Scale-Invariant Feature Transform,尺度不变特征变换)

        SIFT算法能够在不同尺度和旋转下提取稳定的特征点,并且对亮度变化和视角变化保持不变性。SIFT特征提取的实质是在不同的尺度空间上查找关键点,并计算关键点的方向。这些关键点通常是图像中的角点、边缘点、暗区的亮点及亮区的暗点等。

        SURF(Speeded Up Robust Features,加速稳健特征)

        SURF算法是SIFT算法的改进版本,它采用快速Hessian算法检测关键点,并使用特征向量描述关键点周围区域的情况。SURF算法比SIFT算法快好几倍,同时保持了特征的尺度不变性和旋转不变性。

        ORB(Oriented FAST and Rotated BRIEF)

ORB算法结合了FAST关键点检测和BRIEF描述子,具有旋转不变性和尺度不变性。ORB特征由关键点和描述子两部分组成,其中关键点是Oriented FAST,描述子是BRIEF。ORB对BRIEF进行了改进,使用了先前计算的方向信息。

        Harris角点检测

        Harris角点检测是一种经典的角点检测方法,它通过计算图像的梯度和其二阶矩来检测角点。Harris角点检测基本思想是识别图像中灰度变化明显的地方,这些地方通常是角点。

        BRIEF(Binary Robust Independent Elementary Features)

BRIEF是一种快速的特征描述子提取方法,它通过对关键点周围的小块区域进行随机采样,并比较这些区域的像素值来生成二进制字符串作为描述子。

        FREAK(Fast Retina Keypoint)

        FREAK是一种快速的特征点提取和匹配算法,它模拟人类视网膜对视觉信息的处理方式,具有旋转不变性和尺度不变性。

        AKAZE(Accelerated-KAZE)

        AKAZE是一种非线性特征提取算法,它结合了KAZE算法的优点,并对其进行了加速。AKAZE能够提取出对视角变化和光照变化具有不变性的特征点。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android Profiler 内存分析

Android studio(下面简称AS)为App提供的性能分析工具,在AS3.0替换掉旧的分析工具,对于其使用方法,官方也有对应的介绍:Android Profiler 对于使用方法,我只用到比较简单的功能,高级的…

DXF-模型空间和图纸空间、图层冷冻标志位

‌DXF文件中操作环境的标志码是组代码67 CAD-模型空间和图纸空间-是CAD中两种不同的操作环境 模型空间主要用于建模,是一个没有界限的三维空间,用户在这个空间中以任意尺寸绘制图形,通常按照1:1的比例,以实际尺寸绘制…

前端开发调试之 PC 端调试

以下内容来自稀土掘金青训营课程 bug 与 debug 点击.cls开启动态修改元素的class输入字符串可以动态的给元素添加类名勾选/取消类名可以动态的查看类名生效效果点击具体的样式值(字号、颜色、宽度高度等)可以进行编辑,浏览器内容区域实时预览…

Spring Boot集成SQL Server快速入门Demo

1.什么是SQL Server? SQL Server是由Microsoft开发和推广的以客户/服务器(c/s)模式访问、使用Transact-SQL语言的关系数据库管理系统(DBMS),它最初是由Microsoft、Sybase和Ashton-Tate三家公司共同开发的&…

Self-RAG讲解

Self-RAG Self-RAG 概述 Self-RAG(Self-Reflective Retrieval-Augmented Generation)是一种增强型的RAG(检索增强生成)策略,结合了自我反思和自我评分机制,以提高检索文档和生成内容的质量。通过对检索到…

设计一致性的关键:掌握 Axure 母版使用技巧

设计一致性的关键:掌握 Axure 母版使用技巧 前言 在快节奏的产品开发周期中,设计师们一直在寻找能够提升工作效率和保持设计一致性的方法。 Axure RP,作为一款强大的原型设计工具,其母版功能为设计师们提供了一个强大的解决方案…

uniapp框架配置项pages.json

uniapp框架配置项pages.json pages.json 文件用来对 uni-app 进行全局配置,决定页面文件的路径、窗口样式、原生的导航栏、底部的原生tabbar 等。 globalStyle 全局配置 用于设置应用的状态栏、导航条、标题、窗口背景色等。下面配置项默认应用于每个页面。 注意…

蓝桥杯c++算法学习【1】之枚举与模拟(卡片、回文日期、赢球票、既约分数:::非常典型的比刷例题!!!)

重发一下,之前得排版有问题,而且另外加了一道题。。 别忘了请点个赞收藏关注支持一下博主喵!!! 关注博主,更多蓝桥杯nice题目静待更新:) 枚举与模拟 一、卡片: 【问题描述】 小蓝有很多数字…

Java 基于 SpringBoot+Vue 的社区智慧养老系统(V3.0)

大家好,我是Java徐师兄,今天为大家带来的是Java 基于 SpringBootVue 的社区智慧养老系统(V3.0)。该系统采用 Java 语言开发,SpringBoot 框架,MySql 作为数据库,系统功能完善 ,实用性…

el-table 纵向垂直表头处理

项目中表格展示会遇到需要纵向垂直表头情况,下面,我们基于el-table组件来实现这种表格。 以下是这次需要用到的数据表格,已知左侧违章名称是固定的,而月份是不固定的,在后端返回数据格式已确定的情况下,需…

caozha-CEPCS(新冠肺炎疫情防控系统)

caozha-CEPCS,是一个基于PHP开发的新冠肺炎疫情防控系统,CEPCS(全称:COVID-19 Epidemic Prevention and Control System),可以应用于单位、企业、学校、工业园区、村落等等。小小系统,希望能为大…

新手如何快速搭建一个Springboot项目

新手如何快速搭建一个Springboot项目 一、开发环境准备后端其他工具 二、创建后端项目三、定义HelloController.hello()方法,返回“Hello Springboot” 一、开发环境准备 后端 1.安装 JDK:确保你的系统中安装了合适版本的 JDK,Spring Boot …

uniapp—android原生插件开发(4uniapp引用aar插件)

本篇文章从实战角度出发,将UniApp集成新大陆PDA设备RFID的全过程分为四部曲,涵盖环境搭建、插件开发、AAR打包、项目引入和功能调试。通过这份教程,轻松应对安卓原生插件开发与打包需求! 一、将android程序打包成aar插件包 直接使…

vs2022搭建opencv开发环境

1 下载OpenCV库 https://opencv.org/ 下载对应版本然后进行安装 将bin目录添加到系统环境变量opencv\build\x64\vc16\bin 复制该路径 打开高级设置添加环境变量 vs2022新建一个空项目 修改属性添加头文件路径和库路径 修改链接器,将OpenCV中lib库里的o…

[Java]微服务拆分

导入项目 本篇及后续的微服务学习都是基于Centos7系统下的Docker部署,因此需要准备: Centos7的环境SSH客户端安装好Docker会使用Docker 之前的学习, 导致虚拟机中存在黑马商城项目以及mysql数据库, 为了保持一致, 需要删除 cd /rootdocker compose down 安装mysq…

【C++】内存池

目录 一、什么是内存池 1.池化技术 2.内存池 3.内存池主要解决的问题 二、内存池的实现 1.New申请空间 2.Delete释放空间 3.再看New申请空间 4.内存池完整代码 三、内存池性能测试 一、什么是内存池 1.池化技术 所谓 "池化技术",就是程序向系统…

计算机新手练级攻略——如何搜索问题

目录 计算机学生新手练级攻略——如何搜索问题1.明确搜索意图2.使用精确关键词3.使用专业引擎搜索4.利用好技术社区1. Stack Overflow2. GitHub3. IEEE Xplore4. DBLP 5.使用代码搜索工具1. GitHub 代码搜索2. Stack Overflow 代码搜索3. Papers with Code4. IEEE Xplore 6.查阅…

区块链技术在电子政务中的应用

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 区块链技术在电子政务中的应用 区块链技术在电子政务中的应用 区块链技术在电子政务中的应用 引言 区块链技术概述 定义与原理 发…

stm32 踩坑笔记

串口问题: 问题:会改变接收缓冲的下一个字节 串口的初始化如下,位长度选择了9位。因为要奇偶校验,要选择9位。但是接收有用数据只用到1个字节。 问题原因: 所以串口接收时会把下一个数据更改

034集——JIG效果实现(橡皮筋效果)(CAD—C#二次开发入门)

可实现效果如下(对象捕捉F3需打开,否则效果不好): public class CircleJig : EntityJig{public static void DraCJig(){PromptPointResult ppr Z.ed.GetPoint("a");if (ppr.Value null) return;Point3d pt ppr.Value…