给定一个图像块,找出它在原图中的位置,无缩放,无旋转

----------------------------------------------------------------------------------------------

之前一直以为这个是个很难的事,主要是担心可能运算量会很大,要把图像块在整个图里滚一遍。

简单的思想是,为了提高速度,对图像块中心点和周围的几个点 在原图中移动比对,

如果误差小于阈值则加入可能的位置列表,

如果可能的位置过多(比如20个),则直接退出

如果要提高匹配准确率,可以增多比对的点数

Matlab

close all;
clear all;
clc; im = imread('1.jpg');
im=imresize(im,0.5);
figure; imshow(im); [m,n,c]=size(im);
im = im2double(im); %点击选取一个图像块
[c, r] = ginput(1);
c = floor(c);
r = floor(r); %图像块宽度
w = 6;
block_im = im(r-w:r+w, c-w:c+w, :); err = 0; %可能匹配的位置
pnts = []; %匹配的图像块太多
too_many_match = 0; for i=w:m-wfor j=w:n-w        err = sum(abs(im(i,j,:)-block_im(w, w,:)));           if  err > 0.01continue; enderr = sum(abs(im(i-3,j-3,:)-block_im(w-3, w-3,:)));           if  err > 0.01continue; enderr = sum(abs(im(i+3,j+3,:)-block_im(w+3,w+3,:)));if  err > 0.01continue; enderr = sum(abs(im(i-3,j+3,:)-block_im(w-3,w+3,:)));if  err > 0.01continue; enderr = sum(abs(im(i+3,j-3,:)-block_im(w+3,w-3,:)));if  err > 0.01continue; enderr = sum(abs(im(i+1,j-3,:)-block_im(w+1,w-3,:)));if  err > 0.01continue; endpnts = [pnts; [i,j]];%如果匹配的点太多,那么就要重新选择图像块if size(pnts,1) > 20too_many_match  = 1; break;end end if 1 == too_many_match  break;end
end %pnts
[m,n,c]=size(im)
hold on;
len = size(pnts,1)for i=1:lenplot(pnts(i,2), pnts(i,1), 'ro');
end figure; imshow(block_im);  title('图像块');

这个性能太差了:

据说用opensurf来做图像相似度比对是比较好的

Matlab查找图像块在原图中的位置相关推荐

  1. python 对论文插图制作局部放大图并在原图中相同位置加边框

    python 对论文插图制作局部放大图并在原图中相同位置加边框: 全部代码如下: import cv2 import numpy as npimage_path = "E:\\仿真资料\\论 ...

  2. aircv 安装_Python 通过截图匹配原图中的位置(opencv)实例

    安装依赖 1)下载安装opencv-2.4.9,并将cv2.pyd拷贝到python安装目录的site-package下 2)pip install numpy 3)pip install aircv ...

  3. python找出在原图中的位置_Python 通过截图匹配原图中的位置(opencv)实例

    安装依赖 1)下载安装opencv-2.4.9,并将cv2.pyd拷贝到python安装目录的site-package下 2)pip install numpy 3)pip install aircv ...

  4. python找出在原图中的位置_用python简单处理图片(4):图像中的像素访问

    前面的一些例子中,我们都是利用Image.open()来打开一幅图像,然后直接对这个PIL对象进行操作.如果只是简单的操作还可以,但是如果操作稍微复杂一些,就比较吃力了.因此,通常我们加载完图片后,都 ...

  5. Positional Encodings in ViTs 近期各视觉Transformer中的位置编码方法总结及代码解析 1

    Positional Encodings in ViTs 近期各视觉Transformer中的位置编码方法总结及代码解析 最近CV领域的Vision Transformer将在NLP领域的Transo ...

  6. matlab实现余弦相似度_MATLAB在图像相似度分析中的应用

    MATLAB 在图像相似度分析中的应用 杨涛 ; 董洁 ; 白倩靖 [期刊名称] <电脑迷> [年 ( 卷 ), 期] 2017(000)008 [摘要] 近日 , 微博热门话题 &quo ...

  7. 使用matlab对图像进行傅里叶变换

    使用matlab对图像进行傅里叶变换 原图: (0) 代码: I=imread('1.jpg'); I=rgb2gray(I); I=im2double(I); F=fft2(I); F=fftshi ...

  8. 一张图图片分块html,神奇图片分割软件怎么将一张图片分割为多个图像块?

    神奇图片分割软件作为一款专业的图片分割软件,拥有按行列数平均分割及按尺寸分割两种方式,能够轻松将图片分割成若干份,并且市面上主流的文件图片格式它都支持.那么,神奇图片分割软件怎么将一张图片分割为多个图 ...

  9. 查找字符位置_Excel中查找字符第N次出现的位置信息,换个思路其实很简单

    在日常的工作中,查找特定字符在一个字符串中的位置是非常常见的操作,但是如果熟悉excel的朋友应该都知道,在Excel中提供的字符查找函数FIND中,无法设置出现次数这个参数.今天,我们就给大家讲解一 ...

  10. python如何在列表中查找元素位置_查找元素在list中的位置以及折半查询

    问题 查找某个值在list中的位置 解决思路 能够用折半查询的方法解决此问题. 解决(Python) #! /usr/bin/env python #coding:utf-8 #折半查找某个元素在li ...

最新文章

  1. VBS编程基础教程 (第2篇)
  2. vector 不是模板
  3. android xml解析的三种方式
  4. 丰富“WinForms” 的一个别样项目(学生管理)
  5. 【华为云技术分享】云图说|超赞!终于有人把云存储“三兄弟”讲清楚了!
  6. SSM框架的基本概念
  7. 电脑的基础知识_电脑的基础知识大全,你确定都知道?
  8. game with probability problem
  9. Android presentation
  10. Linux内核和用户空间数据交互copy_to_user和copy_from_user
  11. 初用vue遇到的一些问题
  12. 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5
  13. mysql复制表结构(包括索引)
  14. MNE从头创建raw结构
  15. 微信小程序实现点击按钮退出功能
  16. 驱动开发:内核层InlineHook挂钩函数
  17. vscode好看的吸血鬼主题设置
  18. 光盘驱动计算机无法识别,win7系统读不出光盘怎么办 win7电脑光盘不能被识别的解决方法...
  19. Win10 x64 专业版 Tensorflow Keras 仅CPU Anaconda3安装配置(1)
  20. eclipse安装Gradle

热门文章

  1. 骗分技巧————《OI骗分导论》
  2. 鼎立MOS测试设备调试
  3. 如何用计算机函数计算房租,Excel商铺租金模板,租金每两年递增5%,具备收租期、租赁起止期、单价函数自动计算功能...
  4. 金蝶K3服务器安装与配置方法详细图解
  5. GCN在交通流预测方面的相关文章
  6. 康佳电视应用助手服务器连接超时,康佳电视程序无响应怎么办?详细解决方法...
  7. 软件定义和硬件重构知多少(三)
  8. 设计一个家庭记账管理系统(Java)
  9. java ip地址定位,Java根据IP地址定位位置
  10. IPv4 + IPv6 = IPv10?是的,IPv10就是IPV4 + IPv6!