#region 生成图片及图片比较public String GetHash(Image SourceImg){Image image = ReduceSize(SourceImg);Byte[] grayValues = ReduceColor(image);Byte average = CalcAverage(grayValues);String reslut = ComputeBits(grayValues, average);return reslut;}// Step 1 : Reduce size to 8*8private Image ReduceSize(Image SourceImg){int width = 8; int height = 8;Image image = SourceImg.GetThumbnailImage(width, height, () => { return false; }, IntPtr.Zero);return image;}// Step 2 : Reduce Colorprivate Byte[] ReduceColor(Image image){Bitmap bitMap = new Bitmap(image);Byte[] grayValues = new Byte[image.Width * image.Height];for (int x = 0; x < image.Width; x++)for (int y = 0; y < image.Height; y++){Color color = bitMap.GetPixel(x, y);byte grayValue = (byte)((color.R * 30 + color.G * 59 + color.B * 11) / 100);grayValues[x * image.Width + y] = grayValue;}return grayValues;}// Step 3 : Average the colorsprivate Byte CalcAverage(byte[] values){int sum = 0;for (int i = 0; i < values.Length; i++)sum += (int)values[i];return Convert.ToByte(sum / values.Length);}// Step 4 : Compute the bitsprivate String ComputeBits(byte[] values, byte averageValue){char[] result = new char[values.Length];for (int i = 0; i < values.Length; i++){if (values[i] < averageValue)result[i] = '0';elseresult[i] = '1';}return new String(result);}// Compare hashpublic Int32 CalcSimilarDegree(string a, string b){if (a.Length != b.Length)throw new ArgumentException();int count = 0;for (int i = 0; i < a.Length; i++){if (a[i] != b[i])count++;}return count;}#endregion

  

原理讲解

参考Neal Krawetz博士的这篇文章, 实现这种功能的关键技术叫做"感知哈希算法"(Perceptual Hash Algorithm), 意思是为图片生成一个指纹(字符串格式), 两张图片的指纹越相似, 说明两张图片就越相似. 但关键是如何根据图片计算出"指纹"呢? 下面用最简单的步骤来说明一下原理:

第一步 缩小图片尺寸

将图片缩小到8x8的尺寸, 总共64个像素. 这一步的作用是去除各种图片尺寸和图片比例的差异, 只保留结构、明暗等基本信息.

第二步 转为灰度图片

将缩小后的图片, 转为64级灰度图片.

第三步 计算灰度平均值

计算图片中所有像素的灰度平均值

第四步 比较像素的灰度

将每个像素的灰度与平均值进行比较, 如果大于或等于平均值记为1, 小于平均值记为0.

第五步 计算哈希值

将上一步的比较结果, 组合在一起, 就构成了一个64位的二进制整数, 这就是这张图片的指纹.

第六步 对比图片指纹

得到图片的指纹后, 就可以对比不同的图片的指纹, 计算出64位中有多少位是不一样的. 如果不相同的数据位数不超过5, 就说明两张图片很相似, 如果大于10, 说明它们是两张不同的图片.

参考文:https://blog.csdn.net/weixin_34066347/article/details/86363431

转载于:https://www.cnblogs.com/daizhipeng/p/11102685.html

淘宝图片指纹匹配功能c#实现相关推荐

  1. CDN工作原理及其在淘宝图片业务中的应用

    淘宝的图片访问,有98%的流量都走了CDN缓存,只有2%会回源到源站,节省了大量的服务器资源. 但是,如果在用户访问高峰期,图片内容大批量发生变化,大量用户的访问就会穿透cdn,对源站造成巨大的压力. ...

  2. IDEMIA被选中提供其下一代指纹匹配引擎,成为英国内政部生物识别计划的一部分

    增强身份识别领域的全球领导者IDEMIA已获得英国内政部生物识别(HOB)计划授予的五年期合同,提供全新的指纹匹配服务(Fingerprint Matcher Service).此次合同授予是HOB战 ...

  3. 用于传感器互操作性问题的指纹匹配系统的大规模研究

    用于传感器互操作性问题的指纹匹配系统的大规模研究 文摘 指纹是一种常用的生物特征识别方式,被执法机构和商业应用广泛用于身份验证.现有指纹匹配方法的设计基于以下假设:在注册和验证过程中,使用同一传感器捕 ...

  4. Android 6.0 指纹识别功能学习(一)----阿冬专栏!!!

    转载自:http://www.cnblogs.com/changyuet/p/5535082.html 由于毕设需要设计增强的身份认证(生物特征认证方式),所以需要学习指纹识别相关的android6. ...

  5. 淘宝图片加载不出来案件

    突发案件: 突然就有这么一天,我在上淘宝的时候,淘宝店铺的美工图片加载不出来了.虽然我不是店家,也不急着买什么东西,但是自身的性格让我非常想修复这个问题,于是开始了我的"寻找淘宝图片加载不出 ...

  6. 搜苹果ipad版_苹果测试无刘海 iPhone / 三星 S10 指纹支付功能被关停 / 天外世界评分解禁...

    2020 iPhone 刘海更小.天线带更宽据 Ben Geskin 透露,苹果正在测试不同的 Face ID 原型模组,这可能意味着明年 iPhone 的刘海会更小.Geskin 还提到,2020 ...

  7. RequestMapping || @RequestMapping 模糊匹配功能

    一个方法处理一个请求 RequestMapping的其他属性 @RequestMapping 模糊匹配功能

  8. 从淘宝 UWP 的新功能 -- 比较页面来谈谈 UWP 的窗口多开功能

    原文:从淘宝 UWP 的新功能 -- 比较页面来谈谈 UWP 的窗口多开功能 前言 之前在 剁手党也有春天 -- 淘宝 UWP "比较"功能诞生记 这篇随笔中介绍了一下 UWP 淘 ...

  9. 安卓程序添加指纹解锁功能

    前言 指纹解锁技术成为当前验证用户信息的重要手段,基本上当前手机都配置了指纹解锁.当开发的APP需要加密验证时可以考虑添加系统指纹解锁功能. 添加指纹解锁功能步骤很简单,大致过程如下: 1 添加权限 ...

  10. ace unlock 苹果解锁_Apple Watch将支持指纹识别功能?苹果最新专利曝光

    在全面屏的时代,指纹识别从Home键上搬迁至了屏幕上,毕竟机身的每一寸土地都太过金贵.而对智能可穿戴设备而言,更是如此.不过近日外媒曝光了一份苹果的专利图,显示苹果可能会给自家的Apple Watch ...

最新文章

  1. springboot视图解析器
  2. python数据分析是什么意思_python数据分析有什么用
  3. ITK:生成随机图片
  4. mysql报196271错误_微软补丁造成MYSQL及Windows经常连接失败解决方法
  5. win7系统怎样打开音频服务器,win7系统打开音频管理器的具体教程
  6. 【C#学习笔记】使用C#中的Dispatcher
  7. 前端面试之前要准备的那些事
  8. 看!闲鱼在ServiceMesh的探索和实践
  9. 英特尔® 硬件加速执行管理器安装指南 — Mac OS X*
  10. 如何在.NET中启用程序集绑定失败日志记录(Fusion)
  11. Vue 当中的计算属性computed
  12. js--属性和方法(私有/公有)
  13. 一个借口几万条数据但是只返回十条_爬虫实践之爬取10000条菜谱数据
  14. 人工智能原理与方法作业1
  15. 使用vue3.0仿cnode网站
  16. Java 打印程序设计
  17. Topaz Mask AI 人工智能抠图插件
  18. 电脑连接SONY蓝牙耳机没有声音
  19. 电脑电话,怎么用电脑打电话
  20. 计算机思维在化学上的应用,【科学思维】化隐性为显性思想在化学中的应用

热门文章

  1. JavaScript 每日一题 #10
  2. html自动补位的功能,js中位数不足自动补位扩展padLeft、padRight实现代码
  3. 利率浮动幅度bp什么意思,浮动利率bps换算百分比
  4. pythonspiit函数_python专题高阶函数
  5. Writeup-GKCTF-Misc题:Harley Quinn
  6. Java手机验证码的实现
  7. 【NOIP 2011】 观光公交
  8. dede php 输出html,DedeCMS系统,后台模板生成HTML页面时,不能解析dede标签,直接输出dede标签乱码的问题。...
  9. 按键精灵输出中文乱码,输出不是?,输出如Ö16:48ÀÂ
  10. SSD硬盘SATA接口和M.2接口区别(详细)总结