Mathematica 8は、それを行うための関数を備えています。
ImageAlign[img1, img2, "Transformation" -> "Translation"]
FindGeometricTransform[img1, img2, "Transformation" -> "Translation"]
オプション「変換」を「変換」に設定することにより、結果の変換に言及している「歪み」がないことが保証されます。
ドキュメント内のその他の例:
http://reference.wolfram.com/mathematica/ref/ImageAlign.html
http://reference.wolfram.com/mathematica/ref/FindGeometricTransform.html
Mathematicaをperlにリンクできることは知っていますが、まだ試していません。
編集:あなたが送ったリンクを使用して、私は次のことを思いついた。唯一の問題は、出力のサイズを事前に指定する必要があることです---NB最初の10枚の画像のみを試しました。
directory = "~/Downloads/done/";
files = FileNames["*.bmp", directory];
canvas = ImagePad[Import[files[[1]]], {{100, 100}, {500, 100}}, Transparent];
Do[
i = Import[f];
fun = FindGeometricTransform[canvas, i, "Transformation" -> "Translation"];
If[Head@fun === FindGeometricTransform,
Continue[]
];
canvas = ImageCompose[
canvas,
ImagePerspectiveTransformation[i, fun[[2]], DataRange -> Full, PlotRange -> Transpose[{{0, 0}, ImageDimensions[canvas]}], Padding -> Transparent],
{1, 1, -1}],
{f, files[[;; 10]]}]
