c# - 图像重映射算法

标签 c# math google-maps image-processing image-manipulation

我一直在开发(过去 3 个小时)我正在用 C# 做的一个小项目来帮助我选择一个家。

具体来说,我将犯罪统计数据叠加在 Google map 上,以找到一个不错的社区。

举个例子: 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 上的三个以上的点,基本上有两种方法可以进行:

  1. 您可以尝试在您的点上创建一个三角形网格,然后在每个三角形内应用不同的仿射变换,并获得分段线性变换。为了得到正确的网格划分,你可能需要做一些类似 Delaunay triangulation 的事情。点,为此 qhull应该是您的首选。
  2. 你可以进行更高阶的转换,比如quad distortion ,但可能很难找到适用于通用位置中任意数量点的解决方案。给自己找一本很好的有限元方法书,并阅读有关高阶等参数元素的章节,无论是拉格朗日元素还是偶然元素,它们将为您提供多点到多点的良好映射。这里有几个链接( 12 )可以让您顺利进行。但要注意数学内容是密集的...

关于c# - 图像重映射算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/963533/

相关文章:

C# - Marshal.Copy : Attempted to read or write protected memory

c# - LINQ - 按计算字段分组

c# - sql——变量存储

android - 如果 Android 中的 key 和 SHA1 正确,则 Google Maps API 出现响应错误?

ios - 我需要一个 API 来绘制航点并给我一条通过它们的路线,并给我城市人口。我应该使用哪个 API?

javascript - 添加特定于 Windows Phone Internet Explorer 的代码

c# - 创建 shell 命名空间扩展

python - 如何修复Python中的 'ValueError: math domain error'?

python - 复杂的数学公式 Python

c++ - 在图像上应用颜色插值