基于内容的图片检索(Content Based Image Retrieval, CBIR),也有人称之为以图搜图,是一个很老的研究领域,它是利用机器学习、模式识别、计算机视觉等相关技术对图片的内容进行分析、检测、检索的一种应用。随着近年来模式识别与机器学习的快速发展,该领域又逐渐火热起来,并涌现出很多实际可用的商业系统。

这篇文章以兴趣为导向介绍了一种简单的,无需要用到机器学习技术的搜索技术。

具体实现思路:

1.将图片缩小成16*16的大小(也可以缩小成8*8,但精确度会降低)

2.将图片转为灰度图,并计算图片像素长度/16*像素宽度/16范围内的平均灰度值,将之记录成一个灰度矩阵。

3.遍历灰度矩阵,设置一个阈值,如灰度值中点127,大于127的设置为1,小于设置为0.

4.图片库里的图片均进行以上操作,即遍历图像矩阵生成的长度为256的二进制数字符串设置为每个图片特有的‘’图片指纹‘’。

5.将新的图片进行1-4操作,然后将得到的二进制字符串与图片库中的每个图片指纹进行对比计算“汉明距离”;

6.根据“汉明距离”判断最相近的图片。

java代码及实现的效果:

public class GetImage {public String Getimage16str(String path){int[][] imgArr = cs0210.ImageEff.getImagePixArray(path);int si = imgArr.length / 16;int sj = imgArr[0].length / 16;// 计算灰度矩阵 缩小图片int[][] pha = new int[17][17];for(int i = 0 ; i < imgArr.length ; i += si){for(int j = 0 ; j < imgArr[i].length ; j += sj){int grayend = 0;for(int k = 0 ; k < si ; k++){for(int l = 0 ; l < sj ; l++){int red = (imgArr[i][j] >> 16) & 0xFF ;int green = (imgArr[i][j] >> 8) & 0xFF;int blue = (imgArr[i][j] >> 0) & 0xFF;int gray = (red + green + blue) / 3;grayend += gray;}}pha[i/si][j/sj] = grayend/(si*sj);}}String code  = "";for(int i = 0 ; i < 16; i++){for(int j = 0 ; j < 16 ; j++){int num = pha[i][j];if(num < 127){code += "0";//g.setColor(Color.WHITE);}else{code += "1";//g.setColor(Color.BLACK);}//g.fillRect(100+i*si,100+j/sj,si,sj);}}return code;}public static void main(String[] args) {GetImage GI = new GetImage();String[] strings = new String[5];String str1 = GI.Getimage16str("C:\\Users\\ch\\Desktop\\fj2.png");String str2 = GI.Getimage16str("C:\\Users\\ch\\Desktop\\gettargetimage\\fj1.png");String str3 = GI.Getimage16str("C:\\Users\\ch\\Desktop\\gettargetimage\\fj2.png");String str4 = GI.Getimage16str("C:\\Users\\ch\\Desktop\\gettargetimage\\fj3.png");String str5 = GI.Getimage16str("C:\\Users\\ch\\Desktop\\gettargetimage\\fj4.png");String str6 = GI.Getimage16str("C:\\Users\\ch\\Desktop\\gettargetimage\\fj5.png");String str7 = GI.Getimage16str("C:\\Users\\ch\\Desktop\\gettargetimage\\fj6.png");//System.out.println(str1);MinStrExchange mse = new MinStrExchange();int test = mse.MinStrExc(str1,str2);int test2 = mse.MinStrExc(str1,str3);int test3 = mse.MinStrExc(str1,str4);int test4 = mse.MinStrExc(str1,str5);int test5 = mse.MinStrExc(str1,str6);int test6 = mse.MinStrExc(str1,str7);System.out.println(test);System.out.println(test2);System.out.println(test3);System.out.println(test4);System.out.println(test5);System.out.println(test6);}
}

public class MinStrExchange {public int MinStrExc(String str1, String str2){int[][] matrix = new int[str1.length()+1][str2.length()+1];matrix[0][0] = 0;for(int i = 1;i<matrix.length;i++){matrix[i][0]=i;}for(int i = 1;i<matrix[0].length;i++){matrix[0][i]=i;}for(int i = 1;i<matrix.length;i++){for(int j = 1;j<matrix[0].length;j++){int zuo=matrix[i][j-1]+1;int shang = matrix[i-1][j]+1;int equal = 0;if(str1.charAt(i-1)!=str2.charAt(j-1)){equal = 1;}int zuoshang = matrix[i-1][j-1]+equal;matrix[i][j] = Math.min(Math.min(zuo,shang),zuoshang);}}int exchangenumber = matrix[str1.length()][str2.length()];return exchangenumber;}
}

实现效果:

图片库

需要搜索的图片

结果:

可见原图差异最小,基本为0。

简单版的相似图片搜索原理相关推荐

  1. Google 以图搜图 - 相似图片搜索原理 - Java实现

    前阵子在阮一峰的博客上看到了这篇<相似图片搜索原理>博客,就有一种冲动要将这些原理实现出来了. Google "相似图片搜索":你可以用一张图片,搜索互联网上所有与它相 ...

  2. 以图搜图 - Google 相似图片搜索原理 - Java实现

    转自:http://blog.csdn.net/luohong722/article/details/7100058 前阵子在阮一峰的博客上看到了这篇<相似图片搜索原理>博客,就有一种冲动 ...

  3. 相似图片搜索原理二(phash—c++实现)

    前段时间介绍过相似图片搜索原理一(ahash) http://blog.csdn.net/lu597203933/article/details/45101859,它是基于内容检索最简单的一种:这里介 ...

  4. Google 以图搜图 - 相似图片搜索原理 - Java实现 (转)

    前阵子在阮一峰的博客上看到了这篇<相似图片搜索原理>博客,就有一种冲动要将这些原理实现出来了. Google "相似图片搜索":你可以用一张图片,搜索互联网上所有与它相 ...

  5. 相似图片搜索原理一(ahash—c++实现)

    ahash,全称叫做average hash,应该是phash(perceptual hash, 感知哈希)算法的一种.是基于图像内容搜索最简单的一种(search image by image),因 ...

  6. 相似图片搜索原理介绍

    相似图片搜索的三种哈希算法 标签:  相似 图片 搜索 | 发表时间:2013-02-28 20:32 | 作者:nash_ 分享到: 出处:http://blog.csdn.net 想必大家都用go ...

  7. 相似图片搜索原理三(颜色直方图—c++实现)

    图像的颜色直方图可以用于图像检索,适应有相同色彩,并且可以有平移.缩放.旋转不变性的图像检索,当然了这三大特点不如sift或者surf稳定性强,此外最大的局限就是如果形状内容一样,但色彩不一,结果是搜 ...

  8. MATLAB中计算图像哈希,数字图像处理算法及原理(三):相似图片搜索(平均哈希算法)...

    这里的关键技术叫做"感知哈希算法(aHash)"ash algorithm),它的作用是对每张图片生成一个"指纹"(fingerprint)字符串,然后比较不同 ...

  9. 图片搜索 拍立淘 按图搜索以图搜索 图搜商品 同款搜索商品

    图片搜索 拍立淘 按图搜索 以图搜图 图搜商品 同款搜索 相关资源收集 一.图片搜索介绍 图片搜索主要有以下相关应用: 1.以图搜图 以图搜图,是通过搜索图像文本或者视觉特征,为用户提供互联网上相关图 ...

最新文章

  1. 字符串匹配算法 -- AC自动机 基于Trie树的高效的敏感词过滤算法
  2. 本地Yum仓库搭建部署
  3. 从0开始学习GitHub系列之「Git 速成」
  4. linux查看服务器设备信息命令dmidecode
  5. 怎么复制远程服务器上的文件夹,Linux系统复制文件/文件夹到远程服务器
  6. SAP Shipping address页面点了continue后的网络请求
  7. 在.NET Core 中使用Quartz.NET
  8. 【杭电多校2020】Minimum Index【Lyndon Word】
  9. bdf比特数字基金_第四届世界数字经济大会,比特元BTY作为协办方参与
  10. pod trunk push --verbose 失败的原因总结
  11. ElasticSearch 2 (34) - 信息聚合系列之多值排序
  12. 夏令营讲课内容整理 Day 6 Part 3.
  13. 不能为属性:[commandName]找到setter 方法
  14. wps里面函数怎么使用_wps表格函数及函数简单使用
  15. MFC的消息处理模式
  16. 【转】android builder.setPositiveButton处 报错
  17. APP定制开发的优势
  18. strstr strcmp
  19. 版权所有者删除链接要求大部分被尊重 谷歌去年共删3.45亿个侵权
  20. 滑铁卢计算机专业世界最新排名,滑铁卢大学计算机专业全球排名

热门文章

  1. STM32实现自定义HID复合设备
  2. AI医学诊断基础-CT扫描、核磁共振成像(MRI)、拍X光、拍胸片、做B超/彩超等常规检查的介绍、原理、医学影像示例(持续跟新和答疑。。。)
  3. Glide 加载矩形圆角图片
  4. 【网页图标】favicon.ico文件的设置
  5. Proxifier代理指定程序到fiddler
  6. VScode终端配置bash.git(默认),terminal.integrated.shell:windows路径查找不到前提下
  7. [渝粤教育] 首都师范大学 走进舞蹈艺术 参考 资料
  8. uestudio自动补全html代码,UEStudio Suite,强大的代码编辑工具套件
  9. H5+echarts模拟全国程序员可视化大数据【附完整源码】
  10. 2021-08-11