【问题标题】:Shifted, scaled and rotated coordinate system平移、缩放和旋转坐标系
【发布时间】:2012-08-16 08:18:36
【问题描述】:

我有一个图像坐标系和一个平铺坐标系。

我想知道平铺坐标系中的点(u_img / v_img)。

坐标系使用 sigma 进行缩放。 u_img = sigma * u_tile; 位移在瓦片坐标系中给出。 两个坐标系之间的旋转角度就是航向。

我想要的是类似 (u_tile v_tile) = f( u_img, v_img, sigma, heading, u_trans, v_trans)

我开始:

void   image2tile( uint u_img, uint v_img,
                   int u_trans_tile, int v_trans_tile,
                   float imgPixelSize, float tilePixelSize,
                   float heading,
                   int& u_tile, int& v_tile )
{
      float ratio = imgPixelSize / tilePixelSize;
      int u_trans = u_img * ratio + u_trans_tile;
      int v_trans = v_img * ratio + v_trans_tile;

      v_tile = floor( v_trans * cos( heading ) + u_trans * sin ( heading ) );
      u_tile = floor( -v_trans * sin( heading ) + u_trans * cos ( heading ) );
}

有些结果似乎是合理的,但如果我输入 u_img = 0 和 v_img = 0,我应该以 u_trans_tile 和 v_trans_tile 结束,但实际上并非如此。

我认为解决方案可能如下所示:

1.) 将平铺坐标中的平移转换为图像坐标 2.) 之后就是一个正常的变换,使用比例因子乘以旋转矩阵乘以点向量并加上新的平移向量。

u_trans_tile -> u_trans_img v_trans_tile -> u_trans_img

  v_tile = floor( ratio*( v_img * cos( heading ) + u_img * sin ( heading ) + u_trans_img);
  u_tile = floor( ratio*(-v_img * sin( heading ) + u_img * cos ( heading ) + v_trans_img);

但实际上我无法让它工作.. 任何解决方案?

【问题讨论】:

  • 结果不是预期的还是有其他错误? imgPixelSize 和 tilePixelSize 是什么类型?如果它们是整数,那么您的问题是整数除法,它不会产生预期的结果。
  • 结果不是预期的,我认为我的转换不正确。
  • 我更改了添加函数头,这样你就可以看到 imgPix 和 tilePix 都是浮动的
  • 您是否检查过cos(m_currGpsPos_s.heading) 返回您期望的值?否则,您的转换看起来是正确的,尽管在您切换 v_tile 和 u_tile 的顺序时代码有些混乱。
  • 我编辑了我的问题,也许这会对你有所帮助。我真的不认为我有正确的转变。

标签: c++ rotation system translation coordinate


【解决方案1】:

可能是由于将中间结果转换为int而导致的舍入错误?

这是正确的

  float u_trans = u_img * ratio + u_trans_tile;
  float v_trans = v_img * ratio + v_trans_tile;

【讨论】:

  • 将int 用于u_trans 和v_trans 可能会导致舍入,但最大为1 像素。
  • 实际上转换是错误的,但这个答案也有助于改进算法。
  • @Andrey 很抱歉我的评论听起来很负面。我认为你指出了一个重要的错误。我只是想补充一点,这会导致一个小错误。
  • @yokolini:旋转角度是怎么定义的?确保它是弧度并且相对于 x 轴是逆时针方向。
  • 它是弧度和反公鸡。 u_img 和 v_img = 0 和 heading = 0 的简单结果是错误的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-16
  • 1970-01-01
相关资源
最近更新 更多