eps如何建立立体白模_立体图像的3D重建

eps如何建立立体白模_立体图像的3D重建https github com ArtyZiff35 3D Reconstructi From Stereo Images 今天推荐一个好的开源代码 来熟悉一下如何从一对图像 左右图像 来建立此物体的三维模型 步骤一般分为 1 利用棋盘图像获得相机的内参和外参 2 对立体图像进行校正

大家好,我是讯享网,很高兴认识大家。

4ee99b574cbf8c9bcff6f705d0f4a89c.png
讯享网

https://github.com/ArtyZiff35/3D_Reconstruction_From_Stereo_Images

今天推荐一个好的开源代码,来熟悉一下如何从一对图像(左右图像)来建立此物体的三维模型。步骤一般分为:(1)利用棋盘图像获得相机的内参和外参;(2)对立体图像进行校正,使得它们处于同一个平面上; (3)对图像进行一些预处理,主要目的就是使得寻找对应点非常快速准确。(4)找到了对应点之后,因为它们已经parallax,所以直接计算它们的disparity,有了这个就利用三角关系,获得像素的景深信息。(5)因为图像有遮挡,所以不可避免的有黑洞出现。

 该代码能够针对径向和切向失真(通过捕获棋盘图像或通过使用存储的棋盘图像集)执行相机校准,立体校正和图像捕获。一旦使用一组操作(锐化滤镜,直方图均衡,亮度控制,高斯金字塔)对一对立体图像进行了畸变,校正和预处理,就可以使用我们的SAD变量(绝对差之和)来计算视差图。)算法。从那里,使用一些三角剖分检索深度图,以便在3d空间中正确定位图的每个像素)。最终,生成了一个有色点云,可以对其进行插值以获得统一的环境3D模型。

下面看看如何利用opencv提供的函数进行图像校准和立体校正:

stereocalib_criteria = (cv2.TERM_CRITERIA_MAX_ITER + cv2.TERM_CRITERIA_EPS, 100, 1e-5)# 第一步:利用棋盘图像的匹配点来校准图像,获得图像的内参和外参等参数。(ret, self.mtx_l, self.dist_l, self.mtx_r,self.dist_r, self.R, self.T, self.E, self.F)= cv2.stereoCalibrate( objpoints, imgpoints_l, imgpoints_r, self.mtx_l, self.dist_l,self.mtx_r, self.dist_r,  self.size,criteria=stereocalib_criteria,flags=flags) # 第二步:利用立体图像校正,获得左右图像相对应的旋转和投影矩阵,目的是使得校正后的# 两个图像处于同一个图像平面上。(self.R_l, self.R_r, self.P_l, self.P_r, self.Q, self.roi1, self.roi2) = cv2.stereoRectify(self.mtx_l,self.dist_l, self.mtx_r, self.dist_r, self.size, self.R,self.T, self.R_l, self.R_r, self.P_l, self.P_r, flags,alpha=0)# 利用各自旋转和投影矩阵,以及相机内参,产生相应的map矩阵。self.mapx_l, self.mapy_l = cv2.initUndistortRectifyMap(self.mtx_l, self.dist_l, self.R_l, self.P_l, self.size, cv2.CV_32FC1)self.mapx_r, self.mapy_r = cv2.initUndistortRectifyMap(self.mtx_r, self.dist_r, self.R_r, self.P_r, self.size, cv2.CV_32FC1)#最后一步利用opencv的remap函数def remap(self, left_image, right_image, name): # undistorting the images witht the calculated undistortion map result_l = np.ndarray(shape=([self.size[1], self.size[0], 3]), dtype=np.uint8) result_l[:, :, 0] = cv2.remap(left_image[:, :, 0], self.mapx_l, self.mapy_l, cv2.INTER_LINEAR) result_l[:, :, 1] = cv2.remap(left_image[:, :, 1], self.mapx_l, self.mapy_l, cv2.INTER_LINEAR) result_l[:, :, 2] = cv2.remap(left_image[:, :, 2], self.mapx_l, self.mapy_l, cv2.INTER_LINEAR) # undistorting the images witht the calculated undistortion map result_r = np.ndarray(shape=([self.size[1], self.size[0], 3]), dtype=np.uint8) result_r[:, :, 0] = cv2.remap(right_image[:, :, 0], self.mapx_r, self.mapy_r, cv2.INTER_LINEAR) result_r[:, :, 1] = cv2.remap(right_image[:, :, 1], self.mapx_r, self.mapy_r, cv2.INTER_LINEAR) result_r[:, :, 2] = cv2.remap(right_image[:, :, 2], self.mapx_r, self.mapy_r, cv2.INTER_LINEAR) cv2.imwrite('./remap/remapped/left/' + str(name) + '.png', result_l) cv2.imwrite('./remap/remapped/right/' + str(name) + '.png', result_r) self.draw_comparison(result_l, result_r, name)

讯享网
小讯
上一篇 2025-04-08 15:13
下一篇 2025-01-12 11:07

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/44304.html