我一直在开发(过去 3 个小时)我正在用 C# 做的一个小项目来帮助我选择一个家。
具体来说,我将犯罪统计数据叠加在 Google map 上,以找到一个不错的社区。p>
举个例子: http://otac0n.com/Demos/prospects.html
现在,我手动找到了 Lat 和 Lng 以匹配示例中显示的 map 的角,但我还有一些 map 要叠加。
我的新应用程序允许我选择一个地标并指向图像以将 Pixel 与 LatLng 联系起来。像这样的东西:
locations.Add(new LocationPoint(37.6790f, -97.3125f, "Kellogg and I-135"));
// and later...
targetPoint.Pixel = FindPixel(mouseEvent.Location);
因此,我收集了一个像素/latlng 组合列表,现在想转换图像(使用仿射或非仿射转换)。
这里的目标是让每条街道都排成一行。给定一张好的 map ,唯一必要的变换是旋转以将 map 从北到南排列(现在我对此很满意)。但我不确定从哪里开始。
有人有使用 C# 进行图像转换的经验吗?我如何找到适当的旋转来使 map 水平?
解决好 map 的问题后,我最终希望能够叠加手绘 map 。这显然会导致最终图像严重失真,并且可能超出第一次迭代的范围。但是,我不想开发一个将来无法扩展到该系统的系统。
最佳答案
我不确定你到底想完成什么,但如果你想将一张 map 上的三个以上的点拟合到另一张 map 上的三个以上的点,基本上有两种方法可以进行:
- 您可以尝试在您的点上创建一个三角形网格,然后在每个三角形内应用不同的仿射变换,并获得分段线性变换。为了得到正确的网格划分,你可能需要做一些类似 Delaunay triangulation 的事情。点,为此 qhull应该是您的首选。
- 你可以进行更高阶的转换,比如quad distortion ,但可能很难找到适用于通用位置中任意数量点的解决方案。给自己找一本很好的有限元方法书,并阅读有关高阶等参数元素的章节,无论是拉格朗日元素还是偶然元素,它们将为您提供多点到多点的良好映射。这里有几个链接( 1 和 2 )可以让您顺利进行。但要注意数学内容是密集的...
关于c# - 图像重映射算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/963533/