首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenCV计算图像坐标中的视差

OpenCV计算图像坐标中的视差
EN

Stack Overflow用户
提问于 2014-09-11 17:09:07
回答 1查看 1.9K关注 0票数 1

我试图计算左、右图像中的视差(像素差)。假设图像被校正(行对齐),主点被称为cx,cy (左、右相机的注意原则点不同)。

如果我们在左边的图像中有一个像素,x_l在右边的图像x_r中有相应的像素,如果我们使用原点为cx和cy的图像坐标,那么两个像素的差就是: disp = x_l - x_r。

但是,如果图像坐标的原点位于图像的左上角(即定义在OpenCV中),那么在计算视差时是否需要考虑这个偏移量(cx)?或者我还能用disp = x_l - x_r来得到正确的视差吗?

这似乎有点愚蠢,但我确实感到困惑。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-12 19:04:26

这真的取决于你用视差计算深度的方式。

两个校正图像的投影矩阵(在图像左上角具有坐标原点)为下列形式:

代码语言:javascript
复制
      [ fx   0  cx_l  0 ]
P_l = [  0  fy    cy  0 ]
      [  0   0     1  0 ]

      [ fx   0  cx_r  -B ]
P_r = [  0  fy    cy   0 ]
      [  0   0     1   0 ]

其中B为基线,fx为普通水平焦距。如果在这两幅图像中投影相同的3D点M = [X; Y; Z; 1],则得到以下关系:

代码语言:javascript
复制
u_l-u_r = fx*B/Z + cx_l-cx_r

P_l*M = Z*[u_l; v; 1]P_r*M = Z*[u_r; v; 1]。这种关系可以重构为

代码语言:javascript
复制
Z = fx * B / (u_l-u_r-cx_l+cx_r)
  = fx * B / (disp_1-cx_l+cx_r)
  = fx * B / disp_2

使用

代码语言:javascript
复制
disp_1 = u_l-u_r
disp_2 = u_l-u_r-cx_l+cx_r

因此,你可以选择计算你喜欢的视差,只要你在使用视差计算深度时考虑这两个不同的原理点。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25793308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档