我有大量的小图像(360x192),按顺序从 DOS 2D 计算机游戏中截取。它们有很好的重叠,我想把它们拼接成一个大的复合材料。由于它们的本质,每个后续图像都将与下一个或上一个图像完美匹配。因此,不需要或不需要旋转、拉伸或扭曲。
有很多软件可以将照片全景拼接在一起。但可悲的是,他们都应用了一些扭曲,即使他们被明确指示不要这样做。
是否有软件可以尝试进行像素完美的拼接?
我有大量的小图像(360x192),按顺序从 DOS 2D 计算机游戏中截取。它们有很好的重叠,我想把它们拼接成一个大的复合材料。由于它们的本质,每个后续图像都将与下一个或上一个图像完美匹配。因此,不需要或不需要旋转、拉伸或扭曲。
有很多软件可以将照片全景拼接在一起。但可悲的是,他们都应用了一些扭曲,即使他们被明确指示不要这样做。
是否有软件可以尝试进行像素完美的拼接?
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]]}]
进行全景拼接的权威库之一是全景工具。您可以从 Perl 移植或调用。
请注意,您的规范不一致。除非您的图像是 100% 直线的(即,由与图像大小相同的成像器以 1:1 的比例拍摄),否则您必须补偿镜头失真。为了准确地将照片拼接在一起(逐个像素),图像需要补偿失真。