close all;
clear all;
%% 预处理
% 导入数据
imageDir = 'C:\Users\lenovo\Desktop\卫星测试';
imds = imageDatastore(imageDir);
% 灰度图转化
images = cell(1, numel(imds.Files));
for i = 1:numel(imds.Files)
I = readimage(imds, i);
if ndims(I)==3
images{i} = rgb2gray(I);
else
images{i} = I;
end
end
% 导入相机参数,相机定标
[iR, iC] = size(images{i});
IntrinsicMatrix = [(iR+iC)/2 0 0;
0 (iR+iC)/2 0;
iR/2 iC/2 1];
cameraParams = cameraParameters('IntrinsicMatrix',IntrinsicMatrix);
%% 参考帧(第一帧)提取参考稀疏点,主要用来估计相机外参
% 1、镜面扭曲还原
I = undistortImage(images{1}, cameraParams);
% 2、提取特征
border = 5;
roi = [border, border, size(I, 2)- 2*border, size(I, 1)- 2*border];
prevPoints = detectSURFFeatures(I); %, 'NumOctaves', 8, 'ROI', roi);
prevFeatures = extractFeatures(I, prevPoints, 'Upright', true);
% 3、构造测量集
vSet = viewSet;
viewId = 1;
vSet = addView(vSet, viewId, 'Points', prevPoints, 'Orientation', ...
eye(3, 'like', prevPoints.Location), 'Location', ...
zeros(1, 3, 'like', prevPoints.Location));
%% 后继帧操作
for i = 2:numel(images)
% Undistort the current image.
I = undistortImage(images{i}, cameraParams);
% Detect, extract and match features.
currPoints = detectSURFFea