【图像匹配】基于Harris算法的图像匹配,matlab实现

news2024/12/28 18:24:35

       博主简介:matlab图像代码项目合作(扣扣:3249726188

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

        本次案例是基于基于Harris算法的图像匹配,用matlab实现。

 一、案例背景和算法介绍

        前面的博客文章我们介绍图像处理的一个重要领域算法:图像匹配。图像匹配的算法比较多,有基于SIFT、SURF、Harris等特征的匹配算法,这次介绍的算法是Harris匹配算法。前期介绍的算法如下:

        SIFT匹配:基于SIFT算法的图像匹配(【图像匹配】基于SIFT算法的图像匹配,matlab实现-CSDN博客)

       SURF匹配:基于SURF算法的图像匹配(【图像匹配】基于SURF算法的图像匹配,matlab实现-CSDN博客)

        下面简要介绍一下Harris算法。

Harris角点检测算法的基本原理‌

Harris角点检测算法是由‌Chris Harris和‌Mike Stephens在1988年提出的,它通过计算图像中每个像素点的自相关矩阵来确定角点。该算法使用一个固定窗口在图像上滑动,比较滑动前后的灰度变化,如果灰度变化显著,则认为该位置为角点。

Harris角点检测算法的步骤

  1. 将图像转换为灰度图像。
  2. 计算图像的梯度,获取像素的水平和垂直梯度。
  3. 计算每个像素的二阶矩阵(自相关矩阵)。
  4. 计算每个像素的响应函数值(角点响应函数)。
  5. 应用非极大值抑制,抑制非极大值点。
  6. 根据阈值筛选出角点。

Harris角点检测算法的优点

  • 旋转不变性‌:Harris角点检测算法具有旋转不变性,即旋转后的图像仍然能够准确检测到角点。
  • 对亮度和对比度的变化不敏感‌:该算法对亮度和对比度的变化具有较好的鲁棒性。
  • 计算简单‌:Harris角点检测算法的计算过程相对简单,且提取的角点特征均匀合理,性能稳定。

Harris角点检测算法的应用场景

  • 摄像机标定‌:通过检测图像中的角点,可以用于摄像机的标定,提高摄像机的精度。
  • 虚拟场景重建‌:在虚拟场景重建中,角点检测可以帮助构建三维模型。
  • 运动估计‌:在运动估计中,角点检测可以用于跟踪物体的运动。
  • 图像配准‌:在图像配准中,角点检测可以帮助实现图像之间的对齐。

     关于Harris算法的网上资料也是非常多,这里同样不做详细介绍。这里概述一下匹配的主要步骤,跟SIFT匹配类似,主要是特征算法不同,后续匹配步骤是一致的:

        1、获取Harris特征,得到特征之后,接下来就是匹配

        2、计算特征距离值,如符合一定规则(如设置距离少于某个值),则认为符合初步匹配

        3、利用RANSAC算法去除误匹配

        主要的matlab主函数代码如下:

clear
clc
close all

% 读取原图
img1 = imread('hall1.jpg');
img2 = imread('hall2.jpg');

% 显示
figure
subplot(1,2,1)
imshow(img1);
title('原图1');
subplot(1,2,2)
imshow(img2);
title('原图2');

% 转换为double数据
img1Dup=rgb2gray(img1);
img1Dup=double(img1Dup);
img2Dup=rgb2gray(img2);
img2Dup=double(img2Dup);

% Harris算法角点提取
[locs1] = Harris(img1Dup);
[locs2] = Harris(img2Dup);

% 初步匹配,用 NCC 算法寻找匹配点
[matchLoc1 matchLoc2] =  findCorr(img1Dup,img2Dup,locs1, locs2);

% 用 RANSAC 去除误匹配点
[H inlierIdx] = estHomography(img1Dup,img2Dup,matchLoc2',matchLoc1');

       下面看看具体的matlab实现效果。

        完成匹配后,可以根据匹配效果做图像拼接操作了,这个后续的算法再做介绍。

二、Matlab实现效果

        原图:

初步匹配效果:

去除误匹陪效果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2143582.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

无人机培训机构技术股份合作探讨

随着无人机技术的飞速发展,其在航拍、农业、物流、环境监测、应急救援等多个领域展现出巨大潜力,市场对无人机专业人才的需求急剧增加。鉴于此,多家致力于无人机培训教育的机构决定携手合作,通过技术股份合作模式,共同…

基于RBAC的实验室预约系统中授权模块的研究与实现

博主介绍:专注于Java vue .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用 感兴趣的…

kali——foremost的使用

目录 前言 使用方法 前言 foremost工具是一个在Kali Linux中用于数字取证和数据恢复的强大工具。 使用方法 foremost -t all -i 数据包绝对路径修复好的数据包,将会自动保存在output目录里。

7--SpringBoot-后端开发、原理

配置优先级 SpringBoot 项目当中支持的三类配置文件: application.properties application.yml application.yaml 配置文件优先级排名(从高到低): 1. properties配置文件 2. yml配置文件 3. yaml配置文件 在SpringBoot项目当…

Effective C++笔记之二十三:非void函数不写return

一.main函数 Qt Creator查看汇编的步骤如下 上图是g编译器下的汇编 eax就是main()函数的返回值 如果删掉return 0; 可以发现编译器还是把eax的值设为了0,由此可见,即使在main函数中不写return 0,编译器还是会默认添加个return 0。…

Java 入门指南:JVM(Java虚拟机)垃圾回收机制 —— 垃圾收集器

文章目录 垃圾回收机制Stop-the-World垃圾收集器垃圾收集器分类Serial 收集器Serial Old 收集器ParNew 收集器Parallel Scavenge 收集器Parallel Old 收集器CMS 收集器CMS 收集器缺点 G1 收集器G1 收集器特点G1 收集器的分代理念G1 收集器运作过程 垃圾回收机制 垃圾回收&…

二、Servlet

文章目录 1. Servlet技术1.1 什么是Servlet1.2 手动实现 Servlet 程序1.3 url 地址到 Servlet 程序的访问1.4 Servlet 的生命周期1.5 GET 和 POST 请求的分发1.6 通过继承 HttpServlet 实现 Servlet 程序1.7 使用 IDEA 创建 Servlet 程序1.8 Servlet 类的继承体系 2. ServletCo…

计算机人工智能前沿进展-大语言模型方向-2024-09-13

计算机人工智能前沿进展-大语言模型方向-2024-09-13 1. OneEdit: A Neural-Symbolic Collaboratively Knowledge Editing System Authors: Ningyu Zhang, Zekun Xi, Yujie Luo, Peng Wang, Bozhong Tian, Yunzhi Yao, Jintian Zhang, Shumin Deng, Mengshu Sun, Lei Liang, Z…

有机水果蔬菜检测系统源码分享

有机水果蔬菜检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer…

NPM如何切换淘宝镜像进行加速

什么是淘宝镜像NPM? 淘宝镜像NPM和官方NPM的主要区别在于服务器的地理位置和网络访问速度。淘宝镜像NPM是由淘宝团队维护的一个npm镜像源,主要服务于中国大陆用户,提供了一个国内的npm镜像源,地址为 https://registry.npmmirror.…

MySQL 事件调度器用法解析

MySQL 事件调度器用法解析 在日常的数据库运维与开发实践中,自动化执行任务是一项至关重要的需求,它极大地提升了数据库管理的效率和准确性。这些任务可能包括清理不再需要的历史数据以释放存储空间、更新汇总或统计信息以保持数据的新鲜度,…

Java-数据结构-二叉树-习题(三)  ̄へ ̄

文本目录: ❄️一、习题一(前序遍历非递归): ▶ 思路: ▶ 代码: ❄️二、习题二(中序遍历非递归): ▶ 思路: ▶ 代码: ❄️三、习题三(后序遍历非递归): ▶ 思路: …

2025年最新大数据毕业设计选题-基于Spark分析相关

选题思路 回忆学过的知识(Python、Java、Hadoop、Hive、Sqoop、Spark、算法等等。。。) 结合学过的知识确定大的方向 a. 确定技术方向,比如基于Hadoop、基于Hive、基于Spark 等等。。。 b. 确定业务方向,比如民宿分析、电商行为分析、天气分析等等。。。…

[网络层]-IP协议相关特性

IP协议 基本概念 主机 : 配有IP地址,但是不进行路由控制的设备路由器 : 既配有IP地址,又能进行路由控制节点: 主机和路由器的统称 协议头格式 4位版本(version):占四位,用于指定IP协议的版本,例如,使用IPv4,该字段就为44位首部长度: 表示IP协议首部的长度,以32位bit (4字节)…

秋招突击——9/10、9\11——算法练习——携程笔试练习——2024年秋招第一批笔试

文章目录 引言笔试准备2024年秋招研发第一批第一题第二题第二次实现 第三题第四题第五题参考实现 总结 引言 准备全力冲携程,好好做算法,去线下面试!今天就好好做做携程往年的笔试! 笔试准备 2024年秋招研发第一批 第一题 imp…

<<编码>> 第 14 章 反馈与触发器(1)--振荡器 示例电路

继电器振荡器 info::操作说明 无需操作, 保持控制开关常闭以形成振荡 如需停止振荡, 则断开控制开关 注: 要看到灯闪烁的效果, 右上角 “仿真速度” 控制杆应设置为一个较低的位置(靠左侧) 另: 因继电器内部开关跳动动画效果耗时太长, 即便设置为较低的仿真速度也无法观察到开关…

有效的对嵌入式操作系统进行消毒处理

这篇论文的标题是《Effectively Sanitizing Embedded Operating Systems》,作者是 Jianzhong Liu, Yuheng Shen, Yiru Xu, Hao Sun, Heyuan Shi, Yu Jiang。论文主要研究了嵌入式操作系统的安全性问题,并提出了一种名为 EmbSan 的嵌入式系统消毒器&#…

计算机的错误计算(九十六)

摘要 探讨 的计算精度问题。 计算机的错误计算(五十五)与(七十八)分别列出了 IEEE 754-2019 中的一些函数与运算。下面再截图给出其另外3个运算。 例1. 已知 x-0.9999999999966 . 计算 不妨在Python下计算,则有&am…

TI DSP TMS320F280025 Note11:F280025时钟系统

TMS320F280025 F280025时钟系统 ` 文章目录 TMS320F280025 F280025时钟系统TMS32F280025时钟系统框图**时钟系统框图分析**时钟源主内部振荡器(INTOSC2)用内部振荡器(INTOSC1)派生的时钟振荡器时钟(OSCCLK)系统锁相环输出时钟(PLLRAWCLK)设备时钟域系统时钟(PLLSYSCLK)CPU时钟(…

PyTorch 激活函数及非线性变换详解

激活函数是深度学习模型的重要组成部分,它们引入非线性,从而使模型能够更好地拟合复杂的数据模式。本文将详细介绍激活函数的作用、常见类型、经典应用示例,并比较它们的优缺点。 激活函数的作用 激活函数的主要作用是引入非线性变换&#…