Perl 有没有软件可以在不旋转或拉伸的情况下将大量小数字图像缝合在一起?

Perl 有没有软件可以在不旋转或拉伸的情况下将大量小数字图像缝合在一起?,perl,image-processing,image-stitching,Perl,Image Processing,Image Stitching,我有大量的小图片(360x192),是从DOS 2D电脑游戏中按顺序截图的。它们有很好的重叠,我想把它们缝合成一个大的复合材料。由于它们的本质,每个后续图像都将在下一个或上一个图像上完美匹配像素。因此,不需要或不需要旋转、拉伸或变形 有很多软件可以将全景照片拼接在一起。但可悲的是,所有这些人都应用了一些扭曲,即使他们被明确指示不要这样做 是否有软件可以尝试进行像素完美拼接?Mathematica 8提供了以下功能: ImageAlign[img1, img2, "Transformation"

我有大量的小图片(360x192),是从DOS 2D电脑游戏中按顺序截图的。它们有很好的重叠,我想把它们缝合成一个大的复合材料。由于它们的本质,每个后续图像都将在下一个或上一个图像上完美匹配像素。因此,不需要或不需要旋转、拉伸或变形

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


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

Mathematica 8提供了以下功能:

ImageAlign[img1, img2, "Transformation" -> "Translation"] 
FindGeometricTransform[img1, img2, "Transformation" -> "Translation"] 
通过将选项“Transformation”设置为“Translation”,可以保证结果转换不会出现您提到的任何“扭曲”

文档中有更多示例:

我知道可以将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]]}]

Mathematica 8的功能是:

ImageAlign[img1, img2, "Transformation" -> "Translation"] 
FindGeometricTransform[img1, img2, "Transformation" -> "Translation"] 
通过将选项“Transformation”设置为“Translation”,可以保证结果转换不会出现您提到的任何“扭曲”

文档中有更多示例:

我知道可以将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]]}]

进行全景拼接的权威库之一是。您可以从Perl进行端口或调用


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

用于全景拼接的权威库之一是。您可以从Perl进行端口或调用



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

你可以很容易地编写一个程序来完成它。告诉我们你可以使用什么语言。几乎只有Perl,尽管我对Perl很在行。我确实考虑过了,但是我真的不知道该从哪里开始。对不起,Perl是我完全无能的一个领域。我添加标签是为了引起大家对这个问题的注意。你可能想看看那些将显微镜图像拼接在一起的项目。他们正在解决同样的问题,即从没有扭曲的零件创建大图像。看一看那篇演讲的PDF文档,它似乎被破坏了/你可以很容易地编写一个程序来完成它。告诉我们你可以使用什么语言。几乎只有Perl,尽管我对Perl很在行。我确实考虑过了,但是我真的不知道该从哪里开始。对不起,Perl是我完全无能的一个领域。我添加标签是为了引起大家对这个问题的注意。你可能想看看那些将显微镜图像拼接在一起的项目。他们正在解决同样的问题,即从没有扭曲的零件创建大图像。看一看那篇演讲的PDF文档,它似乎被破坏了/谢谢你的建议。我试试看。:)FindGeometricTransform非常有效,甚至可以处理亮度差异。但是,当使用ImageCompose组装时,它只在水平方向扩展生成的图像,而不是垂直方向。有什么建议吗?我觉得我们离你想要的结果非常接近。您可能想发布两张图片,这样我可以帮助您了解最终构图的确切语法。否则,您可能会从演示文稿幻灯片18中的图像拼接示例中获益。您可以在此处获得数百个示例图像:我正在尝试将它们合并到一个连续图像中,稍后可以向其中添加任意数量的图像。现在我正在考虑让Mathematica通过命令行为我提取关系,这样我就可以做一些进一步的处理,比如亮度调整和将时钟/光标剪切到图像上,但是如果你能展示一些方法,这将是非常有趣的。我已经完成了这一步,并且对输出非常满意:gist.github.com/8848a25a15da013ed1a唯一的问题是,每当打印位置关系时,它都会打印一些调试内容。找不到有关如何关闭的任何信息。谢谢您的建议。我试试看。:)FindGeometricTransform非常有效,甚至可以处理亮度差异。但是,当使用ImageCompose组装时,它只在水平方向扩展生成的图像,而不是垂直方向。有什么建议吗?我觉得我们离你想要的结果非常接近。您可能想发布两张图片,这样我可以帮助您了解最终构图的确切语法。否则,您可能会从演示文稿幻灯片18中的图像拼接示例中获益。您可以在此处获得数百个示例图像:我正在尝试将它们合并到一个连续图像中,稍后可以向其中添加任意数量的图像。现在我正在考虑让Mathematica通过命令行为我提取关系,这样我就可以做一些进一步的处理,比如亮度调整和将时钟/光标剪切到图像上,但是如果你能展示一些方法,这将是非常有趣的。我已经完成了这一步,并且对输出非常满意:gist.github.com/8848a25a15da013ed1ad