图像处理模块

概述

参考:

图像处理模块下还有很多分类

Object Detection(物体检测)

参考:

通过模板匹配技术查找与模板图像(补丁)匹配(相似)的图像区域的技术。

  • Source image(源图像) (I) # 我们期望在其中找到与模板图像匹配的图像。一般就是大图、或者说背景图。
  • Template image(模板图像)(T) # 将与源图像进行比较的补丁图像。一般是较小的图片。

我们的目标是在源图像中检测到与模板图像的最佳匹配区域。比如这样:

左边的大图是 I,中间的小图是 T。(x2 是什么意思不知道)。右边的是找到的图像区域。i.e. 在 I 中找到 T,用红框标出来

image.png

为了识别匹配区域,通过 sliding(滑动) 模板图像,以便与源图像进行比较。所谓的滑动,意思是将 T 一次移动一个像素(从左到右,从上到下)。我们将这个滑动的模板图像称为 patch,patch 每移动一次,在当前位置,会根据 Match mode(匹配模式) 计算一个 metric(度量) 值以表示该位置的匹配程度是 “好”或“坏”(可以理解为模板图像在源图像的某个特定区域的相似程度)。除了计算出来的 metric,还有 patch 左上角顶点横/纵坐标

image.png

对于 I 上 T 的每个位置,都会保存一份 metric 到 result matrix(结果矩阵) R 中。

下图是使用 TM_CCORR_NORMED 匹配方法滑动 T 的结果 R。通过 minMaxLoc() 函数可以定位到红色圆圈标记的矩形左上角的横纵坐标,该位置就是对于 T 来说在 I 上的最佳匹配位置。黑色矩形就是匹配到的图像区域(之所以能画出来这个匹配到的矩形区域,是因为基于左上角这个点,使用模板图像的宽和高,即可画出来这个矩形)。

image.png

在实践中

  • 首先使用 matchTemplate() 函数进行匹配并获取匹配到的图像区域,函数接受 3 个参数:源图像、模板图像、匹配方法。
  • 然后使用 minMaxLoc() 函数从匹配到的图像区域中定位 R 矩阵中的最高值或最低值,和匹配到该值的图像区域,这个结果只是针对匹配到的图像区域的左上角的信息,
    • min_val 和 max_val 是根据算法得到的最好匹配结果或者最差匹配结果(不用的匹配方法,对于结果值的解读不同)
    • min_loc 和 max_loc 是对应图像区域的左上角的横/纵坐标。
# 返回一个结果矩阵 R
matchedResult = cv2.matchTemplate(source_img, temp_img, cv2.TM_CCOEFF_NORMED)
# 返回 patch 的最大值和最小值,以及这两个值所在位置的横纵坐标
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(late)

其中匹配方式指的是一种数学公式(高数),也可以称为 匹配算法、匹配模式。共有 6 中匹配方法,不同的计算方式产生的结果的意义不一样。有些返回值越大表示匹配度越高,而有些返回值越小表示匹配程度越好:

  • TM_SQDIFF # 平方差匹配法:该方法采用平方差来进行匹配;0 表示最好的匹配结果;数值越小,匹配效果越好。
  • TM_SQDIFF_NORMED # 标准平方差匹配法
  • TM_CCORR # 相关匹配法:该方法采用乘法操作;0 表示最坏的匹配结果;数值越大,匹配效果越好
  • TM_CCORR_NORMED # 标准相关匹配法
  • TM_CCOEFF # 相关系数匹配法:1 表示完美的匹配;-1 表示最差的匹配,0 表示没有任何相关性(随机序列)。数值越大,匹配效果越好
  • TM_CCOEFF_NORMED # 标准相关系数匹配法

最后修改 January 20, 2024: change notes name, bpf, kernel (01f0283c)