基于python的立体匹配基础算法SSD、SAD、ZNCC、BM、SGBM实现


一、BM算法

  BM算法(Block Matching Algorithm)是一种基本的视差估计算法,用于立体匹配(stereo matching)。立体匹配是计算机视觉中的重要任务,旨在通过分析从不同视角观察的图像来确定图像中的对应点,从而获取场景的三维信息。
  BM算法的基本思想是将一幅图像中的每个像素与另一幅图像中的像素进行比较,找到最匹配的像素。为了减少计算量,BM算法将图像划分为块(block),然后在相应的块中寻找最佳匹配。

在这里插入图片描述

二、SAD算法

  SAD算法(Sum of Absolute Differences)是一种用于图像处理和计算机视觉中的相似度度量方法,常用于立体匹配(stereo matching)中的视差估计。
  在立体匹配中,SAD算法用于衡量一幅图像中的一个像素与另一幅图像中对应像素之间的差异程度。具体来说,SAD算法计算两个像素值之间的绝对差值,然后将所有差值加总,得到一个总的差异程度。这个总和越小,表示两个像素越相似。
在这里插入图片描述

三、SSD算法

  SSD算法(Sum of Squared Differences)是一种用于图像处理和计算机视觉中的相似度度量方法,常用于立体匹配(stereo matching)中的视差估计。
  与SAD算法类似,SSD算法也用于衡量一幅图像中的一个像素与另一幅图像中对应像素之间的差异程度。不同之处在于,SSD算法计算两个像素值之间的差值的平方,然后将所有差值的平方加总,得到一个总的差异程度。这个总和越小,表示两个像素越相似。
在这里插入图片描述

四、ZNCC算法

  ZNCC算法(Zero-mean Normalized Cross-Correlation)是一种用于图像处理和计算机视觉中的相似度度量方法,常用于立体匹配(stereo matching)中的视差估计。
  ZNCC算法通过计算两个像素块(block)之间的归一化互相关来衡量它们之间的相似度。具体来说,ZNCC算法首先将两个像素块中的像素值减去均值,然后计算它们的互相关,最后再进行归一化处理。这个归一化的过程可以消除亮度和对比度的差异,使得相似度度量更加鲁棒。
在这里插入图片描述

五、SGBM算法

  SGBM(Semi-Global Block Matching)算法是一种用于立体匹配(stereo matching)的计算机视觉算法,是对传统的全局匹配(global matching)算法的改进。
  立体匹配是指通过比较两幅图像中对应位置的像素,来确定它们之间的视差(disparity),从而获取场景的三维信息。SGBM算法在这个过程中采用块匹配(block matching)的方法,在图像中移动一个固定大小的窗口,并计算窗口内像素的相似度,然后选择最匹配的像素作为匹配点。
在这里插入图片描述

效果展示

直接修改左图、右图、以及保存结果图片的路径即可!
程序独立编写,直接启动即可!效果如下:

在这里插入图片描述
在这里插入图片描述
下载链接在这里:基于python的立体匹配基础算法SSD、SAD、ZNCC、BM、SGBM实现

(一杯奶茶不过分吧!而且我只能分到50%!😁🤞)

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
ZNCC(Zero-mean Normalized Cross-Correlation)匹配算法是一种常用的图像匹配方法,用于在两个图像之间找到相似区域或目标。 在Python中,可以使用NumPy库来实现ZNCC匹配算法。以下是一个简单的示例代码: ```python import numpy as np def zncc_match(image, template): # 获取图像和模板的尺寸 image_height, image_width = image.shape template_height, template_width = template.shape # 计算模板和图像的平均值 template_mean = np.mean(template) image_mean = np.mean(image) # 计算模板和图像的标准差 template_std = np.std(template) image_std = np.std(image) # 初始化最大相关系数和对应的位置 max_zncc = -np.inf max_x = 0 max_y = 0 # 遍历图像,计算每个位置上的相关系数 for y in range(image_height - template_height): for x in range(image_width - template_width): image_patch = image[y:y+template_height, x:x+template_width] # 计算图像块和模板的相关系数 patch_mean = np.mean(image_patch) patch_std = np.std(image_patch) zncc = np.sum((image_patch - patch_mean) * (template - template_mean)) / (patch_std * template_std) # 更新最大相关系数和位置 if zncc > max_zncc: max_zncc = zncc max_x = x max_y = y return max_x, max_y # 示例用法 image = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15], [16, 17, 18, 19, 20]]) template = np.array([[7, 8, 9], [12, 13, 14], [17, 18, 19]]) x, y = zncc_match(image, template) print(f"匹配位置:({x}, {y})") ``` 以上示例代码演示了如何使用ZNCC匹配算法在一个简单的图像中找到给定模板的位置。实际应用中,可以将图像和模板替换为真实的图像数据,在更大的图像上进行匹配

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小张Tt

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值