我试图将极坐标(轴是角度x半径)的图像转换为笛卡尔坐标(轴为x和y)的图像。
这在使用pcolor()的matlab中很简单,但问题是我必须在mex文件(matlab的c ++接口)中执行此操作。这似乎很容易,除了Matlab ONLY使用数组容器,所以我无法想到这样做的聪明或雄辩的方法。
我可以访问图像尺寸,我可以想象一种非常混乱的方式,将输入图像数组重新打包为C ++中的矩阵并完成转换,但这会很麻烦且有问题。
另外,我需要能够插入xy平原点之间的间隙。
有什么想法吗?
答案 0 :(得分:2)
这在图像处理方面是合理的标准,特别是在注册时。但是,它需要一些思考,而不是“显而易见”。第一次,这对我来说并不明显。
我假设您有两个图像,在不同的“域”中,在您的情况下是极坐标中的源图像和笛卡尔坐标中的目标图像。我假设您知道要填充的目标图像中的区域。
图像处理中常见的最佳做法是循环遍历要填充的目标图像的已知区域中的坐标。对于这些位置(x,y)中的每一个,你都会有一些转换为极地。它可能是r = sqrt(x*x+y*y)
和theta = atan2(y,x)
或类似的东西。然后使用插值从极坐标位置的那个位置进行采样。
插值的选择包括:
r
和theta
,然后选择该值。当然,您应该注意边界条件以及如果您的r
和theta
离开您的图片会发生什么。
此过程也类似(循环目标图像并从源图像采样,并基于反向变换进行查找)用于各种坐标变换。好消息是你不要在你的想象源相关的地方留下洞。
希望这有助于图像部分。
至于mex部分,这里有一些链接: Mex tutorial Mex tutorial
您能更具体地了解您对mex部件的需求吗?