Hallo Joerg or Georg,
the arguments of FindGeometricTransform are lists of points, not images. A good function to find those points is ImageCorrespondingPoints. But for your example images this works extraordinarily bad:
ClearAll["Global`*"]
SetDirectory[NotebookDirectory[]];
{i1, i2} = Import /@ {"foto1.png", "foto2.png"};
MapThread[
HighlightImage[#1, #2, "HighlightColor" -> Red,
Method -> {"DiskMarkers", 5}] &, {{i1, i2},
ImageCorrespondingPoints[i1, i2,
"TransformationClass" -> "Similarity"]}]
gives:
I thought the first and obvious problem here might be the different dimensionality of the images:
ImageDimensions /@ {i1, i2}
(* Out: {{150,204},{137,300}} *)
I tried to correct this by padding:
{dDimX, dDimY} = (#1 - #2) & @@ (ImageDimensions /@ {i1, i2});
bgColor = RGBColor@ImageData[i1][[1, 1]];
{in1, in2} = {If[dDimX > 0,
ImagePad[i2, {{0, dDimX}, {0, 0}}, bgColor],
ImagePad[i1, {{0, -dDimX}, {0, 0}}, bgColor]],
If[dDimY > 0, ImagePad[i2, {{0, 0}, {0, dDimY}}, bgColor],
ImagePad[i1, {{0, 0}, {0, -dDimY}}, bgColor]]}
with the result:
ImageDimensions /@ {in1, in2}
(* Out: {{150,300},{150,300}} *)
Now it seems to work somehow, but only for the most simple case ("TransformationClass" -> "Translation"):
MapThread[
HighlightImage[#1, #2, "HighlightColor" -> Red,
Method -> {"DiskMarkers", 5}] &, {{in1, in2},
ImageCorrespondingPoints[in1, in2,
"TransformationClass" -> "Translation"]}]
which gives:
Meanwhile I came to the conclusion that the main problem is the simplicity (or periodicity) of these test images. With "real" images it ought to work much better.
I hope this helps a bit!
Henrik