转载请注明出处,附上链接,谢谢。

目前 该代码只正对火狐浏览器

先来看看算法:

MAD算法:平均绝对差算法(Mean Absolute Differences,简称MAD算法),它是Leese在1971年提出的一种匹配算法。是模式识别中常用方法,该算法的思想简单,具有较高的匹配精度,广泛用于图像匹配。设S(x,y)是大小为mxn的搜索图像,T(x,y)是MxN的模板图像,分别如下图(a)、(b)所示,我们的目的是:在(a)中找到与(b)匹配的区域(红框所示)。

                                               

算法思路

在搜索图S中,以(i,j)为左上角,取MxN大小的子图,计算其与模板的相似度;遍历整个搜索图,在所有能够取到的子图中,找到与模板图最相似的子图作为最终匹配结果。

        MAD算法的相似性测度公式如下。显然,平均绝对差D(i,j)越小,表明越相似,故只需找到最小的D(i,j)即可确定能匹配的子图位置:

其中:

算法评价:

优点:

思路简单,容易理解(子图与模板图对应位置上,灰度值之差的绝对值总和,再求平均,实质:是计算的是子图与模板图的L1距离的平均值)。

运算过程简单,匹配精度高。

缺点:

运算量偏大。

对噪声非常敏感。

好了上代码

①首先在canvas画布上绘制搜索图和模板图

②获得搜索图和模板图的像素数据

③将RGB转灰度值(这部分可以参考我的另一篇博客点击打开链接)

④从搜索图的(0,0)点开始,取模板图大小的子图,将子图与模板图像素点一一对应,灰度值做绝对差,求平均绝对差和

⑤遍历整个搜索图,平均绝对差和最小的即为最相似的子图

最终结果:

js实现MAD图像识别算法相关推荐

  1. 【从蛋壳到满天飞】JS 数据结构解析和算法实现-AVL树(一)

    前言 [从蛋壳到满天飞]JS 数据结构解析和算法实现,全部文章大概的内容如下: Arrays(数组).Stacks(栈).Queues(队列).LinkedList(链表).Recursion(递归思 ...

  2. 一张图看懂图像识别算法发展历史

    一张图看懂图像识别算法发展历史

  3. 手写识别python_Python徒手实现识别手写数字—图像识别算法(K最近邻)

    Python徒手实现识别手写数字-图像识别算法(K最近邻) 写在前面 这一段的内容可以说是最难的一部分之一了,因为是识别图像,所以涉及到的算法会相比之前的来说比较困难,所以我尽量会讲得清楚一点. 而且 ...

  4. 【从蛋壳到满天飞】JS 数据结构解析和算法实现-哈希表

    前言 [从蛋壳到满天飞]JS 数据结构解析和算法实现,全部文章大概的内容如下: Arrays(数组).Stacks(栈).Queues(队列).LinkedList(链表).Recursion(递归思 ...

  5. ML之SVM:利用Js语言设计SVM算法(SMO算法+线性核/高斯核)

    ML之SVM:利用Js语言设计SVM算法(SMO算法+线性核/高斯核) 目录 输出结果 设计思路 设计代码(部分代码) 输出结果 设计思路 设计代码(部分代码) var doTest = functi ...

  6. js实现数组降维算法[不准用Array.prototype.flat的api]

    js实现数组降维算法[不准用Array.prototype.flat的api] // target要降维的元素,n降维阶数,newArr存储结果的新数组 function f(target, n = ...

  7. c语言a 寻路算法,JS/HTML5游戏常用算法之路径搜索算法 A*寻路算法完整实例

    本文实例讲述了JS/HTML5游戏常用算法之路径搜索算法 A*寻路算法.分享给大家供大家参考,具体如下: 完整实例代码如下: A*寻路算法 #stage { border: 1px solid lig ...

  8. 【从蛋壳到满天飞】JS 数据结构解析和算法实现-堆和优先队列(一)

    前言 [从蛋壳到满天飞]JS 数据结构解析和算法实现,全部文章大概的内容如下: Arrays(数组).Stacks(栈).Queues(队列).LinkedList(链表).Recursion(递归思 ...

  9. html5 游戏 算法,JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【圆形情况】...

    JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解[圆形情况] 发布时间:2020-10-10 13:42:43 来源:脚本之家 阅读:95 作者:krapnik 本文实例讲述了JS/HTML ...

最新文章

  1. 什么是L1/L2/L3 Cache?
  2. 基于FFmpeg音视频流同步
  3. 利用localStorage本地储存js文件
  4. php扩展管理配置信息,PHP扩展管理 - 城市之雾的个人空间 - OSCHINA - 中文开源技术交流社区...
  5. 为什么使用ES6生成器
  6. electronics.local在SAP Hybris中出现的几个位置
  7. 基于.NET SingalR,LayIM2.0实现的web聊天室
  8. Java小白进阶笔记(3)-初级面向对象
  9. 定义函数up(ch),如字符变量ch是小写字母就转换成大写字母并通过up返回,否则字符ch不改变。要求在短小而完全的程序中显示这个程序是怎样被调用的。
  10. 我们团队有个做风水项目的现在月收入也有几万了
  11. Javascript面向对象特性
  12. C语言:判断三角形是否为直角三角形
  13. 7.11计划,做个没心没肺的人
  14. 你根本不会休息(转)
  15. 如何实现卫星通信的稳定链接?
  16. 豆丁网文档免登陆免积分下载工具原理分析
  17. 按键精灵根据图片查找技巧
  18. 电销机器人百度百科_晓芯智能电话机器人百度百科
  19. Win11打印机无法打印怎么办?Win11打印机无法打印解决方法
  20. Linux Polkit本地权限提升漏洞(CVE-2021-4034)

热门文章

  1. 八皇后,N皇后及其变种问题
  2. 数据分析案例--红酒数据集分析
  3. 怎么把电脑的php软件删掉,彻底删除电脑中流氓软件的4大实用高招! 为什么电脑会被偷偷装上百度软件?...
  4. cmd停止nginx服务
  5. 韦老师6000字长文告诉你如何学习linux
  6. Windows下安装PyMysql(图文详解)
  7. vba 方法和数据成员未找到_VBA基础知识,数据装入数组的方法,currentregion方法最简单...
  8. 大型网站技术架构-8 固若金汤:网站的安全架构
  9. 团购网站集体转型谋生
  10. Matplotlib imshow()函数用法总结