给出两个图像 A 和 B ,A 和 B 为大小相同的二维正方形矩阵。(并且为二进制矩阵,只包含0和1)。
      我们转换其中一个图像,向左,右,上,或下滑动任何数量的单位,并把它放在另一个图像的上面。之后,该转换的重叠是指两个图像都具有 1 的位置的数目。(请注意,转换不包括向任何方向旋转。)
      最大可能的重叠是什么?

示例 1:输入:A = [[1,1,0],[0,1,0],[0,1,0]]B = [[0,0,0],[0,1,1],[0,0,1]]
输出:3
解释: 将 A 向右移动一个单位,然后向下移动一个单位。

注意:

  • 1 <= A.length = A[0].length = B.length = B[0].length <= 30
  • 0 <= A[i][j], B[i][j] <= 1

理解示例:初始状态时A和B两个图像是重叠放置的(我刚刚理解不了题目意思就是在这里),为了使A和B中1重叠的数目最多(示例中是3)可将A向右移动1位,向下移动1位,我们记为(-1,-1),“-”表示右/下移。

一维的思路

二维矩阵有点复杂,我们思考如果是一维数组怎么解。给定A=[1,1,1,0],B=[0,0,1,1]。我们可以一眼看出最大重叠1的数目是2,A右移2位即可。虽然我们是一眼看出来的,其实我们经历了以下过程:
为了便于叙述令aia_{i}ai​和bib_{i}bi​表示为两个数组中第i个元素。→表示记为

①a0和b2重叠,右移2,重叠1数目2→-2;
②a0和b3重叠,右移3,重叠1数目1→-3;④a1和b2重叠,右移1,重叠1数目2→-1;
⑤a1和b3重叠,右移2,重叠1数目2→-2;⑥a2和b2重叠,右移0,重叠1数目1→0;
⑦a2和b3重叠,右移1,重叠1数目2→-1.

经过以上步骤我们可以得到:{-2:2,-1:2,0:1,-3:1},表示右移n位及这种移动方式的数目。一维数组是这样做,我们可以升级到二维了。

二维解法的代码

def largestOverlap(A, B):N = len(A)#获取A矩阵中所有1的位置,放在LA中LA = [(i, j) for i in xrange(N) for j in xrange(N) if A[i][j]] #获取B矩阵中所有1的位置,放在LB中LB = [(i, j) for i in xrange(N) for j in xrange(N) if B[i][j]]#使用A中的每个1去重叠B中的每个1,记录下移动的方式如右移1,下移1(-1,-1)dict = [(x1 - x2, y1 - y2) for x1, y1 in LA for x2, y2 in LB]#记录下相同的移动方式及这种移动方式的数量(每一种移动方式都是A中的某一点和B中的某一点重合得来的)#譬如如果(-1,-1)数量为3,说明通过这种移动方式有三个不同的点重合了c = collections.Counter(dict)return max(c.values() or [0])

简易手写数字识别

如果A和B越相似,则重叠的数字1越多。我觉得这可以用于手写数字识别,当然这肯定是简易版的。

import collectionsdef largestOverlap(A, B):N = len(A)# 获取A矩阵中所有1的位置,放在LA中LA = [(i, j) for i in range(N) for j in range(N) if A[i][j]]# 获取B矩阵中所有1的位置,放在LB中LB = [(i, j) for i in range(N) for j in range(N) if B[i][j]]# 使用A中的每个1去重叠B中的每个1,记录下移动的方式如右移1,下移1(-1,-1)c = [(x1 - x2, y1 - y2)for x1, y1 in LA for x2, y2 in LB]# 记录下相同的移动方式及这种移动方式的数量(每一种移动方式都是A中的某一点和B中的某一点重合得来的)# 譬如如果(-1,-1)数量为3,说明通过这种移动方式有三个不同的点重合了dict = collections.Counter(c)return max(dict.values() or [0])listsA = []#未知的0~9
listsB = []#已知的0~9
#将所有的数字图像都存储在listsAlistsB中
for dir in ['A','B']:for i in range(10):with open("{}/{}.txt".format(dir,i),"r") as file:num = []lines = file.readlines()for line in lines:num.append([int(line[i]) for i in range(len(line)-1)])if dir=='A':listsA.append(num)else:listsB.append(num)#取出listsA中的图像,和listsB中的全部图像匹配,重叠1多的就是对应数字
for A in listsA:temp = []for B in listsB:temp.append(largestOverlap(A, B))print("识别到:",temp.index(max(temp)))

数字资源链接:https://pan.baidu.com/s/1qWasLX7eb_EQOUr-ynOIcw
提取码:xf41
运行结果:

数字1,4,8识别出错,这也正常,毕竟我这也只是玩玩而已,简易版嘛!还有很多细节没有考虑

Image Overlap到手写数字识别相关推荐

  1. 深度学习100例 | 第25天-卷积神经网络(CNN):中文手写数字识别

    大家好,我是『K同学啊』! 接着上一篇文章 深度学习100例 | 第24天-卷积神经网络(Xception):动物识别,我用Xception模型实现了对狗.猫.鸡.马等四种动物的识别,带大家了解了Xc ...

  2. 手把手入门神经网络系列(2)_74行代码实现手写数字识别

    作者: 龙心尘&&寒小阳  时间:2015年12月.  出处:  http://blog.csdn.net/longxinchen_ml/article/details/5028124 ...

  3. 《神经网络和深度学习》系列文章五:用简单的网络结构解决手写数字识别

    出处: Michael Nielsen的<Neural Network and Deep Learning>,点击末尾"阅读原文"即可查看英文原文. 本节译者:哈工大S ...

  4. 手把手,74行代码实现手写数字识别

    手把手,74行代码实现手写数字识别 689 次阅读 - 2015.12.29 - 人工智能 - 龙猫 http://dataunion.org/20992.html 1. 引言:不要站在岸上学游泳 & ...

  5. pytorch 预测手写体数字_深度学习之PyTorch实战(3)——实战手写数字识别

    如果需要小编其他论文翻译,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/DeepLearningNote 上一节,我们已经 ...

  6. python 手写数字识别 封装GUI,手写板获取鼠标写字轨迹信息

    python 手写数字识别知识不用多说,本文用深度学习Python库Keras实现深度学习入门教程mnist手写数字识别.mnist手写数字识别是机器学习和深度学习领域的"hello wor ...

  7. C语言底层搭建CNN实现MNIST手写数字识别

    手写数字识别 手写数字识别是指使用计算机自动识别手写体阿拉伯数字的技术.作为光学字符识别OCR的一个分支,它可以被广泛应用到手写数据的自动录入场景中.传统的识别方法如最近邻算法k-NN.支持向量机SV ...

  8. 小白玩机器学习(6)--- 基于Tensorflow.js的在线手写数字识别

    一.题目要求 1.三个js文件,分别完成:网络训练以及模型保存.模型加载及准确率测试.在线手写数字识别: 2.模型测试准确率要高于99.3%(尽量): 3.在线手写数字识别需要能够通过鼠标在画布中写入 ...

  9. 深蓝学院第三章:基于卷积神经网络(CNN)的手写数字识别实践

    参看之前篇章的用全连接神经网络去做手写识别:https://blog.csdn.net/m0_37957160/article/details/114105389?spm=1001.2014.3001 ...

最新文章

  1. 程序员新手 0年份等级 指导(一) 开发人员IT架构总览
  2. 量子科技概念大火,国内现状如何?
  3. 高性能服务器架构(二):缓存清理策略
  4. C++ Primer 5th笔记(chap 14 重载运算和类型转换)函数匹配与重载运算符
  5. A、B、C、D、E类IP地址都是怎么划分的?
  6. ExtJS4之helloworld
  7. Markdown--绘制流程图(flowchart)_验证
  8. 电脑系统怎么重装win10的方法教程
  9. python从入门到精通pdf-跟老齐学Python从入门到精通
  10. 传统金融行业 IT 的核心竞争力究竟在何处?
  11. Java 实现JSON字符串、JSON对象和Java对象的相互转换(fastjson)
  12. Python tkinter库之Canvas正方形旋转
  13. 视频直播系统源码,简单的移动端轮播图
  14. 计算机接口学平时作业,西电《计算机接口与通信技术》平时作业[教学作业]
  15. Office 2013 论文排版心得
  16. [Maven实战-许晓斌]-[第二章]-2.7-2.8 Mave安装的最优建议和安装小结
  17. android 六边形简书,水波浪贝塞尔效果(六边形)
  18. 数显之家快讯:【SHIO世硕心语】2021,新的一年写给自己的5句话!
  19. Mybatis-plus的Service
  20. 机器学习算法 09-02 TensorFlow核心概念 TensorFlow基础代码、TensorFlow线性回归解析解和BGD求法

热门文章

  1. python selenium手动输入验证码_案例:selenium实现登录百度(如有验证码,需要手动输入)...
  2. Java+大前端合二为一?
  3. web开发环境,开发web前端工程师
  4. 小白Ubuntu安装ROS详细教程及常见问题分析
  5. [转] 一定要记住这20种PS技术!!!会让你的照片美的不行!!!..
  6. 微信网页开发大概要多少钱呢
  7. 第五章 Java的基础类之String、StringBuffer、StringBuilder(下)
  8. 抓取网站网页信息中的TD信息
  9. ie11弹出层后,滚动条消失,页面固定不能动
  10. 模逆(3.扩展欧几里德算法)