% Example 5 - Align aerial photos
% -------------------------------
% start with clean slate
close all, clear all, clc
% Step 1: Read Images
base_image=imread('westconcordorthophoto.png');
figure('pos',[26 122 470 449]), imshow(base_image), title('base image')
input_image=imread('westconcordaerial.png');
figure('pos',[535 83 476 483]), imshow(input_image), title('input image')
% Step 2: Choose Control Points
load control_points
cpselect(rgb2gray(input_image),base_image,input_points,base_points)
% Step 3: Infer Geometric Transformation
T=cp2tform(input_points,base_points,'projective')
% Step 4: Transform Unregistered Image
reg_im=imtransform(input_image,T);
figure('pos',[535 122 470 449]), imshow(reg_im), title('transformed image')
% Step 5: Register both images (same coordinates)
[m,n]=size(base_image);
reg_im=imtransform(input_image,T,'XData',[1 n],'YData',[1 m]);
figure(3), imshow(reg_im), title('registered image'), set(3,'pos',[535 122 470 449])
% Step 6: Simple linear combination (half & half)
base_image=repmat(base_image,[1 1 3]);
comb_im=imlincomb(0.5,base_image,0.5,reg_im);
figure('position',[237 227 470 449]), imshow(comb_im), title('composite result')
% Step 7: Overlay registered (color) data into base (gray) image
BW=reg_im>0;
base_image(BW)=reg_im(BW);
figure('position',[237 227 470 449]), imshow(base_image), title('partial replacement')
% Copyright 2003-2010 RBemis The MathWorks, Inc.