在MATLAB中绘制极坐标图像

3

我有一组1024×256的极坐标数据(行-半径,列-角度),需要将其绘制成图片。我从文件交换中心获得了一个m文件可以完成此任务(点击这里)。然而,对于大型图片来说它太慢了。我相信使用surf函数可以更快速地完成,但我还在努力解决问题(请参见下面的代码)。

data = data; % load any polar data

depth = 4.5; %imaging depth in mm

offset = 0.5;

theta = [(0:2*pi/size(data,2):2*pi-1/size(data,2))]*180/pi;

rho = [0:(depth-offset)/size(data,1):(depth-offset)-1/size(data,1)] + offset;

[THETA,RR] = meshgrid(theta,rho);

[A,B] = pol2cart(THETA,RR);

figure

surf(A,B,data,'edgecolor','none'),

view(0,90)

xlabel('x [mm]')

ylabel('y [mm]')

axis tight

结果似乎不正确。 你知道我做错了什么吗?谢谢!
2个回答

3

是的,您的问题很简单:

pol2cart Transform polar to Cartesian coordinates.
    [X,Y] = pol2cart(TH,R) transforms corresponding elements of data
    stored in polar coordinates (angle TH, radius R) to Cartesian
    coordinates X,Y.  The arrays TH and R must the same size (or
    either can be scalar).  ***TH must be in radians***.

解决方案:移除180/pi。

1
M-file的方法是正确的。但你说得对,它实现得非常慢。你缺少的部分是将数据本身从极坐标转换为直角坐标系,这是困难的部分。目前,你正在转换要绘制的坐标,但是却将你的极坐标数据作为笛卡尔坐标系来绘制(在数据上强加你的笛卡尔坐标)。
你应该采取的正确且快速的方法是:
1. 在你想要绘制的区域上生成一个笛卡尔网格(meshgrid),每个目标像素一个条目。 2. 将你的x/y笛卡尔变量转换为极坐标。 3. 将你的极坐标缩放到你的极像素索引中(考虑矩阵大小和成像深度)。 4. 使用interp2从极像素中插值出值(这就是使缓慢的过程变快的方法)。 5. 结果图像是一个笛卡尔图像,其像素位置在你原始的x/y meshgrid点上。
这个过程有意义吗?在图像处理中,通常从目标空间开始(那里需要整个像素),然后向后移动到源图像的分数像素偏移,然后进行插值。

1
谢谢回复,彼得。我相信你的描述是我在文件交换中遇到的另一个算法使用的描述。然而,为了我的目的,我可以使用surf函数。 - hkf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接