Message Boards Message Boards

0
|
4669 Views
|
2 Replies
|
1 Total Likes
View groups...
Share
Share this post:

FindGeometricTransform

Posted 10 years ago

Dear Community

I tried to figured out the image angle and translation compared to an origin resp. reference image but the function FindGeometricTransform does not work to my comprehension. I tested it with two simple images, which are slightly different resp. shifted, see attachment. To transform the shifted image back to the reference image I used the ImagePerspectiveTransformation function, but It gives me only back a black image.

Did anyone know what is wrong with the two pictures resp. with my application of FindGeometricTransform?

Many thanks.

Best regards

georg

Attachments:
POSTED BY: Joerg Kuehne
2 Replies
Posted 10 years ago

Dear Henrik

A late - many thanks - for your explanation!

Best regards Georg

POSTED BY: Joerg Kuehne

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:

enter image description here

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:

enter image description here

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

POSTED BY: Henrik Schachner
Reply to this discussion
Community posts can be styled and formatted using the Markdown syntax.
Reply Preview
Attachments
Remove
or Discard

Group Abstract Group Abstract