首页 > 解决方案 > 多个小图像拼接(正射镶嵌,map2d)

问题描述

我有多个世界地图的小图像(每 1 秒从无人机拍摄一次,因此新图像与前一个图像重叠)。

如果我把它们放在地图上,输出看起来像 在此处输入图像描述

我正在寻找一些能够拼接图像的快速库,以便我可以显示地图。我已经尝试过 Emgu、Accord、OpenCvSharp ......但我被困住了,因为它们中的一些因为很小而无法正确拼接图像,其中一些速度很慢,而另一些则在每次新拼接时都会失去图像质量。

创建正射镶嵌的正确方法是什么?

目前我正在将新图像缝合到前一个图像(已经与前一个图像缝合),我认为这会更快,因为我没有一次拥有所有图像,我认为这是正确的方法,但正如我已经告诉我的那样我正在失去图像质量,如果我尝试一次拼接所有当前图像,则需要很长时间。

任何建议和指点都会很棒。

这是示例数据 图像数据

目前使用 Accord.Net 和波纹管代码(将新的缝合到先前已经缝合的)在 4 张图像之后出现问题

//1
HarrisCornersDetector harris = new HarrisCornersDetector(0.04f, 1000f);
harrisPoints1 = harris.ProcessImage(img1).ToArray();
harrisPoints2 = harris.ProcessImage(img2).ToArray();
//2
CorrelationMatching matcher = new CorrelationMatching(9, img1, img2);
IntPoint[][] matches = matcher.Match(harrisPoints1, harrisPoints2);

// Get the two sets of points
correlationPoints1 = matches[0];
correlationPoints2 = matches[1];
//3
RansacHomographyEstimator ransac = new RansacHomographyEstimator(0.001, 0.99);
homography = ransac.Estimate(correlationPoints1, correlationPoints2);
//4 
Blend blend = new Blend(homography, img1);
Bitmap output = blend.Apply(img2);

output.MakeTransparent();
output.Save(locationName, System.Drawing.Imaging.ImageFormat.Jpeg);
output.Dispose();

在此处输入图像描述

标签: c#image-processingemgucvaccord.netopencvsharp

解决方案


将图像拼接在一起的基本原理非常简单,但是影响最终质量的细节无穷无尽。

Open Drone Map 值得一看。

我开发了一个纯 python (+ opencv) 图像拼接工具链来支持我的大学研究项目。它是开源的(MIT 许可)。我的作品被有意设计为一个“大胆”的系统。这是github链接:

https://github.com/UASLab/ImageAnalysis

我很乐意回答有关我工作的更多具体问题,如果我能回答更广泛的问题(在我的经验范围内),我也很乐意这样做。

(我的工具包中的屏幕截图可在上面的链接中找到......我还没有足够的声誉来发布图片。)


推荐阅读