第 1 部分:128*128 图像上的对齐代码——这部分工作正常
images = dir('*.jpg');
[cs,index] = sort_nat({images.name});
frame_number = 1;
movMean = imresize(imread(cs{frame_number}),[128,128]);
imgB = movMean;
imgBp = imgB;
correctedMean = imgBp;
ii = 2;
Hcumulative = eye(3);
movMean2 = imresize(imread(cs{frame_number}),[1024,1024]);
imgB2 = movMean2;
imgBp2 = imgB2;
correctedMean2 = imgBp2;
while ii < length(images)
% Read in new frame
imgA = imgB; %
imgAp = imgBp; %
imgB = imresize(imread(cs{ii}),[128,128]);
imgB2 = imresize(imread(cs{ii}),[1024,1024]);
% Estimate transform from frame A to frame B, and fit as an s-R-t
H = cvexEstStabilizationTform(imgA,imgB);
if isempty(H)
break
end
HsRt = cvexTformToSRT(H);
Hcumulative = HsRt * Hcumulative;
imgBp = imwarp(imgB,affine2d(Hcumulative),'OutputView',imref2d(size(imgB)));
imwrite(imgBp,[cs{ii},'_aligned.jpg'])
ii = ii+1;
end
第 2 部分:修改代码以将转换重新映射到 1024*104 图像 -- 无法成功重新映射
images = dir('*.jpg');
[cs,index] = sort_nat({images.name});
frame_number = 1;
movMean = imresize(imread(cs{frame_number}),[128,128]);
imgB = movMean;
imgBp = imgB;
correctedMean = imgBp;
ii = 2;
Hcumulative = eye(3);
movMean2 = imresize(imread(cs{frame_number}),[1024,1024]);
imgB2 = movMean2;
imgBp2 = imgB2;
correctedMean2 = imgBp2;
HdownScale = [ 128/1024 0 0; ...
0 128/1024 0; ...
0 0 1];
HupScale = [ 1024/128 0 0; ...
0 1024/128 0; ...
0 0 1];
while ii < length(images)
% Read in new frame
imgA = imgB;
imgAp = imgBp;
imgB = imresize(imread(cs{ii}),[128,128]);
imgB2 = imresize(imread(cs{ii}),[1024,1024]);
% Estimate transform from frame A to frame B, and fit as an s-R-t
H = cvexEstStabilizationTform(imgA,imgB);
HsRt = cvexTformToSRT(H);
Hcumulative = HupScale * HsRt * Hcumulative * HdownScale;
imgBp2 =imwarp(imgB2,affine2d(Hcumulative),'OutputView',imref2d(size(imgB2)));
% Write Aligned images in given folder
imwrite(imgBp2,[cs{ii},'_aligned.jpg'])
ii = ii+1;
-- 灰烬
使用第 1 部分中的代码成功对齐 128*128 帧的示例
此处使用第 2 部分中的代码未成功重新映射到 1024*104 帧的示例