ncc匹配(一,理论)

前头从来没用过ncc,基于形状匹配搞定后,又翻了翻learning opencv,他并不推荐ncc,而是力推emd,这也是当初我没考虑用ncc的原因。

当初看到ncc公式很复杂,也就忘了。

我的第一个匹配,是最笨的,花了好几秒才有结果,就是模板在图像中实实在在的足行足列找。

后来改进了一下,模板中使用隔行隔列,速度有所上升,但还是慢。

这也是我估计ncc慢的原因。

但opencv有出彩的地方,我一直记不住,就是利用直方图,进行ncc匹配。

闲来无事,研究一下ncc,他的匹配原理是概率论里的相关性。

我们定义,学习模板和图像中任意一个和模板宽高相同的扣图是两个变量的函数,即,学习模板是变量a的函数,图像中任意一个和模板宽高相同的扣图是变量b的函数。

定义,Z(a,b)是变量a和b的协方差。

定义,D(a)是学习模板的方差,D(b)是图像中任意一个和模板宽高相同的扣图的方差。

那么概率论给出了,变量a和变量b的相关性函数:

p=Z(a,b)/sqrt(D(a)*D(b)),sqrt是平方根的意思。条件是方差不为零。

如果学习模板T里的灰度全为零D(a)=0,或者图像中任意一个和模板宽高相同的扣图S灰度全为零D(b)=0,则分母为零,就会异常。

p=1,变量a和b线性相关,我们称为模板T和S匹配。p=0,则变量a和b不相关,模板T和S匹配不匹配。1>=p>0,就是匹配得分情况。

变量a和b不相关,即独立,独立p=0。书中给出了证明:我抄下来了:

协方差=期望(a-期望a)(b-期望b),因为独立,所以

协方差=期望(a-期望a)期望(b-期望b),因为期望(a-期望a)=0,期望(b-期望b)=0,所以

p=Z(a,b)/sqrt(D(a)*D(b))=0/sqrt(D(a)*D(b))=0,证毕

若线性相关(隐含了缩放也可匹配),即a=c*b+x,表示a和b是线性关系。p=1如何证明?我学着证明了一下:

协方差=期望(a-期望a)(b-期望b)=E(a-Ea)(b-Eb)=E(c*b+x-E(c*b+x))(b-Eb)

=E(c*b+x-E(c*b)-x)(b-Eb)==E(c*b-E(c*b))(b-Eb)=c*E(b-Eb)(b-Eb)

而E(b-Eb)(b-Eb)就是b的方差=D(b)

p=Z(a,b)/sqrt(D(a)*D(b))=c*E(b-Eb)(b-Eb)/sqrt(D(a)*D(b))=c*D(b)/sqrt(D(a)*D(b))

因为d(a)=期望(a-期望a)(a-期望a)=E(a-Ea)(a-Ea)

=E(c*b+x-E(c*b+x))(c*b+x-E(c*b+x))

=c*c*E(b-Eb)(b-Eb)=c*c*D(b)

所以:p=c*D(b)/sqrt(D(a)*D(b))中D(a)被上面公式替换,

p=c*D(b)/sqrt(c*c*D(b)*D(b))=c*D(b)/(c*D(b))=1

证毕。

下面是验证灰度ncc匹配的c#代码:

 //下面比对学习到的roiImage备用ncc和匹配到的roiImage备用ncc2两幅图像
              // 下面使用灰度法ncc202402011731
              //   没有考虑旋转
              double 学习凸包的中心x = 0; 
              double pipei凸包的中心x = 0;
              for (int i = 0; i < roiwforncc * roihforncc; i++)
              {
                  学习凸包的中心x += roiImage备用ncc[i];
                  pipei凸包的中心x += roiImage备用ncc2[i];
              }
              学习凸包的中心x = 学习凸包的中心x /(roiwforncc * roihforncc);
              pipei凸包的中心x = pipei凸包的中心x / (roiwforncc * roihforncc);
              double aa = 0;
              double bb = 0;
              double cc = 0;
              for (int i = 0; i < roiwforncc * roihforncc; i++)
              {
                  aa += (roiImage备用ncc[i] - 学习凸包的中心x) * (roiImage备用ncc2[i] - pipei凸包的中心x);
                  bb += (roiImage备用ncc[i] - 学习凸包的中心x) * (roiImage备用ncc[i] - 学习凸包的中心x);
                  cc += (roiImage备用ncc2[i] - pipei凸包的中心x) * (roiImage备用ncc2[i] - pipei凸包的中心x);
              }
              double p = 0;
              p = aa / Math.Sqrt(bb * cc);

下一篇给出验证前面直方图梯度角度(hog)的ncc代码,补充ncc对旋转的不足

opencv中的直方图ncc就不验证了,公式有,自己写一下。

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

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

相关文章

软件测试Bug系列之4个基本步骤(一)

目录 1.发现bug 2.提交bug 3.跟踪bug 4.总结bug 只要你一个测试人员 &#xff0c;就肯定离不开提交bug&#xff0c;跟踪bug的工作 。对于大多数的功能测试人员来说 &#xff0c;占比最多的工作就是和bug打交道 。可以说它是我们最重要的一块业绩 。所以&#xff0c;有必要静…

Redis核心技术与实战【学习笔记】 - 22.浅谈Redis的ACID相关知识

概述 事务是数据库的一个重要功能。所谓的事务&#xff0c;就是指对数据进行读写的一系列操作。事务在执行时&#xff0c;会提供专门的属性保证&#xff0c;包括原子性&#xff08;Atomicity&#xff09;、一致性&#xff08;Consistency&#xff09;、隔离性&#xff08;Isol…

测试人2023年终总结怎么写?升职加薪就靠它了!

你们年终总结都写了嘛&#xff1f;小编花了2天的时间&#xff0c;写完了2000字&#xff0c;只要领导一说交&#xff0c;我就能分分钟发给领导嘿嘿嘿~很喜欢这种未雨绸缪不紧不慢的感觉… 为了方便大家“食用”本篇文章&#xff0c;先把我的年终总结大纲给大家放出来瞧瞧&#…

解决浏览器端 globalThis is not defined 报错

解决浏览器端 globalThis is not defined 报错 前言解决办法&#xff1a; 前言 在使用低版本火狐浏览器出现报错globalThis is not defined 解决办法&#xff1a; 在vue的index.html 中添加 this.globalThis || (this.globalThis this) <head><script>this.g…

[BUUCTF]-PWN:picoctf_2018_can_you_gets_me解析

先看保护 再看ida 有一个不限长度的输入点gets&#xff0c;那能干的就很多了。 通俗易懂的思路有以下两种 解法一&#xff08;系统调用&#xff09;&#xff1a; 完整exp&#xff1a; from pwn import* context(log_leveldebug) pprocess(./getsme) premote(node5.buuoj.cn…

基于python+控制台输出的学生信息管理系统

基于python控制台输出的学生信息管理系统 一、系统介绍二、效果展示三、其他系统实现四、获取源码 一、系统介绍 打印功能菜单、添加学生信息、删除学生信息、修改学生信息、显示学生信息、退出系统&#xff0c;并且需要接收用户的输入&#xff0c;在根据输入内容调用相应函数…

解放网工双手-SNMP如何做好运维辅助?

1. SNMP为什么被誉为“网管神器”&#xff1f; 2. SNMP不同版本有何区别&#xff1f; 3. SNMP有哪些问题及Telemetry有何优势&#xff1f; ---- SNMP ----- 简单网络管理协议 U2000&#xff1a;传输设备管理 企业&#xff0c;银行 esight&#xff1a;华为 iMaster NCE-Camp…

机器学习周报第二十八周 PINNs2

文章目录 week28 PINNs2摘要Abstract一、Lipschitz条件二、文献阅读1. 题目数据驱动的偏微分方程2. 连续时间模型3. 离散时间模型4.结论 三、CLSTM1. 任务要求2. 实验结果3. 实验代码3.1模型构建3.2训练过程代码 小结参考文献 week28 PINNs2 摘要 本文主要讨论PINN。本文简要…

python接口自动化之接口测试用例(详解)

简介 接口测试是软件测试中非常重要的一种测试类型&#xff0c;它主要针对系统的接口进行测试&#xff0c;检查接口之间的交互是否符合预期。在进行接口测试时需要注意以下几个方面&#xff1a; 接口测试用例设计 接口测试用例设计需要考虑到接口的输入、输出、边界条件、异常…

从一个小故事讲解观察者模式~

定义对象间的一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都得到通知并被自动更新。 什么是观察者模式&#xff1f; 观察者模式在我们的日常生活中极其常见。 先来看看观察者模式的定义&#xff1a; 观察者模式定义了对象之间…

山西电力市场日前价格预测【2024-02-05】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2024-02-05&#xff09;山西电力市场全天平均日前电价为288.64元/MWh。其中&#xff0c;最高日前电价为400.22元/MWh&#xff0c;预计出现在18:45。最低日前电价为0.00元/MWh&#xff0c;预计出…

FastCAE合作开发项目更新:OpenFOAM求解器集成

开发内容 1. 参数化建模&#xff0c;可根据模型参数、块参数、样条参数生成前处理模型并进行三维展示 2. 前处理网格生成&#xff0c;可根据流域参数生成二维面网格或三维体网格&#xff0c;可调节网格基本尺寸&#xff0c;可设置生成棱柱层及棱柱层参数&#xff0c;网格加密…