3

我有 1024 X 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

结果似乎不正确。

知道我做错了什么吗?谢谢!

4

2 回答 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

于 2012-09-14T20:41:13.327 回答
1

M文件的方法是正确的。但你是对的,它的实施非常缓慢。您缺少的部分是将数据本身从极坐标转换为矩形,这是困难的部分。目前,您正在转换要绘制的坐标,但随后将极坐标数据绘制为笛卡尔数据(将笛卡尔坐标应用于数据)。

你应该采取正确和快速的方法是这样的:

  1. 在您要绘制的区域上生成一个笛卡尔网格 (meshgrid),每个目标像素一个条目。
  2. 将您的 x/y 笛卡尔变量转换为极坐标
  3. 将极坐标缩放到极坐标图像的索引(这考虑到矩阵大小和成像深度)
  4. 使用极坐标索引从极坐标图像中插入值,使用 interp2 (这就是使缓慢过程快速的原因)
  5. 生成的图像是笛卡尔图像,像素位置位于原始 x/y 网格点

这个过程有意义吗?在图像处理中,通常从目标空间(即您需要整个像素的位置)开始,然后向后移动到源图像中的小数像素偏移,然后进行插值。

于 2012-09-14T20:43:03.267 回答