当前位置: 首页 > news >正文

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

       博主简介: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实现效果

        原图:

初步匹配效果:

去除误匹陪效果:

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 探索LangChain的JSON加载器:轻松处理JSON和JSONL数据
  • STM32 如何生成随机数
  • Java或者前端 实现中文排序(调API的Demo)
  • Gateway学习笔记
  • 微信小程序实现转盘抽奖,可以自定义编辑奖项列表
  • 网络安全-LD_PRELOAD,请求劫持
  • docker安装部署时的资源文件路径问题以及使用pecl工具简洁方便地安装php扩展
  • 在 Mac 上安装双系统会影响性能吗,安装双系统会清除数据吗?
  • 【Python】谷歌浏览器总是自动更新,使用selenium跟chromedriver版本不匹配怎么办?
  • 【基于C++的产品入库管理系统】
  • 文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《基于模型-数据混合驱动的区域能源互联网韧性在线评估》
  • chattr:修改文件的特殊属性
  • 【BFS专题】— 解决拓扑排序问题
  • 合宙Air201模组LuatOS:PWRKEY控制,一键解决解决关机难问题
  • 数据权限的设计与实现系列9——前端筛选器组件Everright-filter集成框架开发2
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • Android交互
  • Cumulo 的 ClojureScript 模块已经成型
  • Idea+maven+scala构建包并在spark on yarn 运行
  • Java 内存分配及垃圾回收机制初探
  • JavaScript设计模式与开发实践系列之策略模式
  • Laravel 实践之路: 数据库迁移与数据填充
  • LeetCode算法系列_0891_子序列宽度之和
  • PV统计优化设计
  • Vue官网教程学习过程中值得记录的一些事情
  • Zsh 开发指南(第十四篇 文件读写)
  • 从零开始在ubuntu上搭建node开发环境
  • 聊聊sentinel的DegradeSlot
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 网络应用优化——时延与带宽
  • 用jQuery怎么做到前后端分离
  • ​你们这样子,耽误我的工作进度怎么办?
  • ​用户画像从0到100的构建思路
  • # Apache SeaTunnel 究竟是什么?
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #### golang中【堆】的使用及底层 ####
  • ()、[]、{}、(())、[[]]命令替换
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第1节 (全局数据、栈和堆)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (不用互三)AI绘画工具应该如何选择
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (微服务实战)预付卡平台支付交易系统卡充值业务流程设计
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (轉貼) UML中文FAQ (OO) (UML)
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .htaccess 强制https 单独排除某个目录
  • .mysql secret在哪_MYSQL基本操作(上)
  • .net 7 上传文件踩坑
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .Net 路由处理厉害了
  • .NET 指南:抽象化实现的基类