基于灰度值平方差的图像匹配

import numpy as np
import math
import cv2

# 读取目标图片
target = cv2.imread("Resources/target3.jpg")
# 读取模板图片
template = cv2.imread("Resources/template2.jpg")
# 将目标图片转换为灰度图片
target = cv2.cvtColor(target, cv2.COLOR_BGR2GRAY)
# 将模板图片转换为灰度图片
template = cv2.cvtColor(template, cv2.COLOR_BGR2GRAY)
# 获取目标图片的大小
target_x, target_y = target.shape
# 获取模板图片的大小
template_x, template_y = template.shape
# 计算候选框的数量
candidate_x = target_x - template_x
candidate_y = target_y - template_y

# 进行灰度匹配并记录方差
SQUSum = np.zeros((candidate_x, candidate_y), np.int)  # 记录每个候选框概率分布
# 循环每一个候选框
for i in range(candidate_x):
    # print(f'loop {i}')
    for j in range(candidate_y):
        # 1.计算候选框的概率分布
        for m in range(template_x):
            for n in range(template_y):
                # 统计第i行第j列的候选框的每个灰度值的数量
                SQUSum[i][j] += math.pow(int(target[i + m, j + n]) - int(template[m][n]), 2)

bm = SQUSum.min()  # 获取最小值
index = np.unravel_index(SQUSum.argmin(), SQUSum.shape)  # 获取最小值索引
print("最小平方差", bm)
print('最小平方差索引', index)
cv2.rectangle(target, index, (index[0] + template_y, index[1] + template_x), (0, 255, 225), 2)
cv2.imshow('Result', target)
cv2.resizeWindow('Result', 200, 50)
cv2.imshow('Template', template)
cv2.resizeWindow('Template', 200, 50)
cv2.waitKey()

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于灰度模板匹配的 MSD(Mean Squared Difference)算法是一种用于图像处理和模式识别的算法。该算法通过比较模板和图像中对应区域的像素灰度差异来进行匹配。 首先,我们需要定义一个模板图像,它是我们希望在目标图像中寻找的目标对象或特征。然后,我们将模板图像与目标图像中的每个可选位置进行比较。比较的计算方法是计算模板图像与对应区域的像素之间的差异。 在 MSD 算法中,对比的度量指标是平方差异。对于模板图像中的每个像素与对应区域的像素,我们计算它们的灰度差异,并将差平方,然后将所有差平方相加。最后,获取该区域的总的均方差。 我们通过计算每个可选位置的均方差来找到最佳匹配。如果均方差的较小,则说明匹配度较高,反之,则匹配度较低。因此,我们可以在目标图像中找到与模板图像匹配的区域。 需要注意的是,MSD 算法在处理目标图像中的光照变化、噪声等因素时存在一定的局限性。由于只是简单地比较灰度差异,该算法对于光照条件的改变较为敏感。 总之,基于灰度模板匹配的 MSD 算法通过比较模板图像和目标图像中对应区域的灰度差异来进行匹配。通过计算每个区域的平方差异来评估匹配度,从而找到最佳匹配位置。该算法在图像处理和模式识别领域有广泛应用,并有一定的局限性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值