标签: disparity-mapping

Opencv - 来自未校准立体声系统的深度图

我试图从未校准的方法获得深度图.我可以通过SIFT方法和不同的对应点获得基本矩阵cv2.findFundamentalMat.然后cv2.stereoRectifyUncalibrated我可以得到整流矩阵.最后我可以cv2.warpPerspective用来纠正和计算差异,但后者没有进行到一个好的深度图...值非常高,所以我想知道我是否必须使用warpPerspective或我必须从单应矩阵计算旋转矩阵得到`stereoRectifyUncalibrated .

所以我不确定投影矩阵与单体矩阵的情况下获得的"stereoRectifyUncalibrated"`来纠正...

代码的一部分:

#Obtainment of the correspondent point with SIFT
sift = cv2.SIFT()

###find the keypoints and descriptors with SIFT
kp1, des1 = sift.detectAndCompute(dst1,None)
kp2, des2 = sift.detectAndCompute(dst2,None)

###FLANN parameters
FLANN_INDEX_KDTREE = 0
index_params = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5)
search_params = dict(checks=50)

flann = cv2.FlannBasedMatcher(index_params,search_params)
matches = flann.knnMatch(des1,des2,k=2)

good = []
pts1 = []
pts2 = []

###ratio test as per Lowe's paper
for i,(m,n) in enumerate(matches):
    if m.distance …
Run Code Online (Sandbox Code Playgroud)

python opencv disparity-mapping stereo-3d

41
推荐指数
2
解决办法
2333
查看次数

立体匹配中视差图与视差图像的区别

我是Stereo Matching的新手.我无法理解Disparity的概念.请告诉我什么是视差图和视差图像,它们之间有什么区别?两个术语是相同还是不同?

computer-vision disparity-mapping stereo-3d

38
推荐指数
2
解决办法
5万
查看次数

差异图的定义

我被要求实现基于边缘的视差图,但我从根本上不了解视差图是什么.谷歌搜索似乎没有产生直截了当的答案.有人可以解释它还是指向更好的资源?

imaging image-processing computer-vision disparity-mapping stereo-3d

37
推荐指数
1
解决办法
4万
查看次数

使用cv :: StereoBM进行差异计算的CvStereoBMState文档

在OpenCV文档中没有充分解释Konolige的块匹配算法的应用.CvStereoBMState的参数影响由cv :: StereoBM计算的差异的准确性.但是,没有记录这些参数.我将在下面列出这些参数并描述,我理解的内容.也许有人可以添加参数的描述,这些都不清楚.

  • preFilterType:确定在计算差异之前在图像上应用哪个滤镜.可以是CV_STEREO_BM_XSOBEL(Sobel过滤器)或CV_STEREO_BM_NORMALIZED_RESPONSE(可能是差异表示强度???)
  • preFilterSize:预过滤器的窗口大小(宽度=窗口高度,负值)
  • preFilterCap:将输出剪辑为[-preFilterCap,preFilterCap].间隔之外的值会发生什么变化?
  • SADWindowSize:左侧和右侧图像中比较窗口的大小,其中计算绝对差值的总和以找到相应的像素.
  • minDisparity:最小的差异,考虑在内.如果可能存在负差异,则默认值为零,应设置为负值(取决于摄像机视图之间的角度和测量对象与摄像机的距离).
  • numberOfDisparities:视差搜索范围[minDisparity,minDisparity + numberOfDisparities].
  • textureThreshold:仅在纹理大于(或至少等于?)此阈值的位置计算视差.如何定义纹理??? 周围窗口的差异???
  • uniquenessRatio:引自calib3d.hpp:" 对于搜索范围内的任何d!= d +/- 1,仅接受计算的差异d*,如果SAD(d)> = SAD(d*)(1 + uniquenessRatio / 100.). "
  • speckleRange:不确定.
  • trySmallerWindows:???
  • roi1,roi2:仅计算这些区域的差异??? 不确定.
  • speckleWindowSize:不确定.
  • disp12MaxDiff:不确定,但是在calib3d.hpp中的注释表示,执行了左右检查.猜测:像素从左图像到右图像匹配,从右图像匹配到左图像.如果原始左像素和后匹配像素之间的距离小于disp12MaxDiff,则差异仅有效.

opencv disparity-mapping

10
推荐指数
1
解决办法
4353
查看次数

opencv中reprojectImageTo3D函数的Q矩阵

我正在opencv做一个项目来检测使用立体声校准的盲人路径中的障碍物.我已经正确地计算了视差图.现在要找到障碍物距离相机的距离,我想要它的3D坐标[X,Y,Z],我猜是可以通过reprojectImageTo3D()找到,但是我没有Q矩阵在这个函数中使用,因为我从stereoRectify()获得的Q矩阵可能因为我使用预校准图像而变为零.虽然我确实拥有相机的内在和外在参数.所以我的问题是,如果我知道焦距,基线以及我相机的其他所有内容,如何手动创建Q矩阵以直接在函数reprojectImageTo3D()中使用?Q矩阵的基本格式是什么?

opencv disparity-mapping stereo-3d depth 3d-reconstruction

8
推荐指数
2
解决办法
1万
查看次数

Emgu(OpenCV for C#) - 使用cvStereoRectify构建视差图

我一直在使用用于OpenCV的伟大的Emgu C#包装器来收集家用立体声装备的图像.两个网络摄像头用螺栓固定在一块35厘米的木头上,希望能让我在10-20米范围内制作深度图.我将它们设置为尽可能平行(三角测试大约89.3度).

我正在尝试从这些中制作视差图,尽管该过程作为代码起作用,但结果非常随机.我的意思是每当我尝试运行立体声整流时,我会得到非常不同的结果,而且图像经常如此严重扭曲,屏幕上几乎看不到任何东西.

据我了解,这样做的方法如下:


1)打印出棋盘图案(例如6个8个内角) - 粘在平坦的东西上.

2)从相机1拍摄一组约10张照片,在全景但不同的位置拿着棋盘.

3)使用CameraCalibration.FindChessboardCorners查找内角(6乘8)

4)使用img.FindCornerSubPix()将这些角位置细化为子像素级别

5)使用CameraCalibration.CalibrateCamera()计算内在的摄像头细节,并将其保存为XML文件

6)对相机2重复上述步骤.

7)现在您有内部摄像机失真信息,您可以拍摄立体照片对,并使用CameraCalibration.StereoCalibrate()和先前计算的内在数据来计算外部信息(摄像机1和2之间的偏移和旋转).

8)使用CvInvoke.cvStereoRectify()和CvInvoke.cvInitUndistortRectifyMap()然后使用CvInvoke.cvRemap()来构建一个输出图像,该图像应该在Y中排成一行,这样您就可以运行其中一个立体对应测试.

我发现你需要使用Emgu 2.1 ver 806来使cvStereoRectify工作而不会出现访问冲突错误.


我想我的问题是:

A)我的流程是否正确?我一直在做相机固有校准作为一个单独的过程,因为相机相距35厘米,因为它们在办公室中并且很多时候移动它而不容易获得棋盘...因为它很快离开了其中一个相机视图.我认为由于值是固有的,因此它们与相机有关,因此应转移到立体声程序OK.它是否正确?

看起来内部值在cvStereoRectify过程中会发生变化,并且变得非常不同.

例如.cvStereoRectify后,第一阶段的失真值= 0.22,-1.2,0.01,-0.01,2.6,值变为= 10,-489,-0.03,-0.09,13208

我不是专家,但第一套看起来更像是我从其他人的评论中看到的,第二套似乎很明显!

B)有没有办法阻止在cvStereoRectify期间更新内在+失真值?

C)这似乎是正确的内在价值(937,0,290,0,932,249,0,0,1)?

非常感谢任何提示...我已经坚持了一段时间了......我真的不确定这个过程的哪个部分会引发错误.任何提示或建议都将非常受欢迎......

c# disparity-mapping emgucv

7
推荐指数
1
解决办法
4725
查看次数

立体视觉:深度估算

我正在从事立体视觉任务,我想了解立体视觉相机和物体之间的距离。我正在将Matlab与计算机视觉系统工具箱一起使用。
我已经使用“适用于Matlab的相机校准工具箱”对相机进行了校准,因此我具有左右相机的固有参数和外部参数(右相机相对于左相机的位置)。我也有一副校正过的图片和他们的视差图。为了估计视差,我使用了Matlab函数disparity()。我知道相机的基线和焦距,但是我的结果仍然是错误的。

baseline = 70 mm
focal length = 25 mm
disparity = 60 pixels
---------------------
depth = baseline * focal length / disparity = 70 * 25 / 60 = 29 mm
Run Code Online (Sandbox Code Playgroud)

但我知道距离是cca 600毫米。这个公式对吗?单位呢?mm * mm / pixel != mm。特别是我想使用Camera矩阵(内在参数)进行计算,但是我不知道该怎么做。如有任何提示,我将不胜感激。

matlab disparity-mapping stereoscopy matlab-cvst

7
推荐指数
1
解决办法
5658
查看次数

cv2.StereoSGBM_create() 和 cv2.StereoBM_create() 函数在 opencv3 上的视差映射有什么区别?

我试图了解 opencv 的视差映射函数我遇到了两种方法 cv2.StereoSGBM_create 和 cv2.StereoBM_create 我不太明白其中的区别。

另外,numDisparities 或 setSpeckleRange 等函数的属性是什么?

c++ python opencv disparity-mapping opencv3.0

7
推荐指数
1
解决办法
3829
查看次数

来自 KITTI 立体图像的点云

我尝试根据来自KITTI立体图像数据集的图像创建点云,以便稍后我可以估计某些对象的 3D 位置。

原始图像看起来像这样

到目前为止我所拥有的:

  1. cv2.StereoSGBM_create产生的差异
window_size = 9
minDisparity = 1
stereo = cv2.StereoSGBM_create(
    blockSize=10,
    numDisparities=64,
    preFilterCap=10,
    minDisparity=minDisparity,
    P1=4 * 3 * window_size ** 2,
    P2=32 * 3 * window_size ** 2
)
Run Code Online (Sandbox Code Playgroud)
  1. 使用来自 KITTI 校准文件的数据使用cv2.stereoRectify计算Q矩阵。
window_size = 9
minDisparity = 1
stereo = cv2.StereoSGBM_create(
    blockSize=10,
    numDisparities=64,
    preFilterCap=10,
    minDisparity=minDisparity,
    P1=4 * 3 * window_size ** 2,
    P2=32 * 3 * window_size ** 2
)
Run Code Online (Sandbox Code Playgroud)

生成的矩阵如下所示(此时我怀疑它是否正确):

[[   1.            0.            0. …
Run Code Online (Sandbox Code Playgroud)

opencv computer-vision disparity-mapping stereo-3d

6
推荐指数
1
解决办法
1092
查看次数

使用来自 AVDepthData 的差异的 iPhone X 后置摄像头的绝对深度?

我正在尝试AVDepthData根据以下方程估计对象的绝对深度(以米为单位):depth = baseline x focus_length / (disparity + d_offset)。我有来自 的所有参数cameraCalibrationData,但是这是否仍然适用于使用 iPhone X 在人像模式下拍摄的图像,因为两个摄像头垂直偏移?同样基于WWDC 2017 Session 507,视差图是相对的,但AVDepthData文档指出视差值在 1/m 中。那么我可以按原样将方程应用于深度数据中的值,还是需要事先进行一些额外的处理?

var depthData: AVDepthData

do {
  depthData = try AVDepthData(fromDictionaryRepresentation: auxDataInfo)

} catch {
  return nil
}

// Working with disparity
if depthData.depthDataType != kCVPixelFormatType_DisparityFloat32 {
  depthData = depthData.converting(toDepthDataType: kCVPixelFormatType_DisparityFloat32)
}

CVPixelBufferLockBaseAddress(depthData.depthDataMap, CVPixelBufferLockFlags(rawValue: 0))

// Scale Intrinsic matrix to be in depth image pixel space
guard var intrinsicMatrix = depthData.cameraCalibrationData?.intrinsicMatrix …
Run Code Online (Sandbox Code Playgroud)

disparity-mapping stereo-3d depth ios swift

6
推荐指数
0
解决办法
922
查看次数