2012-09-14 258 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