What IMTRANSFORM does when it gets a TFORM with no other spatial information is to try to determine a rectangle in the TFORM's output space that contains all, or at least most of, the input image ('westconcordaerial.png' in this case). Then it defines output image coordinates within this rectangle. The idea is to follow the input image to wherever the TFORM translates it, so that the output image will contain something interesting. Otherwise, it could wind up being all, or mostly, fill values.
The output will overlay the base if you just set the additional parameters of IMTRANSFORM, 'Xdata' and 'Ydata', and 'XYScale' to be [1 size(base,2)], [1 size(base,1)], and [1 1] respectively. For example:
orthophoto = imread('westconcordorthophoto.png');
unregistered = imread('westconcordaerial.png');
input_points=[315.9797 81.5895; 179.9029 192.4000; ...
134.6591 308.4211;321.1603 219.4947; 46.9345 70.4737];
base_points=[ 342.3770 132.3825; 213.8397 208.2421; ...
149.4108 303.1474;328.9142 254.0807; 109.9842 77.5053];
tform = cp2tform(input_points,base_points,'projective');
registered = imtransform(unregistered,tform);
xd = [1 cols];
yd = [1 rows];
xys = [1 1];
registered2 = imtransform(unregistered, tform, 'Xdata', xd, 'Ydata', yd, 'XYScale', xys);
Note that parts of the input image may not appear in the base image. For example, the edges of an aerial image may view areas on the ground not included in the base image. Conversely, the base image may cover a very large area of ground, and the input image may cover only a small part in the middle of it. In this case, there will be extensive fill around the periphery of the output image. Truncation and fill often happen at the same time -- whenever the input image covers an area that intersects the edge of the area covered by the base image.
You should now be able to add the two images together. Here is an example that calculates the edges of the registered image and adds the edges of the registered image to the base image:
corners = edge(rgb2gray(registered2),'canny');