gpt4 book ai didi

c++ - 双线性插值 - OSRM Rastersource

转载 作者:行者123 更新时间:2023-11-28 01:45:41 26 4
gpt4 key购买 nike

我有一个关于 OSRM 项目中双线性插值的问题。我了解“正常”双线性插值。这是来自维基百科的图片,什么是疯狂的:

Bilinear Interpolation - Wikipedia

现在我正在尝试了解 OSRM 项目中用于栅格源数据的双线性插值。

// Query raster source using bilinear interpolation
RasterDatum RasterSource::GetRasterInterpolate(const int lon, const int lat) const
{
if (lon < xmin || lon > xmax || lat < ymin || lat > ymax)
{
return {};
}

const auto xthP = (lon - xmin) / xstep;
const auto ythP =
(ymax - lat) /
ystep; // the raster texture uses a different coordinate system with y pointing downwards

const std::size_t top = static_cast<std::size_t>(fmax(floor(ythP), 0));
const std::size_t bottom = static_cast<std::size_t>(fmin(ceil(ythP), height - 1));
const std::size_t left = static_cast<std::size_t>(fmax(floor(xthP), 0));
const std::size_t right = static_cast<std::size_t>(fmin(ceil(xthP), width - 1));

// Calculate distances from corners for bilinear interpolation
const float fromLeft = xthP - left; // this is the fraction part of xthP
const float fromTop = ythP - top; // this is the fraction part of ythP
const float fromRight = 1 - fromLeft;
const float fromBottom = 1 - fromTop;

return {static_cast<std::int32_t>(raster_data(left, top) * (fromRight * fromBottom) +
raster_data(right, top) * (fromLeft * fromBottom) +
raster_data(left, bottom) * (fromRight * fromTop) +
raster_data(right, bottom) * (fromLeft * fromTop))};
}

Original Code here

谁能解释一下代码是如何工作的?

输入格式为ASCII格式的SRTM数据。

变量高度宽度被定义为nrowsncolumns。变量 xstepystep 定义为:

return (max - min) / (static_cast<float>(count) - 1)

其中 countystepheightxstepwidth,< em>max 和 min 相似。

还有一个问题:我可以对TIF 格式 和整个世界的数据使用相同的代码吗?

最佳答案

水平像素坐标在[0, width - 1]范围内;同样垂直坐标在[0, height - 1]中。 (零索引约定在包括 C++ 在内的许多语言中使用)

线条

const auto xthP = (lon - xmin)/xstep;(以及 ythP)

将输入的图像空间坐标(long, lat)转换为像素坐标xstep图像空间中每个像素的宽度。

向下舍入(使用 floor)给出与样本区域在一侧相交的像素,向上舍入(ceil)给出另一侧的像素。对于 X 坐标,这些给出 leftright

使用 fminfmax 的原因是为了钳制坐标,使其不超过像素坐标范围。 p>


编辑:由于您正在尝试解释这张图片,因此我将在下面列出相应的部分:

  • Q11 = (左,上)
  • Q12 - (left, bottom)
  • P = (xthP, ythP)
  • R1 = fromTop, R2 = fromBottom

一个好的起点是 http://www.cs.uu.nl/docs/vakken/gr/2011/Slides/06-texturing.pdf ,幻灯片 27。但在未来,Google 是您的 friend 。

关于c++ - 双线性插值 - OSRM Rastersource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45188988/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com