js实现MAD图像识别算法
转载请注明出处,附上链接,谢谢。
目前 该代码只正对火狐浏览器
先来看看算法:
MAD算法:平均绝对差算法(Mean Absolute Differences,简称MAD算法),它是Leese在1971年提出的一种匹配算法。是模式识别中常用方法,该算法的思想简单,具有较高的匹配精度,广泛用于图像匹配。设S(x,y)是大小为mxn的搜索图像,T(x,y)是MxN的模板图像,分别如下图(a)、(b)所示,我们的目的是:在(a)中找到与(b)匹配的区域(红框所示)。
![](/assets/blank.gif)
算法思路
在搜索图S中,以(i,j)为左上角,取MxN大小的子图,计算其与模板的相似度;遍历整个搜索图,在所有能够取到的子图中,找到与模板图最相似的子图作为最终匹配结果。
MAD算法的相似性测度公式如下。显然,平均绝对差D(i,j)越小,表明越相似,故只需找到最小的D(i,j)即可确定能匹配的子图位置:
其中:
算法评价:
优点:
①思路简单,容易理解(子图与模板图对应位置上,灰度值之差的绝对值总和,再求平均,实质:是计算的是子图与模板图的L1距离的平均值)。
②运算过程简单,匹配精度高。
缺点:
①运算量偏大。
②对噪声非常敏感。
好了上代码
①首先在canvas画布上绘制搜索图和模板图
②获得搜索图和模板图的像素数据
③将RGB转灰度值(这部分可以参考我的另一篇博客点击打开链接)
④从搜索图的(0,0)点开始,取模板图大小的子图,将子图与模板图像素点一一对应,灰度值做绝对差,求平均绝对差和
⑤遍历整个搜索图,平均绝对差和最小的即为最相似的子图
最终结果:
js实现MAD图像识别算法相关推荐
- 【从蛋壳到满天飞】JS 数据结构解析和算法实现-AVL树(一)
前言 [从蛋壳到满天飞]JS 数据结构解析和算法实现,全部文章大概的内容如下: Arrays(数组).Stacks(栈).Queues(队列).LinkedList(链表).Recursion(递归思 ...
- 一张图看懂图像识别算法发展历史
一张图看懂图像识别算法发展历史
- 手写识别python_Python徒手实现识别手写数字—图像识别算法(K最近邻)
Python徒手实现识别手写数字-图像识别算法(K最近邻) 写在前面 这一段的内容可以说是最难的一部分之一了,因为是识别图像,所以涉及到的算法会相比之前的来说比较困难,所以我尽量会讲得清楚一点. 而且 ...
- 【从蛋壳到满天飞】JS 数据结构解析和算法实现-哈希表
前言 [从蛋壳到满天飞]JS 数据结构解析和算法实现,全部文章大概的内容如下: Arrays(数组).Stacks(栈).Queues(队列).LinkedList(链表).Recursion(递归思 ...
- ML之SVM:利用Js语言设计SVM算法(SMO算法+线性核/高斯核)
ML之SVM:利用Js语言设计SVM算法(SMO算法+线性核/高斯核) 目录 输出结果 设计思路 设计代码(部分代码) 输出结果 设计思路 设计代码(部分代码) var doTest = functi ...
- js实现数组降维算法[不准用Array.prototype.flat的api]
js实现数组降维算法[不准用Array.prototype.flat的api] // target要降维的元素,n降维阶数,newArr存储结果的新数组 function f(target, n = ...
- c语言a 寻路算法,JS/HTML5游戏常用算法之路径搜索算法 A*寻路算法完整实例
本文实例讲述了JS/HTML5游戏常用算法之路径搜索算法 A*寻路算法.分享给大家供大家参考,具体如下: 完整实例代码如下: A*寻路算法 #stage { border: 1px solid lig ...
- 【从蛋壳到满天飞】JS 数据结构解析和算法实现-堆和优先队列(一)
前言 [从蛋壳到满天飞]JS 数据结构解析和算法实现,全部文章大概的内容如下: Arrays(数组).Stacks(栈).Queues(队列).LinkedList(链表).Recursion(递归思 ...
- html5 游戏 算法,JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【圆形情况】...
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解[圆形情况] 发布时间:2020-10-10 13:42:43 来源:脚本之家 阅读:95 作者:krapnik 本文实例讲述了JS/HTML ...
最新文章
- 什么是L1/L2/L3 Cache?
- 基于FFmpeg音视频流同步
- 利用localStorage本地储存js文件
- php扩展管理配置信息,PHP扩展管理 - 城市之雾的个人空间 - OSCHINA - 中文开源技术交流社区...
- 为什么使用ES6生成器
- electronics.local在SAP Hybris中出现的几个位置
- 基于.NET SingalR,LayIM2.0实现的web聊天室
- Java小白进阶笔记(3)-初级面向对象
- 定义函数up(ch),如字符变量ch是小写字母就转换成大写字母并通过up返回,否则字符ch不改变。要求在短小而完全的程序中显示这个程序是怎样被调用的。
- 我们团队有个做风水项目的现在月收入也有几万了
- Javascript面向对象特性
- C语言:判断三角形是否为直角三角形
- 7.11计划,做个没心没肺的人
- 你根本不会休息(转)
- 如何实现卫星通信的稳定链接?
- 豆丁网文档免登陆免积分下载工具原理分析
- 按键精灵根据图片查找技巧
- 电销机器人百度百科_晓芯智能电话机器人百度百科
- Win11打印机无法打印怎么办?Win11打印机无法打印解决方法
- Linux Polkit本地权限提升漏洞(CVE-2021-4034)
热门文章
- 八皇后,N皇后及其变种问题
- 数据分析案例--红酒数据集分析
- 怎么把电脑的php软件删掉,彻底删除电脑中流氓软件的4大实用高招! 为什么电脑会被偷偷装上百度软件?...
- cmd停止nginx服务
- 韦老师6000字长文告诉你如何学习linux
- Windows下安装PyMysql(图文详解)
- vba 方法和数据成员未找到_VBA基础知识,数据装入数组的方法,currentregion方法最简单...
- 大型网站技术架构-8 固若金汤:网站的安全架构
- 团购网站集体转型谋生
- Matplotlib imshow()函数用法总结