2012-09-14 213 views
3

我有1024×256极坐标数据(行 - 半径,列角度),我需要绘制为图像。有一个我从文件交换中获得的m文件,可以做到这一点(clickhere)。但是,对于大图像来说真的很慢。我相信有一种使用我正在努力的冲浪功能来做到这一点的快速方法。 (见下面的代码)在MATLAB中绘制极坐标图像

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 

结果似乎是不正确的。

任何想法我做错了什么? 谢谢!

回答

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

+0

哦,我明白了。感谢大家指出这个错误! – hkf

1

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

你应该得到正确而快速的方法是这样的:

  1. 产生超过你想得出,每个目的地像素的一个条目地区的笛卡尔网格(meshgrid)。
  2. 转换你的x/y笛卡尔变量极
  3. Scale的极坐标的指数纳入您的极地图像(这是考虑到矩阵大小和成像深度)
  4. 使用极性指标进行插值值了极地图像,使用interp2(这是什么使一个缓慢的过程快)在你原来的X/Y meshgrid点

这是否进程意义

  • 产生的图像是用像素位置笛卡尔形象?在图像处理中,从目标空间开始(这就是您需要整个像素的位置)并且在源图像中向后移动到分数像素偏移,然后进行插值是正常的。

  • +1

    感谢Peter的回应。我相信你的描述是我在fileexchange中遇到的其他算法使用的。但是,为了我的目的,我可以避开使用surf功能。 – hkf