利用MKL实现OpenCV的模板匹配(matchTemplate)

news/2024/11/17 7:39:25/文章来源:https://www.cnblogs.com/Icys/p/18200493

基于FFT实现OpenCV的模板匹配(matchTemplate)

以 TM_CCORR_NORMED 为例,因为这个实现简单,并且效率高。

先看公式

\[R(x,y)= \frac{\sum_{x',y'} (T(x',y') \cdot I(x+x',y+y'))}{\sqrt{ \sum_{x',y'}T(x',y')^2 \cdot \sum_{x',y'} I(x+x',y+y')^2}} \]

显然,分子是I图和T图的卷积。

分母是T图平方的求和乘以I图平方和T图大小的全为1的矩阵,开方的结果。

根据卷积定理,实现方法就很显然了。

import numpy as np
from scipy import signal
from matplotlib import pyplot as pltimport cv2I = cv2.imread('3.png', cv2.IMREAD_GRAYSCALE)
T = cv2.imread('4.png', cv2.IMREAD_GRAYSCALE)I = I.astype(np.float32) / 255
T = T.astype(np.float32) / 255import mkl_fftdef mkl_fft_conv2d(A,K):tmp_cols = A.shape[0] + K.shape[0] - 1tmp_rows = A.shape[1] + K.shape[1] - 1input = np.zeros((tmp_cols, tmp_rows)).astype(np.float32)input[:A.shape[0], :A.shape[1]] = Akernel = np.zeros((tmp_cols, tmp_rows)).astype(np.float32)kernel[:K.shape[0], :K.shape[1]] = Kfi = mkl_fft.fft2(input)fk = mkl_fft.fft2(kernel)# output as validoutput = mkl_fft.ifft2(fi * fk)output = np.real(output)output = output[K.shape[0]-1:-K.shape[0]+1, K.shape[1]-1:-K.shape[1]+1]return outputimport timet0 = time.time()
r0 = mkl_fft_conv2d(I, np.flip(T,axis=(0,1)))
ST = np.sum(T ** 2)
S = mkl_fft_conv2d(I ** 2, np.ones_like(T))
r0 = r0 / np.sqrt(ST * S)t1 = time.time()
print('fftconvolve:', t1-t0)
t0 = time.time()
r1 = cv2.matchTemplate(I, T, cv2.TM_CCORR_NORMED)
t1 = time.time()
print('matchTemplate:', t1-t0)plt.figure()
plt.imshow(r0)
plt.colorbar()
plt.title('fftconvolve')plt.figure()
plt.imshow(r1)
plt.colorbar()
plt.title('matchTemplate')plt.show()max_x0, max_y0 = np.unravel_index(np.argmax(r0), r0.shape)
max_x1, max_y1 = np.unravel_index(np.argmax(r1), r1.shape)print(max_x0, max_y0)
print(max_x1, max_y1)print(r0[max_x1, max_y1])

和OpenCV效果对比

image
image

可以看出结果是一样的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/708841.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

主流原型设计工具介绍(●ϖ`●)

原型设计工具在产品设计、交互设计和用户体验设计中扮演着重要角色,本篇博客将介绍Axure RP、墨刀、Pixso、Adobe XD这4种主流原型设计工具。 Axure RP 特点强大的交互能力:强大的交互设计功能,支持复杂的交互流程和状态转换。 丰富的组件库:Axure RP 内置了大量的组件,包…

windev28 试用版 测试

下载地址 https://package.windev.com/pack/versiondemo/28/us/WDE28PACKDVDUS095g.zip建议迅雷下载 非常快 需要申请一个试用码 界面没啥变化 依旧只能生成32位程序,不过客户端在中国早就没落了 也没啥价值了 还不如去学electron

【Mybatis/Mybaits-Plus】【插件】插件执行时机

1 前言 我之前看过插件的执行过程:【Mybatis】【插件】Mybatis源码解析-插件机制,主要是通过一个 Executor 的创建以及执行过程串了一下插件,我们这里简单回忆下: (1)Mybatis 把所有的插件都放进了 InterceptorChain 类里的 interceptors 集合里 (2)插件的两个时机:入…

软件设计原则—开闭原则

对扩展开放,对修改关闭,使用接口或抽象类实现在程序需要进行拓展的时候,不能去修改原有的代码,而是实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。 想要达到这样的效果,我们需要使用接口和抽象类。 因为抽象灵活性好,适应性广,只要抽象的合理…

【开源】2024最新python豆瓣电影数据爬虫+可视化分析项目

项目介绍 【开源】项目基于python+pandas+flask+mysql等技术实现豆瓣电影数据获取及可视化分析展示,觉得有用的朋友可以来个一键三连,感谢!!! 项目演示 [video(video-C9B87WwE-1716106102936)(type-bilibili)(url-https://player.bilibili.com/player.html?aid=120451806…

何恺明介绍

何恺明(Kaiming He),1984年出生于广东广州,人工智能科学家,麻省理工学院电气工程与计算机科学系副教授。 何恺明2003年高中毕业于广州市执信中学,为当年广东省高考满分状元。2003-2007年就读于清华大学物理系基础科学班,连续3年获得清华奖学金,本科毕业后进入香港中文…

【每周例题】力扣 C++ 一年中的第几天

一年中的第几天 题目 一年中的第几天 思路分析 1.substr函数分割字符串,stoi函数将字符串转为十进制 stoi函数介绍 substr函数介绍 2.判断是否为闰年,如果是闰年,则二月的天数+1 代码#include<bits/stdc++.h> using namespace std;int main() {int months[13] = { 0,3…

题目:SHMIP The subglacial hydrology model intercomparison Project

SHMIP(冰下水文模型比较计划)是一个致力于解决冰下水文多种理论方法问题的项目。该计划通过构建一系列综合模拟实验,并对运行这些模拟的各参与模型的结果进行比较,以达到其目标。这将有助于潜在的模型用户更加明智地为特定应用选择合适的模型。同时,对于模型开发人员来说,…

Xpath使用教程

一、安装Xpath解析库-scrapy中的selector win+r打开cmd,输入pip install wheel,先安装wheel库了才能安装.whl文件。安装lxml库 到https://pypi.org/project/lxml/#files下载对应python版本的lxml库 切到lxml下载位置,安装lxml安装Twisted库 到https://pypi.org/project/Twi…

JEEVMS仓库管理系统任意文件读取漏洞

漏洞描述 该漏洞由于系统未能正确实施或执行对文件的访问控制权限控制,允许未经授权的用户访问或读取文件,并且应用程序未能对用户输入进行适当验证,攻击者可以构造特殊的输入,如路径遍历攻击读取系统文件内容,导致信息泄露 Fofa: body="plug-in/lhgDialog/lhgdialog…

vulnhub--JIS靶场

环境搭建 kali(攻击机,NAT):192.168.96.4 靶机(linux,NAT):ip未知 信息收集 主机探测 netdiscover -i 监听网卡发现96网段存活主机,猜测是96.5为靶机地址 端口扫描 nmap -sS -v 192.168.96.5(高校快速的扫描,TCP半链接扫描) nmap -A 192.168.96.5(全面扫描,更全面)…

rthread学习记录汇总-不断更新

1、rthread 同Linux类似,包含了所有主流的芯片、cpu架构,可从官方获取最新的rt-thread源码后进行裁剪2、可从rthread官网下载env工具,env工具可用来对rtthread源码生成mdk/iar工程 命令式scons --target=mdk5 scons --targe=iar scons自带的编译固件功能,命令为scnons,…