0
点赞
收藏
分享

微信扫一扫

【图像配准】基于sift算法实现电路板图像配准附matlab代码

1 简介

SIFT即尺度不变特征变换,是用于图像处理领域的一种描述。这种描述具有尺度不变性,可在图像中检测出关键点,是一种局部特征描述子。 1 SIFT算法特点: (1)具有较好的稳定性和不变性,能够适应旋转、尺度缩放、亮度的变化,能在一定程度上不受视角变化、仿射变换、噪声的干扰。 (2)区分性好,能够在海量特征数据库中进行快速准确的区分信息进行匹配 (3)多量性,就算只有单个物体,也能产生大量特征向量 (4)高速性,能够快速的进行特征向量匹配 (5)可扩展性,能够与其它形式的特征向量进行联合

2 SIFT算法实质 在不同的尺度空间上查找关键点,并计算出关键点的方向。 【图像配准】基于sift算法实现电路板图像配准附matlab代码_特征向量【图像配准】基于sift算法实现电路板图像配准附matlab代码_数据_02 3 SIFT算法实现特征匹配主要有以下三个流程: (1)提取关键点:关键点是一些十分突出的不会因光照、尺度、旋转等因素而消失的点,比如角点、边缘点、暗区域的亮点以及亮区域的暗点。此步骤是搜索所有尺度空间上的图像位置。通过高斯微分函数来识别潜在的具有尺度和旋转不变的兴趣点。 (2)定位关键点并确定特征方向:在每个候选的位置上,通过一个拟合精细的模型来确定位置和尺度。关键点的选择依据于它们的稳定程度。然后基于图像局部的梯度方向,分配给每个关键点位置一个或多个方向。所有后面的对图像数据的操作都相对于关键点的方向、尺度和位置进行变换,从而提供对于这些变换的不变性。 (3)通过各关键点的特征向量,进行两两比较找出相互匹配的若干对特征点,建立景物间的对应关系。

2 部分代码

function [f ,inlierIdx] = ransac( img1,img2,x,y)
ransacCoef.minPtNum = 4;%模型最少数据个数
ransacCoef.iterNum = 1500;%算法的迭代次数
ransacCoef.thDist = 3;%用于决定数据是否适应于模型的阀值
ransacCoef.thInlrRatio = .1;
minPtNum = ransacCoef.minPtNum;
iterNum = ransacCoef.iterNum;
thInlrRatio = ransacCoef.thInlrRatio;
thDist = ransacCoef.thDist;
ptNum = size(x,2);
thInlr = round(thInlrRatio*ptNum);
inlrNum = zeros(1,iterNum);
fLib = cell(1,iterNum);
for p = 1:iterNum
%1 repeated sample 4 points
sampleIdx = randp(ptNum,minPtNum);
%2 compute a homography from the points
f1 = solvehomo(x(:,sampleIdx),y(:,sampleIdx));
%3 map all points using homography and calculate the distance
dist = calcdist(f1,x,y);
inlier1 = find(dist < thDist);
inlrNum(p) = length(inlier1);
if length(inlier1) < thInlr, continue; end
%4 compute a least squares using All the inliers ,if its inlier
% ration is bigger than threshold Inlier
fLib{p} =solvehomo(x(:,inlier1),y(:,inlier1));
end
%5 find the Homography with the most outlier
[val1,idx] = max(inlrNum);
f = fLib{idx};
dist = calcdist(f,x,y);
inlierIdx = find(dist < thDist);
% Create a new image showing the two images side by side.
img3 = append(img1,img2);
% Show a figure with lines joining the accepted matches.
figure('Position', [100 100 size(img3,2) size(img3,1)]);
colormap('gray');
imagesc(img3);
title('RANSAC精匹配');
hold on;
cols1 = size(img1,2);
fprintf('after using RANSAC %d matches left.\n',size(inlierIdx,2) );
for i = 1: size(inlierIdx,2)
line([y(1,inlierIdx(i)) x(1,inlierIdx(i))+cols1], ...
[y(2,inlierIdx(i)) x(2,inlierIdx(i))], 'Color', 'b');
end
hold off;
end

3 仿真结果

【图像配准】基于sift算法实现电路板图像配准附matlab代码_特征向量_03

【图像配准】基于sift算法实现电路板图像配准附matlab代码_图像处理_04

【图像配准】基于sift算法实现电路板图像配准附matlab代码_特征向量_05

4 参考文献

[1]陈志雄. 基于图像配准的SIFT算法研究与实现[D]. 武汉理工大学.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

【图像配准】基于sift算法实现电路板图像配准附matlab代码_图像处理_06



举报

相关推荐

0 条评论