搜索
首页科技周边人工智能计算机视觉中的立体视觉和深度感知及示例

在人工智能和图像处理的迷人世界中,这些概念在使机器能够像我们的眼睛一样感知我们周围的三维世界中起着关键作用。和我们一起探索立体视觉和深度感知背后的技术,揭示计算机如何从二维图像中获得深度、距离和空间理解的秘密。

计算机视觉中的立体视觉和深度感知及示例

立体视觉和深度感知在计算机视觉中具体指的是什么?

立体视觉和深度感知是计算机视觉领域中的重要概念,其目的是模仿人类从视觉信息中感知深度和三维结构的能力。这些概念通常被应用于机器人技术、自动驾驶汽车和增强现实等领域

立体视觉

立体视觉,也称为立体视或双目视觉,是一种通过捕获和分析稍微分开放置的两个或多个摄像头的图像来感知场景深度的技术,模仿了人眼的工作方式。

立体视觉背后的基本原理是三角测量。当两个摄像头(或“立体摄像头”)从稍微不同的视点捕获相同场景的图像时,生成的图像对称为立体对,其中包含两个图像中相应点的位置差异或差异。

通过分析这些差异,计算机视觉系统可以计算场景中物体的深度信息。靠近摄像头的物体将具有较大的差异,而远离摄像头的物体将具有较小的差异。

立体视觉算法通常包括特征匹配、差异映射和极线几何等技术,用于计算深度图或场景的3D表示

深度感知

在计算机视觉中,深度感知是指系统能够从单个或多个2D图像或视频帧中理解和估计3D场景中物体的距离能力

实现深度感知的方法不仅限于立体视觉,还可以采用其他途径,包括:

  • 单眼线索:这些是可以在单个摄像头或图像中感知的深度线索。例如,透视、纹理梯度、阴影和遮挡等示例。即使在没有立体视觉的情况下,这些线索也可以帮助估算深度。
  • LiDAR(光探测与测距):LiDAR传感器使用激光束来测量场景中物体的距离,提供点云形式的精确深度信息。这些信息可以与视觉数据融合,以获得更准确的深度感知。
  • 结构光:结构光涉及将已知图案投射到场景上,并分析该图案在场景中的物体上的变形。这种变形可用于计算深度信息。
  • 飞行时间(ToF)摄像头:ToF摄像头测量光线从物体反射并返回到摄像头所需的时间。这些信息用于估算深度。

在计算机视觉应用中,深度感知对于避开障碍物、识别物体、进行3D重建和理解场景等任务至关重要

计算机视觉中的立体视觉和深度感知组件

  • 立体摄像头:立体视觉依赖于两个或多个相机(立体摄像头),这些相机相距已知的距离放置。这些相机从稍微不同的视点捕获相同场景的图像,模拟人眼感知深度的方式。
  • 图像捕获:相机捕获场景的图像或视频帧。这些图像通常被称为左图像(来自左相机)和右图像(来自右相机)。
  • 校准:为了准确计算深度信息,必须对立体摄像头进行校准。这个过程涉及确定摄像头参数,如内在矩阵、畸变系数和外在参数(摄像头之间的旋转和平移)。校准确保来自两个相机的图像能够正确进行校正和匹配。
  • 校正:校正是应用于捕获的图像的几何变换,以对齐极线上的相应特征。这通过使差异更可预测来简化立体匹配过程。
  • 立体匹配:立体匹配是在左图像和右图像之间找到对应点或匹配点的过程。用于计算每个像素的差异的像素值被称为差异,表示图像中特征的水平偏移。有各种立体匹配算法可供选择,包括块匹配、半全局匹配和图割,用于找到这些对应点。

  • 差异图:差异图是一幅灰度图像,其中每个像素的强度值对应于场景中该点的差异或深度。靠近相机的物体具有较大的差异,而远离相机的物体具有较小的差异。
  • 深度图:深度图是通过使用已知的基线(相机之间的距离)和相机的焦距来从差异图中导出的。它计算每个像素的实际世界单位(例如米)的深度,而不是差异。
  • 可视化:深度和差异图通常可视化,以提供场景的3D结构的可读人类表示。这些图可以显示为灰度图像,也可以转换为点云以进行3D可视化。
  • 一些硬件:除了摄像头外,还可以使用深度感知摄像头(例如Microsoft Kinect、Intel RealSense)或LiDAR(光探测与测距)传感器等专用硬件来获取深度信息。这些传感器直接提供深度,无需立体匹配。

计算机视觉中的立体视觉和深度感知Python示例实现:

import cv2import numpy as np# Create two video capture objects for left and right cameras (adjust device IDs as needed)left_camera = cv2.VideoCapture(0)right_camera = cv2.VideoCapture(1)# Set camera resolution (adjust as needed)width = 640height = 480left_camera.set(cv2.CAP_PROP_FRAME_WIDTH, width)left_camera.set(cv2.CAP_PROP_FRAME_HEIGHT, height)right_camera.set(cv2.CAP_PROP_FRAME_WIDTH, width)right_camera.set(cv2.CAP_PROP_FRAME_HEIGHT, height)# Load stereo calibration data (you need to calibrate your stereo camera setup first)stereo_calibration_file = ‘stereo_calibration.yml’calibration_data = cv2.FileStorage(stereo_calibration_file, cv2.FILE_STORAGE_READ)if not calibration_data.isOpened():print(“Calibration file not found.”)exit()camera_matrix_left = calibration_data.getNode(‘cameraMatrixLeft’).mat()camera_matrix_right = calibration_data.getNode(‘cameraMatrixRight’).mat()distortion_coeff_left = calibration_data.getNode(‘distCoeffsLeft’).mat()distortion_coeff_right = calibration_data.getNode(‘distCoeffsRight’).mat()R = calibration_data.getNode(‘R’).mat()T = calibration_data.getNode(‘T’).mat()calibration_data.release()# Create stereo rectification mapsR1, R2, P1, P2, Q, _, _ = cv2.stereoRectify(camera_matrix_left, distortion_coeff_left,camera_matrix_right, distortion_coeff_right,(width, height), R, T)left_map1, left_map2 = cv2.initUndistortRectifyMap(camera_matrix_left, distortion_coeff_left, R1, P1, (width, height), cv2.CV_32FC1)right_map1, right_map2 = cv2.initUndistortRectifyMap(camera_matrix_right, distortion_coeff_right, R2, P2, (width, height), cv2.CV_32FC1)while True:# Capture frames from left and right camerasret1, left_frame = left_camera.read()ret2, right_frame = right_camera.read()if not ret1 or not ret2:print(“Failed to capture frames.”)break# Undistort and rectify framesleft_frame_rectified = cv2.remap(left_frame, left_map1, left_map2, interpolation=cv2.INTER_LINEAR)right_frame_rectified = cv2.remap(right_frame, right_map1, right_map2, interpolation=cv2.INTER_LINEAR)# Convert frames to grayscaleleft_gray = cv2.cvtColor(left_frame_rectified, cv2.COLOR_BGR2GRAY)right_gray = cv2.cvtColor(right_frame_rectified, cv2.COLOR_BGR2GRAY)# Perform stereo matching to calculate depth map (adjust parameters as needed)stereo = cv2.StereoBM_create(numDisparities=16, blockSize=15)disparity = stereo.compute(left_gray, right_gray)# Normalize the disparity map for visualizationdisparity_normalized = cv2.normalize(disparity, None, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8U)# Display the disparity mapcv2.imshow(‘Disparity Map’, disparity_normalized)if cv2.waitKey(1) & 0xFF == ord(‘q’):break# Release resourcesleft_camera.release()right_camera.release()cv2.destroyAllWindows()

注意:对于立体摄像头设置,需要进行摄像头校准,并保存校准数据在.yml文件中,将路径放入示例代码中。

应用

利用深度信息进行目标检测和跟踪,实现更精确的定位和识别。 利用深度信息进行虚拟现实和增强现实应用,使用户能够与虚拟环境进行更真实的交互。 利用深度信息进行人脸识别和表情分析,提高人脸识别的准确性和鲁棒性。 利用深度信息进行三维重建和建模,生成真实感觉的三维场景。 利用深度信息进行姿态估计和行为分析,实现更精准的动作识别和行为理解。 利用深度信息进行自动驾驶和机器人导航,提高智能交通和自动化领域的安全性和效率

  • 3D场景重建
  • 物体检测和跟踪
  • 机器人和车辆的自主导航
  • 增强现实和虚拟现实
  • 手势识别

限制

以下是一些重要的限制:

  • 依赖于相机校准:立体视觉系统需要对所使用的摄像机进行精确的校准。准确的校准对于确保深度信息的正确计算至关重要。校准中的任何错误都可能导致深度感知不准确。
  • 有限的视场范围:立体视觉系统的视场范围有限,基于两个摄像机之间的基线距离。这可能导致盲区或在两个摄像机视场之外的对象的感知困难。
  • 没有纹理和特征的表面:立体匹配算法依赖于在左右图像中找到对应的特征。缺乏纹理或独特特征的表面,如光滑的墙壁或均匀的背景,可能难以准确匹配,导致深度估计错误。
  • 遮挡:在场景中相互遮挡的对象可能会对立体视觉造成困难。当一个对象部分遮挡另一个对象时,确定被遮挡区域的深度可能会有问题。
  • 有限的范围和分辨率:随着距离摄像机的增加,使用立体视觉感知深度的准确性会减小。此外,深度测量的分辨率随着距离的增加而减小,使远处物体的细节难以感知。
  • 对光照条件敏感:光照条件的变化,如环境光的变化或阴影,可能会影响立体视觉的准确性。不一致的光照条件可能会使左右图像之间的对应关系难以找到。
  • 计算资源:立体匹配算法可能需要大量计算资源,特别是在处理高分辨率图像或实时视频流时。实时应用可能需要强大的硬件来进行高效处理。
  • 成本和复杂性:设置带有校准摄像机的立体视觉系统可能会昂贵且耗时。硬件要求,包括摄像机和校准设备,可能会成为某些应用的障碍。
  • 透明或反光物体的不准确性:透明或高反射表面可能会导致立体视觉中的错误,因为这些材料可能不会以适合深度感知的方式反射光线。
  • 动态场景:立体视觉假定在图像捕捉期间场景是静态的。在具有移动对象或摄像机运动的动态场景中,维护左右图像之间的对应关系可能会很具挑战性,导致深度估计不准确。
  • 有限的户外使用:立体视觉系统在明亮阳光下的户外环境或缺乏纹理的场景中可能会遇到困难,如晴朗的天空。

总而言之,计算机视觉中的立体视觉和深度感知为机器与理解我们环境的三维丰富性互动打开了新的可能性。正如我们在本文中所讨论的,这些技术是各种应用的核心,包括机器人和自动驾驶车辆,增强现实和医学成像等领域

以上是计算机视觉中的立体视觉和深度感知及示例的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:51CTO.COM。如有侵权,请联系admin@php.cn删除
微软工作趋势指数2025显示工作场所容量应变微软工作趋势指数2025显示工作场所容量应变Apr 24, 2025 am 11:19 AM

由于AI的快速整合而加剧了工作场所的迅速危机危机,要求战略转变以外的增量调整。 WTI的调查结果强调了这一点:68%的员工在工作量上挣扎,导致BUR

AI可以理解吗?中国房间的论点说不,但是对吗?AI可以理解吗?中国房间的论点说不,但是对吗?Apr 24, 2025 am 11:18 AM

约翰·塞尔(John Searle)的中国房间论点:对AI理解的挑战 Searle的思想实验直接质疑人工智能是否可以真正理解语言或具有真正意识。 想象一个人,对下巴一无所知

中国的'智能” AI助手回应微软召回的隐私缺陷中国的'智能” AI助手回应微软召回的隐私缺陷Apr 24, 2025 am 11:17 AM

与西方同行相比,中国的科技巨头在AI开发方面的课程不同。 他们不专注于技术基准和API集成,而是优先考虑“屏幕感知” AI助手 - AI T

Docker将熟悉的容器工作流程带到AI型号和MCP工具Docker将熟悉的容器工作流程带到AI型号和MCP工具Apr 24, 2025 am 11:16 AM

MCP:赋能AI系统访问外部工具 模型上下文协议(MCP)让AI应用能够通过标准化接口与外部工具和数据源交互。由Anthropic开发并得到主要AI提供商的支持,MCP允许语言模型和智能体发现可用工具并使用合适的参数调用它们。然而,实施MCP服务器存在一些挑战,包括环境冲突、安全漏洞以及跨平台行为不一致。 Forbes文章《Anthropic的模型上下文协议是AI智能体发展的一大步》作者:Janakiram MSVDocker通过容器化解决了这些问题。基于Docker Hub基础设施构建的Doc

使用6种AI街头智能策略来建立一家十亿美元的创业使用6种AI街头智能策略来建立一家十亿美元的创业Apr 24, 2025 am 11:15 AM

有远见的企业家采用的六种策略,他们利用尖端技术和精明的商业敏锐度来创造高利润的可扩展公司,同时保持控制权。本指南是针对有抱负的企业家的,旨在建立一个

Google照片更新解锁了您所有图片的惊人Ultra HDRGoogle照片更新解锁了您所有图片的惊人Ultra HDRApr 24, 2025 am 11:14 AM

Google Photos的新型Ultra HDR工具:改变图像增强的游戏规则 Google Photos推出了一个功能强大的Ultra HDR转换工具,将标准照片转换为充满活力的高动态范围图像。这种增强功能受益于摄影师

Descope建立AI代理集成的身份验证框架Descope建立AI代理集成的身份验证框架Apr 24, 2025 am 11:13 AM

技术架构解决了新兴的身份验证挑战 代理身份集线器解决了许多组织仅在开始AI代理实施后发现的问题,即传统身份验证方法不是为机器设计的

Google Cloud Next 2025以及现代工作的未来Google Cloud Next 2025以及现代工作的未来Apr 24, 2025 am 11:12 AM

(注意:Google是我公司的咨询客户,Moor Insights&Strateging。) AI:从实验到企业基金会 Google Cloud Next 2025展示了AI从实验功能到企业技术的核心组成部分的演变,

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器