半全局立体匹配方法调研,以及一些立体匹配方向的思考

写大论文的时候看到了这篇文章,感叹到作者科研的创新

《A Non-Local Cost Aggregation Method for Stereo Matching》

一种非局部代价聚合立体匹配方法

 

        对于基于局部信息的立体匹配,采用的一般都是滑动窗口,作者创造性的提出使用最小生成树并结合其性质完成了全局代价聚合的值传递工作,效果很好,而且有代码实现:

 

Paper

http://www.cs.cityu.edu.hk/~qiyang/publications/cvpr-12/cvpr-12-qingxiong-yang.pdf

Code

http://www.cs.cityu.edu.hk/~qiyang/publications/cvpr-12/code/

 

 

介绍文章1

http://blog.csdn.net/wsj998689aa/article/details/45041547

介绍文章2

http://www.bubuko.com/infodetail-668886.html

 

     效果还不错:整体上完全达到了全局优化算法的水平,而且算法在时间上基本能够满足实时性的要求,如果通过分析代码性能加以优化,或者引入并行计算的算法,实时计算不是没有可能。后续准备详细分析改良一下这个算法,作为一个创新点好好学习一下。

 

 

 

    改进的文章:根据本文开头文章的思想进行了改进

Segment-Tree based Cost Aggregation for Stereo Matching

基本思路是分割后每一块作为一个最小生成树,类似分层的最小生成树,其实就是减少MST中的节点数目。

 

文章分析:

http://blog.csdn.net/wsj998689aa/article/details/48033819

 

 

        当初研究图割算法,跟着思路一路看文章过来,从图像分割开始看起,渐渐的看到立体匹配这块,开始一直做立体匹配的相关内容,后来发现看文章实在看的太少了。而且高档次的文章看的更少,以至于停留在非常低端已经很成熟的方法的改进中不能自拔,现在要毕业了才想起看文章去写国内外的研究背景,却突然给我了很多idea,但是时间确实有限,希望刚接触这个的同行们从这些人的成果中多少有点启示,我提两点趋势:

 

1.算法的并行性,立体匹配好的算法不一定要求多高的精度,我认为实时性是最重要的,例如工业控制,和无人驾驶汽车,机器人导航对实时性的要求。

 

2.组合的算法(综合起来的工程性算法),立体匹配作为一个已经应用在实际工业领域的研究问题,是一个复杂的工业或者说工程问题,是自成体系的问题,没有一个复杂的的算法能够一蹴而就的解决问题,需要从头到尾多个算法的组合。

甚至不夸张的说,从源头的摄像机矫正开始下功夫,直到最后面的交叉检验视差求精,每一个环节将误差和计算量降低到最少,各个环节的改进都能为整体流程做贡献,而这些正是我们做工程的魅力所在,一点一滴精益求精。

 

3.创新性,立体匹配上进行创新,需要在立体匹配的整个过程和应用场景上下功夫,比如特定目标的立体匹配。对目标图像进行目标检测后的行人立体匹配等,我认为都可以作为一个研究思路,将算法组合起来,完成一个特定的需求,而这本身就偏应用了。

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 我可以为您提供一个用于生成全局立体匹配代码的示例:``` // 使用SAD算法计算全局立体匹配 int SAD(int width, int height, int *leftImage, int *rightImage) { int sum = 0; for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { int diff = leftImage[y*width+x] - rightImage[y*width+x]; sum += abs(diff); } } return sum; } ``` ### 回答2: 生成全局立体匹配的代码可分为以下步骤: 1.数据预处理:将左右两张立体图像转换为灰度图像,并进行图像均衡化以增强图像对比度。 2.计算代价立方体:初始化一个三维数组作为代价立方体,尺寸与输入图像相同。对于每个像素,计算其与左右图像中对应像素的灰度值差的绝对值,作为该像素处的代价值。 3.计算聚合代价:使用动态规划方法,从左到右和从上到下对代价立方体进行遍历,累积计算每个像素点的聚合代价。聚合代价可以选择SAD(和绝对差)、SSD(平方差)等等。 4.计算视差:根据聚合代价构造视差图。对于每个像素点,选择聚合代价最小的视差作为该点的视差值。 5.视差图后处理:根据计算得到的初始视差图,进行插值、滤波等后处理操作,以进一步提高匹配精度和去除噪声。 以下是一个简化的实现示例: ```python import numpy as np def preprocess(image): # 灰度化 gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 图像均衡化 equalized = cv2.equalizeHist(gray) return equalized def compute_cost_cube(left, right): # 计算代价立方体 cost_cube = np.abs(left - right) return cost_cube def compute_aggregate_cost(cost_cube): # 计算聚合代价 height, width = cost_cube.shape[:2] aggregate_cost = np.zeros((height, width)) for row in range(1, height): for col in range(1, width): min_cost = min(aggregate_cost[row-1, col], aggregate_cost[row, col-1], aggregate_cost[row-1, col-1]) aggregate_cost[row, col] = cost_cube[row, col] + min_cost return aggregate_cost def compute_disparity(aggregate_cost): # 计算视差 disparity = np.argmin(aggregate_cost, axis=2) return disparity def postprocess(disparity): # 视差图后处理 # 插值、滤波等操作 processed_disparity = disparity return processed_disparity # 输入左右图像 left_image = cv2.imread("left.png") right_image = cv2.imread("right.png") # 数据预处理 left_gray = preprocess(left_image) right_gray = preprocess(right_image) # 计算代价立方体 cost_cube = compute_cost_cube(left_gray, right_gray) # 计算聚合代价 aggregate_cost = compute_aggregate_cost(cost_cube) # 计算视差 disparity = compute_disparity(aggregate_cost) # 视差图后处理 processed_disparity = postprocess(disparity) ``` 这是一个简单的生成全局立体匹配的代码示例,具体的实现可能会有更多的细节,如参数调节、优化算法等,根据实际需求进行调整和改进。 ### 回答3: 生成全局立体匹配的代码涉及到计算机视觉中的立体视觉问题,可以通过以下步骤来实现: 1. 读取左右两个立体图像。 2. 对图像进行预处理,例如直方图均衡化、滤波等操作,以增强图像质量。 3. 利用代价函数计算左右两个图像的视差。代价函数可以选择像素之间的灰度差、梯度差等。 4. 进行全局匹配算法,该算法是一种视差延伸算法,它综合了全局和局部匹配的优点,可以得到更准确的视差结果。 5. 对视差结果进行后处理,例如中值滤波、空洞填充等操作,以消除噪声和不连续性。 6. 生成立体匹配的结果图像,可以将视差值映射到伪彩色图像上,以直观地显示深度信息。 7. 输出生成的立体匹配结果。 代码示例: ``` import numpy as np import cv2 # 读取左右立体图像 left_img = cv2.imread('left_image.jpg', 0) right_img = cv2.imread('right_image.jpg', 0) # 图像预处理 left_img = cv2.equalizeHist(left_img) right_img = cv2.equalizeHist(right_img) # 计算视差 stereo = cv2.StereoSGBM_create(minDisparity=0, numDisparities=16, blockSize=3) disparity = stereo.compute(left_img, right_img) # 全局匹配算法 stereo = cv2.createStereoBM(numDisparities=16, blockSize=15) disparity = stereo.compute(left_img, right_img) # 后处理 disparity = cv2.medianBlur(disparity, 5) # 显示立体匹配结果 cv2.imshow('Disparity', (disparity / 16.0 - minDisparity) / numDisparities) cv2.waitKey(0) cv2.destroyAllWindows() ``` 以上代码为简单的示例,具体的算法和参数可以根据实际需求进行调整和优化。生成全局立体匹配的代码主要基于OpenCV库中的函数和算法来实现。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值