0

我有大量的小图像(360x192),按顺序从 DOS 2D 计算机游戏中截取。它们有很好的重叠,我想把它们拼接成一个大的复合材料。由于它们的本质,每个后续图像都将与下一个或上一个图像完美匹配。因此,不需要或不需要旋转、拉伸或扭曲。

有很多软件可以将照片全景拼接在一起。但可悲的是,他们都应用了一些扭曲,即使他们被明确指示不要这样做。

是否有软件可以尝试进行像素完美的拼接?

4

2 回答 2

3

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,但我还没有尝试过。

编辑:使用您发送的链接,我想出了以下内容。唯一的问题是您需要提前指定输出的大小---注意我只尝试了前 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]]}]

在此处输入图像描述

于 2012-02-02T00:08:43.610 回答
1

进行全景拼接的权威库之一是全景工具。您可以从 Perl 移植或调用。

请注意,您的规范不一致。除非您的图像是 100% 直线的(即,由与图像大小相同的成像器以 1:1 的比例拍摄),否则您必须补偿镜头失真。为了准确地将照片拼接在一起(逐个像素),图像需要补偿失真。

于 2012-02-02T00:44:13.060 回答