⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 alignimages.m

📁 图像配准的源程序
💻 M
字号:
function [M, imOut] = alignImages(im1, im2, iterations, levels, model, option, mask)
% [M, IMOUT] = ALIGNIMAGES(IM1, IM2, ITERATIONS, LEVELS, MODEL, OPTION, MASK)
% IM1, IM2     MxN image arrays
% MODEL        Motion models, 'translation', 'rigid', 'affine',
%              'projective' (Default 'projective')
% ITERATIONS   Number of iterations per pyramid level (Default 4)
% LEVELS       Number of Pyramid Levels (Default 4);
% MASK         MxN binary array. Place zeros for out of segment places,
%              ones for in segment (Default ones(size(im1,1), size(im1,2)))
% OPTION       Robust alignment 1, ordinary alignment 0 (Default 0)
% 
% (NOTE Order of parameter input is important, so you cannot provide number of
% levels while omitting number of iterations)
%
% [1] Bergen et al., 'Hierarchicial Model-Based Motion Estimation', Proceedings
% of the Second European Conference on Computer Vision, pp. 237-252, 1992.


if(~exist('option'))
    option = 0;
end

if(~exist('mask'))
    mask = ones(size(im1,1), size(im1,2));
end

if(~exist('model'))
    model = 'projective';
end

if(~exist('iterations'))
    iterations = 4;
end

if(~exist('levels'))
    levels = 4;
end

% Prepare mask
Nmask = zeros(size(im1,1)*size(im1,2),1);
Nmask(:) = NaN;
[p] = find(mask(:)==1);
Nmask(p) = 1;
Nmask = reshape(Nmask, size(im1,1), size(im1,2));

% Mask first image
pic2 = Nmask.*im2;
pic1 = im1;

% Create Pyramid
[fig1, fig2] = createpyramid(pic1,pic2, levels);

Minitial = eye(3);
for x = 1:levels
    
    Minitial(1:2,3)=Minitial(1:2,3)*2;
    
    ima1 = fig1(levels-x+1).im;
    ima2 = fig2(levels-x+1).im;
    
    % Choose Affine
    if(model(1) == 'p')
        M = estProjIter2(ima1,ima2,iterations,Minitial,option);
    end
        
    % Choose Affine
    if(model(1) == 'a')
        M = estAffineIter2(ima1,ima2,iterations,Minitial);
    end
    
    % Choose Rigid
    if(model(1) == 'r')
        M = estRigidIter2(ima1,ima2,iterations,Minitial);
    end
    
    % Choose Translation
    if(model(1) == 't')
        M = estTranslationIter2(ima1,ima2,iterations,Minitial);
    end

    Minitial = M;
    
end

imOut = warpProjective2(im2,Minitial);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -