2011-04-12 254 views
0

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

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

我有权访问图像尺寸,我可以想象一种非常混乱的方式,将输入图像数组重新打包为C++中的矩阵,并将转换过滤出来,但这样做会很麻烦并且存在问题。

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

任何想法?

+0

我想我现在尝试的是采取输入数组,并通过它产生一个强度为每个(角度,半径),并存储在一个地图与ciel的密钥(rcos(θ ))和ciel(rsin(theta)))。我可以为地图生成2D密钥吗?我忘了...我将存储每个角度,每个x,y键的半径值。 – 2011-04-12 15:56:47

+0

不是真的工作... – 2011-04-12 16:49:13

+0

如果你的意思是你想要将(r,phi)对转换为(x,y)对,我不会看到在向mex文件提供输入数组对时混乱和有问题,并获得输出数组作为输出。还是我误解了你的问题? 一些代码会有所帮助。 – 2011-04-13 09:31:29

回答

2

这是图像处理中的合理标准,尤其是在注册时。然而,这需要一些思考,而不是“显而易见的”。第一次也不是很明显。

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

在图像处理中最常见的最好的事情是循环遍历目标图像的已知区域中的坐标。对于这些位置(x,y)中的每个位置,都会有一些转换为极坐标。这可能是r = sqrt(x*x+y*y)theta = atan2(y,x)或类似的东西。然后在插值的极坐标位置从该位置采样。

在插值的选择是:

  1. 近邻 - 你只是四舍五入到最接近rtheta,并选择该值。
  2. 双线性 -
  3. 双三次
  4. ...

当然,你应该照顾的边界条件,会发生什么,如果你的rtheta走出你的形象。

对于所有类型的坐标转换,此过程也是类似的(循环遍历目标图像和从源图像采样,并根据反向转换进行查找)。好的一点是,你不会在你的来源想象的相关问题上留下漏洞。

希望这可以帮助图像部分。

至于墨西哥的一部分,这里有一些链接: Mex tutorial Mex tutorial

你能具体谈谈你需要了解和墨西哥的部分是什么?

相关问题