博主简介: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角点检测算法的步骤
- 将图像转换为灰度图像。
- 计算图像的梯度,获取像素的水平和垂直梯度。
- 计算每个像素的二阶矩阵(自相关矩阵)。
- 计算每个像素的响应函数值(角点响应函数)。
- 应用非极大值抑制,抑制非极大值点。
- 根据阈值筛选出角点。
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实现效果
原图:
初步匹配效果:
去除误匹陪效果: