多分辨率找图sift和直方图

简介: 牙叔教程 简单易懂

牙叔教程 简单易懂


测试图片


小图, 从大图右下角裁剪出来的


大图, 分辨率1280X720


对大图的更改分三种


  1. 不更改大图, 这又分两种, 一种是裁剪大图右下角后再对比, 一种是不裁剪
  2. 大图保持纵横比, 缩放至70%
  3. 大图不保持纵横比, 将宽度改为1000, 高度保持原来的720


三种效果展示


1. 不更改大图, 且不裁剪大图
最佳匹配特征点的数量 = 60
找图时间: 593ms
直方图对比 = 0.9420728414825477



2. 不更改大图, 且裁剪大图
最佳匹配特征点的数量 = 63
找图时间: 210ms
直方图对比 = 0.9420728414825477



3. 大图缩放至70%
最佳匹配特征点的数量 = 10
找图时间: 330ms
直方图对比 = 0.8781176823119982



4. 宽度改为1000
最佳匹配特征点的数量 = 4
找图时间: 543ms
直方图对比 = 0.8643715691444815



环境


手机: Mi 11 Pro


Android版本: 11


Autojs版本: 9.0.10


autojs自带opencv版本: 4.5.1


总结


从以上测试来看, sift对多分辨率的找图, 效果还可以,


但也仅仅是还可以而已,实际上他只适合一部分的找图场景,


比如, 透明按钮这种, sift就不行了,


透明按钮这种用轮廓查找, 效果还稍微好点,


从时间上来看, 大图的分辨率越低, 时间消耗越短,


所以我们找图的时候, 最好对小图可能存在的区域, 进行裁剪,


以便, 提升找图效率,


并且, 我觉得光用图片特征点, 找图还是不准,


所以我又加了一个维度: 直方图,


可以辅助判断, 找到的图片是不是我们想要的图片,


还有一个问题是, 我们既要保证, 我们能找到图片,


同时还要保证, 我们找到的图片, 确实是我们要找的图片,


你不能去找到一个类似的图片给我,


举个例子: 我爱你.jpg, 我爱他.jpg,


我们要找我爱你.jpg,


从特征上来说, sift有66%的概率, 找到我爱他.jpg,


并且sift认为这张图片就是我们想要的, 但其实不是,


我们要找的是我爱你.jpg,


这也是为什么我要添加直方图比较的原因


你将学到以下知识点


  • 释放ArrayList内存
  • 获取图片直方图
  • 比较直方图
  • 不影响函数的图片参数的技巧
  • 提取图片的sift特征点
  • 比对图片特征点
  • 修改Mat实例的数据
  • 将图像匹配结果画出来
  • 查看Mat对应的图片


代码讲解

1. 读取图片
let bigImgPath = files.path(dir + "big.jpg");
// let bigImgPath = files.path(dir + "big70.jpg");
// let bigImgPath = files.path(dir + "big1000X720.jpg");
let smallImgPath = files.path(dir + "small.jpg");
let bigImg = images.read(bigImgPath);
let smallImg = images.read(smallImgPath);


2. 及时回收图片
events.on("exit", function () {
  if (bigImg && !bigImg.isRecycled()) {
    bigImg.recycle();
  }
  if (smallImg && !smallImg.isRecycled()) {
    smallImg.recycle();
  }
});


3. 找图
let findImageSift = require("./findImageSift");
let result = findImageSift(bigImg, smallImg);
log(result);


名人名言

思路是最重要的, 其他的百度, bing, stackoverflow, 安卓文档, autojs文档, 最后才是群里问问

--- 牙叔教程


声明

部分内容来自网络

本教程仅用于学习, 禁止用于其他用途




相关文章
|
计算机视觉 Python
直方图与直方图均衡化
直方图与直方图均衡化
|
6月前
|
算法 计算机视觉
图像处理之积分图应用四(基于局部均值的图像二值化算法)
图像处理之积分图应用四(基于局部均值的图像二值化算法)
554 0
|
机器学习/深度学习 传感器 算法
【图像分割】基于局部空间信息直方图模糊聚类FGFCM 实现图像图像分割附matlab代码
【图像分割】基于局部空间信息直方图模糊聚类FGFCM 实现图像图像分割附matlab代码
|
计算机视觉
灰度直方图及直方图均衡化
灰度直方图及直方图均衡化
94 0
|
资源调度 算法 机器人
图像特征提取与描述_角点特征02:SIFT算法+SURF算法
前面两节我们介绍了Harris和Shi-Tomasi角点检测算法,这两种算法具有旋转不变性,但不具有尺度不变性,以下图为例,在左侧小图中可以检测到角点,但是图像被放大后,在使用同样的窗口,就检测不到角点了。
221 0
|
API 计算机视觉 Python
OpenCV_07 直方图:灰度直方图+直方图均衡化
直方图是对数据进行统计的一种方法,并且将统计值组织到一系列实现定义好的 bin 当中。其中, bin 为直方图中经常用到的一个概念,可以译为 “直条” 或 “组距”,其数值是从数据中计算出的特征统计量,这些数据可以是诸如梯度、方向、色彩或任何其他特征。
212 0
|
API 计算机视觉
opencv之直方图比较图像相似度
对输入的两张图像计算得到直方图H1与H2,归一化到相同的尺度空间 然后可以通过计算H1与H2的之间的距离得到两个直方图的相似程度进 而比较图像本身的相似程度。
468 0
opencv之直方图比较图像相似度
|
资源调度 计算机视觉
CV10 图像模糊(均值、高斯、中值、双边滤波)
当我们只想得到感兴趣的物体时,通过图像模糊,可以将那些尺寸和亮度较小的物体过滤掉,较大的物体则易于检测。除了降低噪声,这就是图像平滑(模糊)的另一个重要应用:减少噪点,突出ROI,以便目标提取。
388 0
|
编解码 资源调度 算法
CV学习笔记-尺度不变特征变换(SIFT)
CV学习笔记-尺度不变特征变换(SIFT)
545 0
CV学习笔记-尺度不变特征变换(SIFT)
|
机器学习/深度学习 算法 数据可视化
梯度直方图(HOG)用于图像多分类和图像推荐(下)
梯度直方图(HOG)用于图像多分类和图像推荐
166 0
梯度直方图(HOG)用于图像多分类和图像推荐(下)