【问题标题】:Plotting polar images in MATLAB在 MATLAB 中绘制极坐标图像
【发布时间】:2012-09-14 19:44:41
【问题描述】:

我有 1024 X 256 极坐标数据(行 - 半径,列角度),我需要将其绘制为图像。我从文件交换处获得了一个 m 文件,可以做到这一点(clickhere)。但是,对于大图像,它确实很慢。我相信有一种快速的方法可以使用我正在努力使用的 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

结果似乎不正确。

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

【问题讨论】:

    标签: image matlab plot polar-coordinates


    【解决方案1】:

    是的,你的问题很简单:

    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

    【讨论】:

      【解决方案2】:

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

      您应该采取的正确且快速的方法是:

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

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

      【讨论】:

      • 感谢彼得的回复。我相信您的描述是我在文件交换中遇到的其他算法使用的。但是,出于我的目的,我可以使用 surf 功能。
      猜你喜欢
      • 2018-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多