我正在尝试将极坐标(轴是角 x 半径)中的图像转换为笛卡尔坐标中的图像(轴是 x 和 y)。
这在 matlab 中使用 pcolor() 非常简单,但问题是我必须在 mex 文件(C++ 到 Matlab 的接口(interface))中执行此操作。这看起来很简单,只是 Matlab 只使用数组容器,所以我想不出一个聪明或 Eloquent 方法来做到这一点。
我确实可以访问图像尺寸,我可以想象一种非常困惑的方式,即在 C++ 中将输入图像数组重新打包为矩阵并执行转换,但这会很困惑且有问题。
此外,我需要能够在 xy 平面中的点之间插入间隙。
有什么想法吗?
最佳答案
这是图像处理中的合理标准,尤其是在配准方面。但是,这需要一些思考并且不是“显而易见的”。第一次对我来说也不明显。
我假设您有两个图像,在不同的“域”中,在您的情况下是极坐标中的源图像和笛卡尔坐标中的目标图像。我假设您知道要填充的目标图像中的区域。
图像处理中众所周知的最佳做法是循环遍历要填充的目标图像的已知区域中的坐标。对于这些位置 (x,y) 中的每一个,您都会对极坐标进行一些转换。它可能是 r = sqrt(x*x+y*y)
和 theta = atan2(y,x)
或类似的东西。然后你从极坐标位置的那个位置进行插值采样。
插值的选择包括:
- 最近邻 - 您只需四舍五入到最近的
r
和theta
并选择它们的值。 - 双线性 -
- 双三次
- ...
当然,您应该注意边界条件以及如果您的 r
和 theta
超出您的图像会发生什么情况。
对于各种坐标变换,此过程也类似(遍历目标图像并从源图像采样,并根据反向变换进行查找)。好处是您不会在源想象的相关位置留下漏洞。
希望这对图像部分有所帮助。
至于 mex 部分,这里有一些链接: Mex tutorial Mex tutorial
您能否更具体地说明您对 mex 部分的需求?
关于c++ - 将极坐标图像转换为笛卡尔图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5637927/