基于harris角点和RANSAC算法的图像拼接matlab仿真

目录

1.算法运行效果图预览

2.算法运行软件版本

3.部分核心程序

4.算法理论概述

5.算法完整程序工程


1.算法运行效果图预览

2.算法运行软件版本

MATLAB2022a

3.部分核心程序

复制代码
.......................................................................
I1_harris   = func_harris(img1,3,para_harris,scales);% 使用自定义函数计算 img1 的角点响应
I2_harris   = func_harris(img2,3,para_harris,scales);% 使用自定义函数计算 img2 的角点响应
.........................................................................
% RANSAC 方法参数设定
% RANSAC 迭代次数
Miter = 500;
% 内点距离阈值
lvls  = 0.003;
% 最小内点数量要求
nums  = 10;
% RANSAC
[ransac_points,~]=func_ransac(harris_p1,harris_p2,mpoint,Miter,lvls,nums);
 
% 存储 RANSAC 匹配得到的正确匹配点坐标
Lens         =length(ransac_points);
X1_r=zeros(1,Lens);
Y1_r=zeros(1,Lens);
X2_r=zeros(1,Lens);
Y2_r=zeros(1,Lens);

for i=1:Lens
    p1=ransac_points(i,1);
    p2=ransac_points(i,2);
    X1_r(i)=x1(p1);
    Y1_r(i)=y1(p1);
    X2_r(i)=x2(p2);
    Y2_r(i)=y2(p2);
end

figure
subplot(1,2,1);
imshow(img1);
title('RANSAC匹配点')
hold on;
plot(Y1_r,X1_r,'ro');

subplot(1,2,2);
imshow(img2);
title('RANSAC匹配点')
hold on;
plot(Y2_r,X2_r,'go');
% 合成一幅图像展示 RANSAC 匹配结果
figure
img_match=[img1,img2];
imshow(img_match);
title('匹配结果')
hold on;
plot(Y1_r,X1_r,'rx','LineWidth',1,'MarkerSize',8);
plot(Y2_r+size(img1,2),X2_r,'gx','LineWidth',1,'MarkerSize',8);

Xm1_ransac=X1_r; 
Ym1_ransac=Y1_r;
match1=zeros(Lens,2);
match1(:,1)=Xm1_ransac; 
match1(:,2)=Ym1_ransac;

Xm2_ransac=X2_r;
Ym2_ransac=Y2_r+size(img1,2);
match2=zeros(Lens,2);
match2(:,1)=Xm2_ransac; 
match2(:,2)=Ym2_ransac;
% 绘制匹配线段连接匹配点
for i=1:Lens
    hold on;
    plot([match1(i,2) match2(i,2)], [match1(i,1) match2(i,1)],'LineWidth',1)
end
% 计算 RANSAC 方法得到的仿射变换矩阵
H_ransac = func_affine(X2_r,Y2_r,X1_r,Y1_r);
 

%生成一张新的全景图
[I1_ransac,I2_ransac]=func_trans(img1,img2,H_ransac);

 

figure
I_ransac= I1_ransac+I2_ransac ;
imshow(I_ransac);
title('RANSAC拼接结果')
128

4.算法理论概述

Harris角点检测是一种局部特征检测方法,它寻找图像中具有显著局部曲率变化的位置,即边缘转折点或角点。主要通过计算图像窗口内的自相关矩阵M,并对其特征值进行评估。Harris响应函数H由自相关矩阵M的两个主特征值 λ1​ 和λ2​ 计算得到:

当H值较大时,窗口内像素的变化足够大,表明可能存在角点。

在图像拼接过程中,RANSAC用于在两幅图像的重叠区域找到正确的对应点对,即使数据中存在大量噪声和异常点。

1.随机选择一组候选点对作为基础模型(通常是仿射或透视变换模型),计算此模型参数。

2.应用模型参数A预测所有剩余点对是否符合模型,统计一致样本数。

3.重复步骤1和2一定次数(迭代次数T),选取一致样本数最多的模型作为最优模型。

4.设定阈值(如变换残差阈值t),确定最终的内点集合(即那些变换误差小于阈值的所有点对)。

5.使用内点集合重新估计变换参数,以提高精度。

综上所述,图像拼接流程:

  1. 在每幅图像中检测Harris角点,并提取特征描述符。
  2. 利用匹配算法(如SIFT、SURF等)在重叠区域找到对应的角点对。
  3. 应用RANSAC算法找出最优变换模型。
  4. 根据最优变换模型对一幅图像进行几何校正,使两幅图像的重叠部分对齐。
  5. 最后,对齐后的图像通过融合算法(如加权平均、高斯金字塔融合等)拼接成全景图像。

5.算法完整程序工程

OOOOO

OOO

O

相关推荐
__lost3 小时前
Python图像变清晰与锐化,调整对比度,高斯滤波除躁,卷积锐化,中值滤波钝化,神经网络变清晰
python·opencv·计算机视觉
欣然~3 小时前
借助 OpenCV 和 PyTorch 库,利用卷积神经网络提取图像边缘特征
人工智能·计算机视觉
豆豆3 小时前
day32 学习笔记
图像处理·笔记·opencv·学习·计算机视觉
白熊1883 小时前
【计算机视觉】CV实战项目 - 基于YOLOv5的人脸检测与关键点定位系统深度解析
人工智能·yolo·计算机视觉
硅谷秋水5 小时前
通过模仿学习实现机器人灵巧操作:综述(上)
人工智能·深度学习·机器学习·计算机视觉·语言模型·机器人
何大春7 小时前
【视频时刻检索】Text-Video Retrieval via Multi-Modal Hypergraph Networks 论文阅读
论文阅读·深度学习·神经网络·计算机视觉·视觉检测·论文笔记
猿饵块7 小时前
opencv--图像变换
人工智能·opencv·计算机视觉
jndingxin7 小时前
OpenCV 图形API(63)图像结构分析和形状描述符------计算图像中非零像素的边界框函数boundingRect()
人工智能·opencv·计算机视觉
知来者逆8 小时前
计算机视觉——速度与精度的完美结合的实时目标检测算法RF-DETR详解
图像处理·人工智能·深度学习·算法·目标检测·计算机视觉·rf-detr
武汉唯众智创8 小时前
高职人工智能技术应用专业(计算机视觉方向)实训室解决方案
人工智能·计算机视觉·人工智能实训室·计算机视觉实训室·人工智能计算机视觉实训室