基于SIFT特征提取的图像拼接算法matlab仿真
2023-09-11 14:15:32 时间
目录
一、理论基础
SIFT算法得到了图像中的特征点以及相应的特征描述,如何把两张图像中的特征点匹配起来呢?一般的可以使用K近邻(KNN)算法。K近邻算法求取在空间中距离最近的K个数据点,并将这些数据点归为一类。在进行特征点匹配时,一般使用KNN算法找到最近邻的两个数据点,如果最接近和次接近的比值大于一个既定的值,那么我们保留这个最接近的值,认为它和其匹配的点为good match(有Lowe在SIFT论文中提出)。
SIFT(Scale invariant feature transform),即尺度不变特征变换描述子,其可以从图像中提取稳定的特征数据,其对图像的旋转、阴影干扰、噪声干扰、移动以及空间扭曲等影响有着较好的不变性。基于SIFT的图像特征提取原理如下:
步骤一、图像转换到尺度空间。图像的尺度空间表示方式通常情况下是将图像和高斯核函数进行卷积计算,其计算公式如下:
步骤二、尺度空间极值点的计算。在SIFT算法中,一般采用差分图像来计算尺度空间极值,其计算公式如下:
二、核心MATLAB程序
function [matchLoc1,matchLoc2] = func_siftMatch(img1, img2)
[des1,loc1] = sift(img1);
[des2,loc2] = sift(img2);
distRatio = 0.8;
% For each descriptor in the first image, select its match to second image.
des2t = des2'; % Precompute matrix transpose
matchTable = zeros(1,size(des1,1));
for i = 1 : size(des1,1)
dotprods = des1(i,:) * des2t; % Computes vector of dot products
[vals,indx] = sort(acos(dotprods)); % Take inverse cosine and sort results
% Check if nearest neighbor has angle less than distRatio times 2nd.
if (vals(1) < distRatio * vals(2))
matchTable(i) = indx(1);
else
matchTable(i) = 0;
end
end
img3 = func_appendimages(img1,img2);
% Show a figure with lines joining the accepted matches.
figure('Position', [100 100 size(img3,2) size(img3,1)]);
subplot(211);
colormap('gray');
imagesc(img3);
subplot(212);
colormap('gray');
imagesc(img3);
hold on;
cols1 = size(img1,2);
for i = 1: size(des1,1)
if (matchTable(i) > 0)
line([loc1(i,2) loc2(matchTable(i),2)+cols1], ...
[loc1(i,1) loc2(matchTable(i),1)], 'Color', 'g');
end
end
title('SIFT匹配效果');
hold off;
num = sum(matchTable > 0);
fprintf('Found %d matches.\n', num);
idx1 = find(matchTable);
idx2 = matchTable(idx1);
x1 = loc1(idx1,2);
x2 = loc2(idx2,2);
y1 = loc1(idx1,1);
y2 = loc2(idx2,1);
matchLoc1 = [x1,y1];
matchLoc2 = [x2,y2];
end
三、MATLAB仿真测试结果
A09-54
相关文章
- 【故障定位】基于粒子群优化算法的故障定位及故障区段研究【IEEE33节点】(Matlab代码实现)
- 【电动车优化调度】基于模型预测控制(MPC)的凸优化算法的电动车优化调度(Matlab代码实现)
- Matlab|基于粒子群优化算法及鲁棒MPPT控制器提高光伏并网的效率
- 基于A*算法自动引导车的路径规划(Matlab代码实现)
- 基于智能优化算法的机器人路径优化(Matlab代码实现)
- 基于免疫优化算法的物流配送中心选址规划研究(Matlab实现)
- 基于智能优化算法的交通流模拟器(Matlab代码实现)
- 【车间调度】基于GA/PSO/SA/ACO/TS优化算法的车间调度比较(Matlab代码实现)
- 使用3种不同的算法从倾斜风速计中检索3个风分量(Matlab代码实现)
- 基于SUSAN算法的边缘检测方法研究(Matlab代码实现)
- 基于改进粒子群算法的微电网多目标优化调度(Matlab代码实现)
- 【负荷预测】基于改进灰狼算法(IGWO)优化的LSSVM进行负荷预测(Matlab代码实现)
- 基于天牛须(BAS)与NSGA-Ⅱ混合算法的交直流混合微电网多场景多目标优化调度(Matlab代码实现)
- 基于粒子群优化算法的冷热电联供型综合能源系统运行优化(Matlab代码实现)
- 【无人机】无人机平台的非移动 GPS 干扰器进行位置估计的多种传感器融合算法的性能分析(Matlab代码实现)
- m基于深度学习的OFDM信道估计和均衡算法误码率matlab仿真,对比了LS,MMSE以及LMMSE等传统的信道估计算法
- m基于机器学习MLP的OFDM信道估计误码率matlab仿真,对比LS和MMSE两种信道估计算法
- m基于PTS+TR的OFDM系统PAPR联合抑制算法matlab仿真
- m基于matlab的wcdma软切换算法的研究分析和仿真
- 基于GA算法的TSP最短路径搜索matlab仿真
- m基于HOG特征提取和GRNN网络的人体姿态识别算法matlab仿真,样本为TOF数据库的RGB-D深度图像
- m基于图像灰度共生矩阵纹理提取和GRNN神经网络的人口密度检测算法matlab仿真