双目立体视觉之深度估计

  • 为什么非得用双目相机才能得到深度?

说到这里,有些读者会问啦:为什么非得用双目相机才能得到深度?我闭上一只眼只用一只眼来观察,也能知道哪个物体离我近哪个离我远啊!是不是说明单目相机也可以获得深度?

在此解答一下:首先,确实人通过一只眼也可以获得一定的深度信息,不过这背后其实有一些容易忽略的因素在起作用:一是因为人本身对所处的世界是非常了解的(先验知识),因而对日常物品的大小是有一个基本预判的(从小到大多年的视觉训练),根据近大远小的常识确实可以推断出图像中什么离我们远什么离我们近;二是人在单眼观察物体的时候其实人眼是晃动的,相当于一个移动的单目相机,这类似于运动恢复结构(Structure from Motion, SfM)的原理,移动的单目相机通过比较多帧差异确实可以得到深度信息。

但是实际上,相机毕竟不是人眼,它只会傻傻的按照人的操作拍照,不会学习和思考。下图从物理原理上展示了为什么单目相机不能测量深度值而双目可以的原因。我们看到红色线条上三个不同远近的黑色的点在下方相机上投影在同一个位置,因此单目相机无法分辨成的像到底是远的那个点还是近的那个点,但是它们在上方相机的投影却位于三个不同位置,因此通过两个相机的观察可以确定到底是哪一个点。
这里写图片描述
- 理想双目相机成像模型

首先我们从理想的情况开始分析:假设左右两个相机位于同一平面(光轴平行),且相机参数(如焦距f)

  • 6
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
双目立体视觉是一种通过两个相机来模拟人眼视觉的技术,可以通过计算两个相机之间的视差来估计物体的深度。以下是一个简单的双目立体视觉深度测量的Python代码示例: ```python import cv2 import numpy as np # 读取左右相机图像 left_image = cv2.imread('left_image.jpg', 0) right_image = cv2.imread('right_image.jpg', 0) # 设置双目视差计算参数 window_size = 3 # 视差计算窗口大小 min_disparity = 16 # 最小视差值 num_disparities = 112 - min_disparity # 视差范围 # 创建立体视觉对象 stereo = cv2.StereoSGBM_create( minDisparity=min_disparity, numDisparities=num_disparities, blockSize=window_size, P1=8 * 3 * window_size ** 2, P2=32 * 3 * window_size ** 2, disp12MaxDiff=1, uniquenessRatio=10, speckleWindowSize=100, speckleRange=32 ) # 计算视差图 disparity_map = stereo.compute(left_image, right_image) # 将视差图转换为深度图 depth_map = np.zeros_like(disparity_map, dtype=np.float32) depth_map[disparity_map > 0] = 0.54 * 721 / disparity_map[disparity_map > 0] # 显示深度图 cv2.imshow('Depth Map', depth_map) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在代码中,我们首先读取了左右相机的图像,然后使用cv2.StereoSGBM_create函数创建了一个立体视觉对象。接下来,我们设置了视差计算的参数,包括窗口大小、最小视差值和视差范围等。然后,我们使用stereo.compute函数计算了视差图,并将其转换为深度图。最后,我们使用cv2.imshow函数显示了深度图。 请注意,这只是一个简单的示例代码,实际的双目立体视觉深度测量可能需要更复杂的算法和参数调整。此外,您还需要准备好左右相机的图像,并将其替换为实际的图像文件路径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值