0

我正在尝试将极坐标中的图像(轴是角度 x 半径)转换为笛卡尔坐标中的图像(轴是 x 和 y)。

这在 matlab 中使用 pcolor() 很简单,但问题是我必须在 mex 文件中执行此操作(C++ 到 Matlab 的接口)。这似乎很容易,除了 Matlab 只使用数组容器,所以我想不出一个聪明或雄辩的方法来做到这一点。

我确实可以访问图像尺寸,我可以想象一种非常混乱的方式,将输入图像数组重新打包为 C++ 中的矩阵并执行转换,但这会很混乱且有问题。

此外,我需要能够在 xy 平原中的点之间插入间隙。

有任何想法吗?

4

1 回答 1

3

这是图像处理中的合理标准,尤其是在配准中。但是,这需要一些思考并且不是“显而易见的”。第一次对我来说也不是很明显。

我假设您有两个图像,在不同的“域”中,在您的情况下,一个是极坐标的源图像,一个是笛卡尔坐标的目标图像。我假设您知道要填充的目标图像中的区域。

图像处理中众所周知的最佳做法是循环遍历要填充的目标图像的已知区域中的坐标。对于这些位置 (x,y) 中的每一个,您都会有一些转换为极坐标。它可能是r = sqrt(x*x+y*y)theta = atan2(y,x)或类似的东西。然后,您使用插值从极坐标位置中的该位置进行采样。

插值的选择包括:

  1. 最近的邻居 - 你只需四舍五入到最近的rtheta选择它的值。
  2. 双线性 -
  3. 双立方
  4. ...

当然,您应该注意边界条件以及如果您rtheta图像超出您的想象会发生什么。

对于所有类型的坐标变换,此过程也类似(循环目标图像并从源图像中采样,并基于反向变换进行查找)。好处是您不会在与您的来源想象相关的地方留下漏洞。

希望这有助于图像部分。

至于 mex 部分,这里有一些链接: Mex tutorial Mex tutorial

您能否更具体地了解您对 mex 部分的需求?

于 2011-04-20T04:56:56.507 回答