机器视觉初步7:模板匹配专题

这篇具有很好参考价值的文章主要介绍了机器视觉初步7:模板匹配专题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

今天端午,祝各位端午安康!
今天来说说模板匹配这个专题。

模板匹配(Template Matching)是一种图像处理技术,用于在一幅图像上查找与另一幅模板图像相同的区域。模板图像和待匹配图像的大小相同。模板匹配的目的是在待检测图像中找到与模板图像最匹配的区域。
机器视觉初步7:模板匹配专题

在机器视觉中,模板匹配有以下应用:

  1. 目标定位:模板匹配可用来定位目标在图像中的位置。这可以帮助确定目标在图像中的尺寸、形状、位置等信息。
  2. 目标识别:模板匹配可用于识别不同的物体、人脸或其他特征,从而实现目标识别。
  3. 物体跟踪:模板匹配可用于跟踪移动物体,检测目标在图像中的变化,从而实现物体跟踪。
  4. 光学字符识别(OCR):模板匹配可用于检测待识别的文本区域,从而实现光学字符识别。

总之,模板匹配通常用于在一个图像中定位另一个图像的区域。常见的模板匹配方法有以下几种:

1. 均值漂移(Mean Shift):

均值漂移是一种基于局部极值的模板匹配方法。通过在搜索窗口中逐点计算梯度直方图,均值漂移会沿着梯度方向搜索,直到找到最大值。梯度直方图的峰值位置即为匹配的区域。
机器视觉初步7:模板匹配专题

Python 实现:matplotlib 和 numpy

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

img = np.zeros((500, 500, 3), dtype=np.uint8)
template = np.zeros((100, 100, 3), dtype=np.uint8)

# 缩放模板
template = np.moveaxis(template, 1, 0)
template = np.moveaxis(template, 2, 0)

# 在图像上进行模板匹配
x_min, y_min, x_max, y_max = template.min(0), template.min(1), template.max(0), template.max(1)

def mean_shift(img, pattern, x, y, w, h):
    """
    在img图像上进行均值漂移
    :param img:
    :param pattern:
    :param x:
    :param y:
    :param w:
    :param h:
    :return:
    """
    diff = pattern - img
    diff = diff.reshape(w, h)
    diff = diff.T
    diff = diff[np.abs(diff).argmax(1)]

    return img + diff / (w * h)

img = mean_shift(img, template, x_min, y_min, 100, 100)

plt.imshow(img, cmap='gray')
plt.axis('off')
plt.show()

用halcon实现

dev_update_off ()
dev_close_window ()
read_image (Image, 'your_image_file')
get_image_size (Image, Width, Height)
dev_open_window_fit_image (Image, 0, 0, Width, Height, WindowHandle)
dev_set_draw ('margin')
dev_set_color ('blue')
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
MeanShift (Image, Region, 5, 'blue')
dev_display (Region)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()

2. 最大值匹配(Maximum Mean Square Error,MMSE):

最大值匹配是一种在图像中查找模板的方法,它将搜索窗口划分为多个相等的区域,并在每个区域内计算模板与区域内像素的差异。当差值的平方和最小时,找到最佳匹配区域。
Python 实现:numpy

import numpy as np

img = np.zeros((500, 500, 3), dtype=np.uint8)
template = np.zeros((100, 100, 3), dtype=np.uint8)

# 缩放模板
template = np.moveaxis(template, 1, 0)
template = np.moveaxis(template, 2, 0)

# 在图像上进行模板匹配
x_min, y_min, x_max, y_max = template.min(0), template.min(1), template.max(0), template.max(1)

def find_best_match(image, pattern):
    """
    在图像image中找到最匹配的区域
    :param image:
    :param pattern:
    :return:
    """
    match_areas = np.zeros(image.shape[:2], dtype=np.int32)

    for x_stride in range(0, image.shape[0], x_max):
        for y_stride in range(0, image.shape[1], y_max):
            match_area = ((x_max - x_min) * (y_max - y_min)) * (pattern == image[y_stride:y_stride + y_max, x_stride:x_stride + x_max])
            match_areas[y_stride + x_stride // x_max, x_stride + y_stride // y_max] = match_area

    best_match = np.argmax(match_areas)

    return best_match

img = find_best_match(img, template)

plt.imshow(img, cmap='gray')
plt.axis('off')
plt.show()

用halcon实现

dev_update_off ()
dev_close_window ()
read_image (Image, 'your_image_file')
dev_open_window_fit_image (Image, 0, 0, Width, Height, WindowHandle)
dev_set_draw ('margin')
dev_set_color ('red')
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
FindClosestPixel (Image, Region, [0 255 255], [0 255 255], 'max')
dev_display (Region)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()

3. 直方图匹配(Histogram Matching):

直方图匹配是一种基于局部直方图的模板匹配方法。它会对搜索窗口中的像素进行局部直方图计算,并与模板的直方图进行比较。当局部直方图与模板直方图之间的相似度最大时,找到最佳匹配区域。
机器视觉初步7:模板匹配专题

Python 实现:skimage

import numpy as np
from skimage import measure, draw
from skimage.morphology import expand_edges

img = np.zeros((500, 500, 3), dtype=np.uint8)
template = np.zeros((100, 100, 3), dtype=np.uint8)

# 缩放模板
template = expand_edges(template, dim=2)
template = draw.rectangle(template, fill=0)

# 在图像上进行模板匹配
x_min, y_min, x_max, y_max = template.min(0), template.min(1), template.max(0), template.max(1)

def histogram_match(image, pattern):
    """
    在图像image中找到最匹配的区域
    :param image:
    :param pattern:
    :return:
    """
    match_areas = np.zeros(image.shape[:2], dtype=np.int32)

    for x_stride in range(0, image.shape[0], x_max):
        for y_stride in range(0, image.shape[1], y_max):
            match_area = ((x_max - x_min) * (y_max - y_min)) * (pattern == image[y_stride:y_stride + y_max, x_stride:x_stride + x_max])
            match_areas[y_stride + x_stride // x_max, x_stride + y_stride // y_max] = match_area

    best_match = np.argmax(match_areas)

    return best_match

img = histogram_match(img, template)

plt.imshow(img, cmap='gray')
plt.axis('off')
plt.show()

用halcon实现

4. Brute Force Matching(暴力匹配):

Brute Force Matching(暴力匹配)是一种简单的模板匹配方法,它通过计算模板与图像中每个像素的匹配程度来找到最佳匹配。暴力匹配的性能取决于匹配方法和图像本身的质量。
机器视觉初步7:模板匹配专题

Python 实现:opencv

import cv2

# 读取图像
img = cv2.imread('input.jpg')
template = cv2.imread('template.jpg')

# 缩放模板
template = cv2.resize(template, (img.shape[1], img.shape[0]))

# 在图像上进行模板匹配
matches = cv2.matchTemplate(img, template, cv2.TM_CCOEFF_NORMED)

# 计算匹配度
max_val, min_val, _, _ = cv2.minMaxLoc(matches)

# 找到最佳匹配区域
min_pt = min_val * img.shape[1]
max_pt = max_val * img.shape[1]

x_min = min_pt[0]
y_min = min_pt[1]
x_max = max_pt[0]
y_max = max_pt[1]

# 在图像上显示最佳匹配区域
cv2.rectangle(img, (x_min, y_min), (x_max, y_max), (0, 255, 0), 2)

# 显示最佳匹配区域
cv2.imshow('Match Results', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

在实际应用中,根据图像的复杂程度、模板的大小和匹配方法的计算复杂度,可能需要选择合适的模板匹配方法。同时,为了提高匹配的准确性和鲁棒性,可以尝试使用多种匹配方法进行多次匹配,并从中选择最佳结果。
在计算机视觉中,模板匹配通常与其他计算机视觉技术(如特征提取和图像分割)一起使用,以实现更高级别的图像分析。以下是一些常见的计算机视觉应用:文章来源地址https://www.toymoban.com/news/detail-497555.html

  1. 目标跟踪:通过模板匹配找到目标物体在连续帧中的位置。这可以用于视频监控、智能交通系统等场景。
  2. 3D重建:通过在图像中找到匹配的区域,可以估计物体的3D形状。这对于虚拟现实、增强现实、机器人导航等领域非常有用。
  3. 图像分割:将图像分割成不同的区域,以便对每个区域进行特征提取、分类等操作。模板匹配可以帮助分割出感兴趣的物体或区域。
  4. 面部识别:在面部识别系统中,模板匹配可以用于检测和识别面部特征。这在安全监控、智能手机解锁等场景中有广泛应用。
  5. 物体识别:通过在图像中找到与模板相似的区域,可以实现物体识别。这对于自动驾驶、机器人视觉等领域非常有用。
  6. 运动分析:模板匹配可以用于分析运动物体在视频中的运动轨迹。这对于运动分析、视频监控等领域有重要作用。
  7. 光学字符识别(OCR):在OCR系统中,模板匹配可以帮助检测和定位文本区域。这对于自动文档处理、手写识别等应用场景非常有用。
    为了实现这些应用,模板匹配通常与其他计算机视觉技术相结合,如特征提取、图像分割、机器学习等。模板匹配可以作为一种基本的技术,用于实现更复杂的计算机视觉任务。

到了这里,关于机器视觉初步7:模板匹配专题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【传统视觉】模板匹配和卡尺圆检测

    模板匹配 粗定位 1、原理:模板匹配是指在当前图像A中匹配与图像B最相似的部分,那么A为输入图像,B为模板图像。 2、匹配方法:B在A上华东,逐个遍历所有像素完成匹配。 3、函数: 参数值 对应数值 解释 cv2.TM_SQDIFF 0 以方差为依据,进行匹配,result值为0表示匹配度最好,

    2024年02月15日
    浏览(35)
  • 机器视觉初步13:3D相机介绍

    在工业中,3D相机是一种非常重要的传感器,它通过测量目标的物理尺寸和形状来获取关于目标的数据。这种3D相机的工作原理主要基于机器视觉和计算机视觉技术。以下是一些常见的3D相机的工作原理: 这种3D相机使用特定类型的激光光源和摄像机,通常是红外光。激光在物

    2024年02月14日
    浏览(32)
  • 机器视觉初步14:相机标定原理及应用

    相机标定是指通过已知的相机参数,解算相机内部参数矩阵和外部参数矩阵。 在工业中,更多的用户青睐于它在非接触三维尺寸测量上的应用。 所谓的三维测量是广义的三维测量,它不仅包括三维物体的重构与测量,还包括在三维空间中识别任意二维平面上的尺寸以及位置

    2024年02月15日
    浏览(36)
  • 机器视觉初步4:Opencv简介与学习角度

    了解一个新应用的最好方式就是先去官网转转。 Opencv官网 OpenCV(开源的计算机视觉库)是基于BSD协议,因此它可免费用于学术和商业用途。其提供C++,C,Python和Java接口,支持Windows,Linux,Mac OS,iOS和Android。OpenCV致力于高效运算和即时应用开发。因其是用优化的C/C++编写的,故其可以充分

    2024年02月11日
    浏览(40)
  • 机器视觉初步6-1:基于梯度的图像分割

    把基于梯度的图像分割单独拿出来。 基于梯度的图像分割方法利用像素之间的梯度信息来进行图像分割。 梯度 1 是图像中像素灰度值变化最快的方向,基于梯度的图像分割方法就是通过分析图像中像素的梯度信息来提取图像中的不同物体,实现图像分割的目的。 基于梯度的

    2024年02月10日
    浏览(35)
  • 基于qt+halcon实现视觉定位模板匹配【附部分源码】

    本文主要实现基于qt5.3做一个视觉定位识别的功能,halcon版本使用的是halcon12.0,调用halcon的dll来实现二次开发,下边从头开始设置。 与前面的python版、MFC版、Qt版一样,可供不同的开发者进行学习使用。 编程环境:qt5.3 halcon12.0 IDE: VisualStudio 2010 本次项目的效果视频: 基于

    2024年01月24日
    浏览(65)
  • 机器视觉之特征匹配

    特征匹配是计算机视觉中的一个重要任务,它用于寻找两幅或多幅图像中相对应的特征点,从而识别、跟踪或配准对象。下面是一个使用C++和OpenCV进行特征匹配的简单示例,使用SIFT特征检测和FLANN匹配器(快速最近邻搜索): 示例演示了如何使用SIFT特征检测器检测图像中的

    2024年02月11日
    浏览(38)
  • Opncv模板匹配 单模板匹配 多模板匹配

    目录 问题引入 单模板匹配 ①模板匹配函数: ②查找最值和极值的坐标和值: 整体流程原理介绍 实例代码介绍: 多模板匹配 ①定义阈值 ②zip函数 整体流程原理介绍 实例代码: 下面有请我们的陶大郎登场 这张图片是我们的 陶大郎 ,我们接下来将利用 陶大郎 来介绍我们的模板匹

    2024年01月22日
    浏览(45)
  • 【C++】初步认识模板

    🏖️作者:@malloc不出对象 ⛺专栏:C++的学习之路 👦个人简介:一名双非本科院校大二在读的科班编程菜鸟,努力编程只为赶上各位大佬的步伐🙈🙈 本篇文章我们讲解的是模板,它极大的节省了我们成本去构造多份差不多的代码,它是复用性很强的一种手段,下面就让我

    2024年02月11日
    浏览(35)
  • OpenCV 笔记:cv2.matchTemplate() 单模板匹配和多模板匹配

            模板匹配是用来在一副大图中搜寻查找模版图像位置的方法。         模板匹配实现简单(2~3行代码),计算效率高,不需要执行阈值化、边缘检测等操作来生成二值化图像。 但是: 如果输入图像中存在变化的因素,包括旋转、缩放、视角变化等,模板匹配很容

    2024年02月05日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包