[magick-users] Auto alignment of shifted images

Anthony Thyssen anthony at griffith.edu.au
Sat Sep 15 17:09:19 PDT 2007


Claus Cyrny on  wrote...
| Anthony Thyssen wrote:
| > Claus Cyrny on  wrote...
| >
| > | Imho, this  can only be done if /all/ of the images have the /same/
| > | offset; otherwise one would have to write something that analyzes
| > | each image and gives out the offset in relation to a reference
| > | image (like 'a.jpg'). I'm not sure if IM could accomplish this.
| > |
| > Or the image is distorted to FIX the offsets. However that will still
| > require something to look for 'registration marks' on the page to
| > align it right.
|
| Does IM have /any/  capabilities to track patterns in an image? At
| least at first glance, I couldn't find a command that will do that.
|
| Claus
|
There was some work done in the MagickCore API  (low level C
programming).

I will include the C code below.  I have not tried it however, so no
gurantees.


You may also be interested in
   http://www.catenary.com/howto/deskew.html
Which talks about an algorithm for rectifying (deskewing) a document.
It will not however re-align a document which is what you need.


If you have complete control of the document scanning process, you can
gurantee the document is correctly de-skewed, by looking for a specific
sub-image match is specific areas of the document.

For example a particular logo at the top left, or a boc corner at the
bottom right.

  Anthony Thyssen ( Graphics Enthusiast )    <A.Thyssen at griffith.edu.au>
 -----------------------------------------------------------------------------
    A picture may be worth a thousand words,
                        but a thousand words use a lot less disk space!
 -----------------------------------------------------------------------------
         IM Examples               http://www.imagemagick.org/Usage/
-------------- next part --------------
/*
**
** Locate a sub-image within a larger image
**
** We added IsImageSimilar() to ImageMagick 6.2.8-4 Beta if anyone wants to
** take a look at the solution to locating coordinates of a sub-image within
** another image.  It works in all colorspaces and accounts for image masks.
** Below a test program for IsImageSimilar().  Compile with:
**
** Cristy <koyaanisqatsi at imagemagick.org>
**
**   cc `Magick-config --cflags --cppflags` -o image_similar image_similar.c \
**     `Magick-config --ldflags --libs`
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <magick/MagickCore.h>

int main(int argc,char **argv)
{
  ExceptionInfo
    *exception;

  Image
    *crop_image,
    *image;

  ImageInfo
    *image_info;

  long
    x,
    y;

  RectangleInfo
    region;

  if (argc != 2)
    {
      (void) fprintf(stdout,"Usage: %s image image\n",argv[0]);
      exit(0);
    }
  InitializeMagick(*argv);
  exception=AcquireExceptionInfo();
  image_info=CloneImageInfo((ImageInfo *) NULL);
  (void) strcpy(image_info->filename,argv[1]);
  image=ReadImage(image_info,exception);
  if (exception->severity != UndefinedException)
    CatchException(exception);
  if (image == (Image *) NULL)
    exit(1);
  region.width=100;
  region.height=100;
  region.x=100;
  region.y=100;
  crop_image=CropImage(image,&region,exception);
  x=0;
  y=0;
  IsImageSimilar(image,crop_image,&x,&y,exception);
  printf("%ld %ld\n",x,y);
  image=DestroyImageList(image);
  image_info=DestroyImageInfo(image_info);
  exception=DestroyExceptionInfo(exception);
  DestroyMagick();
  return(0);
}



More information about the Magick-users mailing list