This is not very automated but perhaps it will motivate experts:
Copied the images

Changing image to graphic and finding corresponding points:
fun[img_] :=
With[{id = ImageDimensions[img]}, {Texture[img],
Polygon[{{1, 1}, {id[[1]], 1}, id, {1, id[[2]]}},
VertexTextureCoordinates -> {{0, 0}, {1, 0}, {1, 1}, {0, 1}}]}]
{ma, mb} = ImageCorrespondingPoints[a, b];
{mta, mtc} = ImageCorrespondingPoints[a, c];
Using manipulate and pasting desired bookmarks:
Manipulate[
Graphics[{GeometricTransformation[
fun[a]~Join~{Red, PointSize[0.025], Point[ma]},
TranslationTransform[{x, y}]], Opacity[0.5], fun[b], Yellow,
PointSize[0.01], Point[mb]}],
{x, -300, 10, Appearance -> "Labeled"}, {y, -300, 100,
Appearance -> "Labeled"}]

Manipulate[
Graphics[{GeometricTransformation[
fun[c]~Join~{Red, PointSize[0.025], Point[mtc]},
TranslationTransform[{x, y}]], Opacity[0.5],
GeometricTransformation[fun[a], TranslationTransform[abt]], Yellow,
PointSize[0.01],
GeometricTransformation[Point[mta], TranslationTransform[abt]]}],
{x, -300, 10, Appearance -> "Labeled"}, {y, -300, 100,
Appearance -> "Labeled"}]

The bookmarks:
abt = "ab" /. {"ab" :> {x = -122.5`, y = -171.`}}
act = "ac" /. {"ac" :> {x = -128.`, y = 1.`}}
Piecing together:
Graphics[{GeometricTransformation[fun[a], TranslationTransform[abt]],
GeometricTransformation[fun[c], TranslationTransform[act]], fun[b]}]
The code could be made more concise. I do not have time at present (this was a "stream of consciousness"). I look forward to learning from other answers.

In case of doubt

FindGeometricTransform
. Won't work out of the box though. $\endgroup$