初识立体匹配

  2009年,我进入武汉大学遥感信息工程学院开始大学本科生涯,专业是遥感科学与技术,当时我根本不知道遥感学科是做什么的,只是觉得听着好像非常高端,所以报了这个专业,到现在已经9年有余,只想说,身为遥感人,此生无悔。

  当时,遥感分为三个学科,遥感、摄影测量和地理信息系统,我所在的班级属于摄影测量,通俗的说,就是用影像来替代机械进行测量。所以,影像是摄影测量学科最最基础的数据,与影像相关的技术也成了摄影测量学科必须掌握的技术。计算机兴起之前,影像大多是胶质的,测量还是很笨重的机械方式,比如机械化的立体测图仪;在计算机科学飞速发展之后,数码影像代替胶纸影像,全面进入数字摄影测量时代,计算机性能不断更新,基于数码影像的摄影测量算法蓬勃发展,摄影测量正向着全自动、更高精度、更高效率测量的方向杨帆前行。

  摄影测量有一套完整的流程,从拿到相机到产品生成,其中包含多个阶段性任务,立体匹配就是其中一个阶段,目的是得到稠密的三维点云,为制作数字表面模型、制作真正射影像、生成三维网格以及真彩色模型提供足够稠密的空间点云数据,完整流程如下图:

图1 摄影测量系统流程
在这里插入图片描述

  在我开始学摄影测量学的时候,课本的是张剑清教授、潘励教授、王树根教授编著的《摄影测量学》第二版 1,里面并没有立体匹配,4D产品是摄影测量的主要任务,空中三角测量任务所生成的稀疏点云已经能够满足产品需要。时代的发展一直在推动着摄影测量的进步,随着计算机视觉学科的兴起,立体匹配算法日渐成熟,所有的摄影测量系统都将立体匹配纳入必要阶段,稠密的点云使得数字表面模型和真正射影像制作成为可能,而且三维网格和真实彩色模型的生成让摄影测量的产品更加丰富,应用更加广泛。

  2014年,因为项目需要,我第一次接触立体匹配,因为项目需求是研发超高效率的立体匹配算法,所以我将方向定在快速立体匹配技术研究,算是正式开始与立体匹配结缘。

  立体匹配(Stereo Matching)的目标是从不同视点图像中找到匹配的对应点,从而从二维图像中恢复三维信息,其用处不只是用于摄影测量中所涉及的生成DSM/TDOM、Mesh/Model,还有三维环境感知与建模、机器人导航、物体跟踪与检测等,是摄影测量与计算视觉领域非常重要的一个热点研究方向。实际上由于学科专注点不同,摄影测量学科的立体匹配技术发展要落后于计算机视觉学科,很多经典成熟的立体匹配算法如PMVS(Patch-based Multi-view Stereo)2、SGM(Semi-Gloabl Matching)3、PatchMatch 4等都是计算机视觉学科的专家所提出的,但现在立体匹配技术在摄影测量学科中也发展非常迅速,研究非常广泛。

  感谢博洛尼亚大学Stefano Mattoccia教授所著的文章《Stereo Vision:Algorithms and Applications》5,为我的入门提供了很关键的电子资料,该文对立体匹配的讲解通俗易懂,十分详尽。研究立体匹配是一件非常有意思的事情,对于两张或者更多影像,正常人看到只有二维信息,而通过立体匹配,我却可以得到三维信息,仿佛看到了一般人所看不到的高维信息,这就是科学的魅力,感谢那些在科学领域勤奋耕耘的科研人员,他们让人们生活变得美好,推动着人类向前发展。

图2 Smart3D 6 软件从二维重建三维效果
在这里插入图片描述


  1. 张祖勋, 张剑清. 数字摄影测量学.第2版[M]. 武汉大学出版社, 2012. ↩︎

  2. Yasutaka Furukawa and Jean Ponce. Accurate, Dense, and Robust Multi-View Stereopsis. IEEE Transactions on Pattern Analysis and Machine Intelligence, Vol. 32, Issue 8, Pages 1362-1376, August 2010. ↩︎

  3. Hirschmüller, H. Stereo processing by semiglobal matching and mutual information[J]. IEEE Transactions on Pattern Analysis & Machine Intelligence, 2008,30(2):328-341. ↩︎

  4. M. Bleyer, C. Rhemann, and C. Rother. Patchmatch stereo - stereo matching with slanted support windows. In BMVC, 2011. ↩︎

  5. http://vision.deis.unibo.it/~smatt/Seminars/StereoVision.pdf ↩︎

  6. https://www.bentley.com/en/products/brands/contextcapture ↩︎

### OpenCV 中轮廓近似与模板匹配入门 #### 轮廓近似的概念和实现 在计算机视觉领域,轮廓近似是一种简化多边形曲线的方法。通过减少不必要的点来表示物体边界,从而降低计算复杂度并提高处理速度。 对于给定的一组轮廓点,`approxPolyDP()` 函数用于查找具有最少可能顶点数量的多边形,这些顶点能够紧密拟合原始形状。该过程依赖于 Douglas-Peucker 算法,它允许指定最大距离误差 `epsilon` 来控制近似程度: ```python import cv2 import numpy as np def approximate_contour(contours, epsilon_ratio=0.01): approximations = [] for contour in contours: perimeter = cv2.arcLength(contour, True) approximation = cv2.approxPolyDP( curve=contour, epsilon=epsilon_ratio * perimeter, closed=True ) approximations.append(approximation) return approximations ``` 此代码片段展示了如何利用弧长作为尺度因子调整 `epsilon` 参数[^1]。 #### 模板匹配的概念和技术细节 模板匹配技术旨在在一个较大图像内寻找特定子图案的最佳位置。OpenCV 提供了多种相似性测度选项,包括平方差 (`TM_SQDIFF`) 和标准化互相关 (`TM_CCOEFF_NORMED`) 方法等。 当执行模板匹配时,通常会先对源图像以及目标模式应用相同的预处理步骤(如灰度转换、阈值设定)。接着调用 `matchTemplate()` 执行卷积运算,并依据所选评估标准获取响应矩阵。最后定位峰值坐标即代表最佳匹配区域中心点的位置。 以下是 Python 实现示例: ```python template_image = cv2.imread('template.png', 0) # 加载模板图片为灰度图 main_image = cv2.imread('scene.jpg' , 0) # 加载场景图片也为灰度图 result = cv2.matchTemplate(main_image, template_image, cv2.TM_CCORR_NORMED) min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result) top_left_corner = max_loc bottom_right_corner = (top_left_corner[0]+w, top_left_corner[1]+h) cv2.rectangle(main_image,top_left,bottom_right,(0,0,255),2) ``` 上述脚本说明了怎样读取两张不同尺寸但内容相关的单通道图像文件,并运用归一化的交叉关联算法完成精确搜索任务[^2]。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值