多分辨率找图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文档, 最后才是群里问问

--- 牙叔教程


声明

部分内容来自网络

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




相关文章
|
3月前
|
计算机视觉
直方图均衡化
直方图均衡化是一种图像处理技术,通过改变图像灰度级分布,增强图像对比度。手动实现包括计算灰度直方图、像素总数、灰度分布频率、累积分布频率,然后归一化映射到新灰度级,最终得到增强对比度的图像。该方法适用于改善灰度集中或明暗对比不明显的图像,但全局处理可能导致背景干扰增强,丢失细节,且某些图像可能过度增强。局部直方图均衡化可作为改进方案。
69 1
|
3月前
|
算法 计算机视觉
使用积分图的自适应二值化算法
使用积分图的自适应二值化算法
|
11月前
|
计算机视觉 Python
直方图与直方图均衡化
直方图与直方图均衡化
|
2月前
|
算法 计算机视觉
图像处理之积分图应用四(基于局部均值的图像二值化算法)
图像处理之积分图应用四(基于局部均值的图像二值化算法)
509 0
|
3月前
|
计算机视觉
普通直方图均衡化
普通直方图均衡化。
20 2
|
9月前
SURF特征检测
SURF特征检测
45 1
|
资源调度 算法 机器人
图像特征提取与描述_角点特征02:SIFT算法+SURF算法
前面两节我们介绍了Harris和Shi-Tomasi角点检测算法,这两种算法具有旋转不变性,但不具有尺度不变性,以下图为例,在左侧小图中可以检测到角点,但是图像被放大后,在使用同样的窗口,就检测不到角点了。
170 0
|
API 计算机视觉 Python
OpenCV_07 直方图:灰度直方图+直方图均衡化
直方图是对数据进行统计的一种方法,并且将统计值组织到一系列实现定义好的 bin 当中。其中, bin 为直方图中经常用到的一个概念,可以译为 “直条” 或 “组距”,其数值是从数据中计算出的特征统计量,这些数据可以是诸如梯度、方向、色彩或任何其他特征。
151 0
|
计算机视觉
灰度直方图及直方图均衡化
灰度直方图及直方图均衡化
81 0
|
API 计算机视觉
opencv之直方图比较图像相似度
对输入的两张图像计算得到直方图H1与H2,归一化到相同的尺度空间 然后可以通过计算H1与H2的之间的距离得到两个直方图的相似程度进 而比较图像本身的相似程度。
417 0
opencv之直方图比较图像相似度