0

假设我们有一张表示地形高程的高度图,其形式为每个像素指示高度的图像。假设同一图像上的另一图层正被用于指示穿过地形的道路,因此亮像素表示道路上的点,暗像素指示道路偏离,中间像素表示沿着边缘的位置的道路。这似乎是在这种情况下代表道路的一种自然方式,但我们也可以使用行进方块将其转换为道路的多边形轮廓。调整地形高度图中的道路

问题是:算法如何调整高度图以保持道路左右水平。通过平均道路上每个点的高程来使道路完全水平很容易,但这不是真实道路的工作原理。一条路应该能够跑上山下,但不能向左或向右倾斜。

必须有一些几何解决方案来找到道路的角度和线性插值像素之间的高度。还是有一些棘手的解决方案,可以在实践中取得良好的效果,而不需要付出太多努力呢?

回答

0

您可以计算每个点的道路水平法线和这些法线的平均高度点。这将有助于保持法线水平 - 这就是实际的道路行为。

+0

“每个点”是指每个像素的中心吗?通过一个像素的中心的法线不会穿过多于一个像素的中心吗?如果我们计算仅由法线接触的像素,那么很多像素会被许多法线接触,那么我们使用哪个正常值来计算每个像素的平均值? – Geo

+0

也许尝试某种加权平均值,如果像素被多个法线所触及... –

0

使用沿着道路轴线的像素高度,并在高度图上沿着法线的法线设置此高度。这在技术上有点复杂。你所能做的就是在小四边形中对道路进行网格划分,并用常量或双线性插值高度“填充”四边形。

为了更好的逼真度,你必须在上升的一侧雕刻一些地形,并在下方填充以避免垂直墙壁和尊重堤岸斜坡。这可以通过将网格外部的网格扩展到具有斜坡的额外​​四边形来完成。

0

如果用矢量数据(线)定义道路,那么解决问题的方法就会更清晰。正如伊夫所写的,填充道路的高度是道路中心线(轴线)的高度,数值垂直于轴线传播,两边的道路宽度为一半。这也是相当复杂的计算。主要问题是轴线弯曲(角度)。这是因为在弯曲时侧面和轴线的长度不同,必须注意在这三条线上“平行”行驶。

栅格化问题可以通过找到垂直于轴上某点的像素来解决。可以使用找到具有相似属性的一组像素的方法。就像拍摄一个路边像素并找到其他路边的最短像素路径,会产生(可能)与该轴垂直的像素线。最短路径线上的像素可以使用相同的高度,中间像素值或平均值。

使用这种方法会出现相同的弯曲问题,因为来自内侧路面的像素可能在外侧路面上具有更近的像素。也许更多的平均可以在这里帮助。我会尽量从两边的每个像素找到最短路径。对于每个最短的线查找要使用的高度值。由于这一个像素将在更短的线上,并且它可以使用它所在的最短线的平均值。如果某些像素没有用最短线条覆盖,请使用相邻像素的平均值。

我认为图的节点用于寻找最短路径(由道路像素构建)具有8个邻居,并且边缘必须被加权,其中水平/垂直边缘具有权重1并且对角边缘具有权重sqrt(2)。