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就不验证了,公式有,自己写一下。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

系统架构19 - 面向对象

面向对象设计 相关概念面向对象分析基本步骤基本原则分析模型 面向对象设计设计模型类的类型 面向对象编程基本特点需求建模设计原则面向对象软件测试 相关概念 接口&#xff1a;描述对操作规范的说明&#xff0c;其只说明操作应该做什么&#xff0c;并没有定义操作如何做。消…

服务器基础知识(IP地址与自动化技术的使用)

目录 ip地址是什么&#xff1f; 如何查看ip地址 Windows的命令提示符 图形化版本&#xff1a; 自动化技术的应用与意义 ip地址是什么&#xff1f; IP地址的主要作用是**为互联网上的每个网络和每台主机分配一个逻辑地址**。 它由32位二进制数字组成&#xff0c;通常分为四…

无人机激光雷达标定板

机载激光雷达标定板是用于校准和验证机载激光雷达系统的设备。由于机载激光雷达系统在测量地形、建筑物和植被等方面具有广泛的应用&#xff0c;因此标定板的使用对于确保测量结果的准确性和可靠性至关重要。 标定板通常由高反射率的材料制成&#xff0c;如镀金的玻璃或陶瓷&am…

关于爬取所有哔哩哔哩、任意图片、所有音乐、的python脚本语言-Edge浏览器插件 全是干货!

这些都是现成的并且实时更新的&#xff01;从次解放双手&#xff01; 首先有自己的edge浏览器基本上都有并且找到插件选项 1.哔哩哔哩视频下载助手&#xff08;爬取哔哩哔哩视频&#xff09; bilibili哔哩哔哩视频下载助手 - Microsoft Edge Addons 下面是效果&#xff1a; 2.图…

谷歌浏览器网站打不开,显示叹号

问题&#xff1a; 您与此网站之间建立的连接不安全请勿在此网站上输入任何敏感信息&#xff08;例如密码或信用卡信息&#xff09;&#xff0c;因为攻击者可能会盗取这些信息。 了解详情 解决方式&#xff1a; 网上有很多原因&#xff0c;亲测为DNS问题&#xff0c;设置&…

iPad“粘贴自”字样不消失解决办法

iPad“粘贴自”字样不消失解决办法 好无语&#xff0c;写论文主要就靠iPad看资料&#xff0c;复制粘帖的时候卡死搞得我无敌焦躁&#xff0c;问了&#x1f34e;支持的客服才解决&#xff0c;方法如下&#xff1a;1.音量上键按一下 2.音量下键按一下 3.一直按开关机键直到出现苹…

pytest的常用插件和Allure测试报告

pytest常用插件 pytest-html插件 安装&#xff1a; pip install pytest-html -U 用途&#xff1a; 生成html的测试报告 用法&#xff1a; ​在.ini配置文件里面添加 addopts --htmlreport.html --self-contained-html 效果&#xff1a; 执行结果中存在html测试报告路…

智能汽车竞赛摄像头处理(3)——动态阈值二值化(大津法)

前言 &#xff08;1&#xff09;在上一节中&#xff0c;我们学习了对图像的固定二值化处理&#xff0c;可以将原始图像处理成二值化的黑白图像&#xff0c;这里面的本质就是将原来的二维数组进行了处理&#xff0c;处理后的二维数组里的元素都是0和255两个值。 &#xff08;2…

RFID手持终端_智能pda手持终端设备定制方案

手持终端是一款多功能、适用范围广泛的安卓产品&#xff0c;具有高性能、大容量存储、高端扫描头和全网通数据连接能力。它能够快速平稳地运行&#xff0c;并提供稳定的连接表现和快速的响应时&#xff0c;适用于医院、物流运输、零售配送、资产盘点等苛刻的环境。通过快速采集…

javaScript的序列化与反序列化

render函数的基本实现 javaScript的序列化与反序列化 一&#xff0c;js中的序列化二&#xff0c;序列化三&#xff0c;反序列化四&#xff0c;总结 一&#xff0c;js中的序列化 js中序列化就是对象转换成json格式的字符串&#xff0c;使用JSON对象的stringify方法&#xff0c;…

18.3K Star,简洁强大下载利器

Hi&#xff0c;骚年&#xff0c;我是大 G&#xff0c;公众号「GitHub指北」会推荐 GitHub 上有趣有用的项目&#xff0c;一分钟 get 一个优秀的开源项目&#xff0c;挖掘开源的价值&#xff0c;欢迎关注。 今天推荐一个强大简洁下载利器&#xff0c;用于从各种网站下载图像/视…

Linux(一)

介绍 常见的操作系统(windows、IOS、Android、MacOS, Linux, Unix)&#xff1b; 一个开源、免费的操作系统&#xff0c;其稳定性、安全性、处理多并发已经得到业界的认可&#xff1b;目前很多企业级的项目(c/c/php/python/java/go)都会部署到 Linux/unix 系统上。 吉祥物 …

leetcode刷题(剑指offer) 297.二叉树的序列化和反序列化

297.二叉树的序列化与反序列化 序列化是将一个数据结构或者对象转换为连续的比特位的操作&#xff0c;进而可以将转换后的数据存储在一个文件或者内存中&#xff0c;同时也可以通过网络传输到另一个计算机环境&#xff0c;采取相反方式重构得到原数据。 请设计一个算法来实现…

使用wda框架实现IOS自动化测试详解

目录 1、weditor元素定位工具 1.1、weditor的安装和使用 2、wda iOS自动化框架 2.1、wda概述 2.2、wda安装 2.3、wda的使用 2.3.1、全局配置 2.3.2、创建客户端 2.3.3、APP相关操作 1、启动APP 2、关闭APP 3、获取APP状态信息 4、获取当前APP的运行信息 2.3.4、设…

ruoyi(若依)(el-menu也可参考)菜单栏过长显示省略号才显示气泡

一、背景 若依前后端分离的版本&#xff0c;新版本中优化了菜单名称过长悬停显示标题&#xff0c;但是是悬浮所有长度大于5的标题。可以查看提交记录&#xff1a;https://gitee.com/y_project/RuoYi-Cloud/commit/99932d91c0144da9f34f5bb05683cc0b86303217 但是我希望是只悬浮…

Vulnhub靶机:hacksudo2 (HackDudo)

一、介绍 运行环境&#xff1a;Virtualbox 攻击机&#xff1a;kali&#xff08;10.0.2.15&#xff09; 靶机&#xff1a;hacksudo2 (HackDudo)&#xff08;10.0.2.44&#xff09; 目标&#xff1a;获取靶机root权限和flag 靶机下载地址&#xff1a;https://download.vulnh…

双非本科准备秋招(15.3)—— 力扣二叉树

今天学了二叉树结点表示法&#xff0c;建树代码如下。 public class TreeNode {public int val;public TreeNode left;public TreeNode right;public TreeNode(int val) {this.val val;}public TreeNode(int val, TreeNode left, TreeNode right) {this.val val;this.left …

C++ | 部分和函数partial_sum的使用技巧

如果你需要处理一个数组的前缀和&#xff0c;或者数组中某一段元素的前缀和&#xff0c;你会怎么做呢&#xff1f; partial_sum函数是STL中的函数&#xff0c;用于计算范围的部分和&#xff0c;并从结果开始分配范围中的每个元素&#xff0c;range[first,last)中相应元素的部分…

MH-ET LIVE Boards(ATTiny88)实验一---点亮板载灯

MH-ET LIVE Boards(ATTiny88&#xff09;实验一点亮板载灯 在Arduino IDE中添加开发板资源包加入开发板json添加开发板 安装开发板驱动方法一&#xff1a;github下载2.0a4.rar方法二&#xff1a;开发板的package包中自带的2.0a4.rar安装驱动确认安装成功 blink.ino程序测试![在…

知识图谱嵌入学习在推理方法中的应用与挑战

目录 前言1 关系推理的嵌入模型1.1 嵌入模型介绍1.2 模型的差异1.3 嵌入模型的发展趋势 2 符号推理与向量推理3 嵌入模型的多样性4 强化学习与挑战5 元关系学习结论 前言 在人工智能领域&#xff0c;推理一直是关键任务之一。然而&#xff0c;传统的符号推理受限于人工定义&am…