NCC 视差匹配

本文介绍了基于Normalized Cross Correlation (NCC)的图像匹配原理和步骤,强调了NCC在光照变化下的适应性。实验部分展示了不同窗口大小对匹配结果的影响,探讨了窗口大小与匹配效果及运行效率的关系,并讨论了遇到的缩进错误问题及其解决方案。NCC算法虽然准确,但计算量大,适合处理轻微变形、模糊图像和光照变化的情况。
摘要由CSDN通过智能技术生成

1. NCC概述

基于Normalized cross correlation(NCC)用来比较两幅图像的相似程度已经是一个常见的图像处理手段。在工业生产环节检测、监控领域对对象检测与识别均有应用。NCC算法可以有效降低光照对图像比较结果的影响。而且NCC最终结果在-1到1之间,所以特别容易量化比较结果,只要给出一个阈值就可以判断结果的好与坏。

2. NCC原理

NCC匹配算法是一种经典的匹配算法。通过计算模板图像和搜索图像的互相关值确定匹配的程度。互相关值最大时的位置决定了模板图像在搜索图像中的位置。假设搜索图像S的尺寸为M x M,模板T的尺寸为N x N,其中M> N,M,N代表图像像素大小。模板T在图像S上平移,模板所覆盖的子图记作Si,j,(i,j)为子图左上角顶点在搜索图S中的坐标。在实际匹配应用中,搜索图和模板的相似性通过度量函数来度量,则归一化积相关匹配度量定义为:
在这里插入图片描述

假设图像refer是标准模板图像,target 是目标图像,M x N表示图像大小,用于检测是否有其它对象在目标图像中,通过每个像素移动窗口计算窗口下模板图像与目标图像之间的NCC值可以判断窗口子图像是否相同,NCC计算公式如下:
在这里插入图片描述
其中:
在这里插入图片描述
mxn表示窗口大小,这样的计算复杂度就为0(m x n x M x N)。从上面公式就可以看出其中均值和平方和可以通过积分图预计算得到,对于模板和目标图像大小-致的应用场景来说,
在这里插入图片描述

其中根据积分图像可以提前计算出任意窗口大小和与平方和
在这里插入图片描述
其中μf, μr,分别表示带检测图像与参考模板图像的窗口均值。
上述两个计算实现了窗口半径无关的常量时间计算,唯一缺少的是 下面计算公式
在这里插入图片描述
也可以通过各自的积分图计算预先得到。这样就完成了整个预计算生成。依靠索引表查找计算结果,NCC就可以实现线性时间的复杂度计算,而且时间消耗近似常量跟窗口半径大小无关,完全可以满足实时对象检测工业环境工作条件。

3. 算法步骤

为了减小计算量,我们首先要把输入的图像转换为灰度图像,在灰度图像的基础上完成整个NCC计算检测。
把彩色图像转换为灰度图像
(1)预计算模板图像和目标图像的积分图
(2)根据输入的窗口半径大小使用积分图完成NCC计算
(3)根据阈值得到匹配或者不匹配区域。
(4)输出结果

4. 实验内容

4.1 实验代码

import numpy as np
import cv2

im1 = 'C:/picture/1.jpg'
im2 = 'C:/picture/2.jpg'
img1 = cv2.imread(im1, cv2.CV_8UC1)
img2 = cv2.imread(im2, cv2.CV_8UC1)
rows, cols = img1.shape
print(img1.shape)

def translaton(image, shape):
    step = round((shape[0]-1)/2)
    print(step)
    shifted = []
    for i in range(0, step+1):
        for j in range(0, step+1):
            if i==0 and j==0:
                M1 = np.float32([[1, 0, i], [0, 1, j]])
                shifted.append(cv2.warpAffine(image, M1, (image.shape[1], image.shape[0])))
            elif i==0 and j!=0:
                M1 = np.float32([[1, 0, i], [0, 1, j]])
                M2 = np.float32(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值