2015-01-14 6 views
2

У меня возникают проблемы, преобразующих изображение в формате [R, тета] к [х, у]Polar в декартово преобразование изображений в MATLAB

Я пытаюсь использовать interp2.

[nZ,nX] = size(im); 
theta = ((0:(nX-1)))*0.0071; %0.0071 is known angular separation of columns 
rr = (0:(nZ-1))*0.0039; %0.0039 is resolution of rows 

Я тогда делать:

%% Create grids and convert polar coordinates to rectangular 
[THETA,RR] = meshgrid(theta,rr); 
[XX,YY] = pol2cart(THETA,RR); 

и, наконец:

im_out=interp2(theta,rr,im,XX,YY,'linear'); 
im_out(isnan(im_out)) = 0; 

но изображение неправильно!

Вот входное изображение (рисунок 1) (с R, геометрия тета):

enter image description here

Я хочу восстановить, что на декартовой сетке (с использованием interp2), так это выглядит следующим образом (рисунок 2):

enter image description here

всех данные в Полярном изображении (рисунок 1) должны быть отображены в красный сектор декартовых изображений (рисунок 2).

+3

Можете ли вы показать желаемое изображение и тот, который вы получите? –

+0

Здесь входное изображение (с R, геометрия тета): https://www.dropbox.com/s/g5vllc0puftqm9k/input.png?dl=0 Я хочу реконструировать, что на декартовой сетке (с использованием interp2), поэтому он выглядит так: https://www.dropbox.com/s/yvmprufb5zc3e1a/required_output.png?dl=0 – 2one

+1

Знаете ли вы, где находится центр полярной выборки на картезианской? Это, очевидно, не верхний левый угол. –

ответ

2

Я сумел сделать это следующим образом:

Я добавил нули сверху им матрицы для определения радиуса кривизны (в моем случае 1018 пикселей, то есть РПЦ) и полярные координаты правильно:

im = IML'; % scan_lines (rotated for now) 
sector=75; % [degrees] 
im_depth=16; % [cm] (depth + ROC) 

ROC=3.98; 
im_depth=16+ROC; 

col_size=size(im,2); 
zeros_row = zeros(1018, col_size); 
im=[zeros_row; im]; 
scan_lines = im; 

[nY, nX] = size(im); 

min_ang=(sector/nX)*pi/180;% [rad.] 
theta = -nX/2*min_ang:min_ang:nX/2*min_ang; % total angle/num. lines [radians] 
theta = theta(2:end); 

steering_angles=theta; % angles [radians] 

num_samples=im_depth/nY; 
rr = (0:(nY-1))*num_samples; % im. depth/num. samples 
r = rr; 

image_size = [26.15,16+ROC]; % [cm] 

x_resolution = 480; % image resolution [pix] 
y_resolution = 640; 

% assign the inputs 
x = image_size(2); 
y = image_size(1); 

disp_rr=max(rr)/(im_depth-ROC); 

%plot input image 
%subplot(1,2,1); imagesc(theta*(180/pi), rr/disp_rr, fliplr(IML')); title('polar geometry'); colormap(gray) 
%xlabel('theta [deg]') 
%ylabel('r [cm]'); hold on; 

% number of scan lines 
Nt = length(scan_lines(1, :)); 

% create regular Cartesian grid to remap to 
pos_vec_y_new = (0:1/(y_resolution-1):1).*y - y/2; 
pos_vec_y_new = pos_vec_y_new'; 
pos_vec_x_new = (0:1/(x_resolution-1):1).*x; 
[pos_mat_x_new, pos_mat_y_new] = ndgrid(pos_vec_x_new, pos_vec_y_new); 

% convert new points to polar coordinates 
[th_cart, r_cart] = cart2pol(pos_mat_x_new, pos_mat_y_new); 

% interpolate using linear interpolation 
op = interp2(steering_angles,r, scan_lines, th_cart, r_cart, 'linear').'; 

% set any values outside of the interpolation range to be 0 
% op(isnan(op)) = max(b_mode(:)); 
op(isnan(op)) = 0; 

%plot output image 
subplot(2,2,4); 
imagesc(pos_vec_y_new, pos_vec_x_new-ROC, op'); title('Cartesian geometry'); colormap(gray); 
xlabel('lat [cm]') 
ylabel('ax [cm]'); 
caxis([7.2,max(max(op))]) 
+1

Хорошая работа. Я начал играть с вашим изображением, а затем должен был отказаться от реальной работы. –

 Смежные вопросы

  • Нет связанных вопросов^_^