Построение полярных изображений в MATLAB

У меня есть полярные данные 1024 X 256 (строки - радиус, угол столбцов), которые мне нужно отобразить в виде изображения. Я получил m-файл из файлового обмена, который может это сделать (нажмите здесь). Тем не менее, это очень медленно для больших изображений. Я считаю, что есть быстрый способ сделать это, используя функцию серфинга, с которой я борюсь. (см. код ниже)

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

Результат кажется неверным.

Любая идея, что я делаю неправильно? Спасибо!


person hkf    schedule 14.09.2012    source источник


Ответы (2)


Да, ваша проблема проста:

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.

person twerdster    schedule 14.09.2012

Подход М-файла правильный. Но вы правы, это реализуется очень медленно. Часть, которую вы упускаете, — это преобразование самих данных из полярных в прямоугольные, что является сложной частью. В настоящее время вы преобразуете координаты, которые хотите построить, но затем рисуете свои полярные данные, КАК ЕСЛИ бы они были декартовыми (накладывая свои декартовы координаты на данные).

Подход, который вы должны использовать, чтобы получить правильный И быстрый, заключается в следующем:

  1. Создайте декартову сетку (meshgrid) над областью, которую вы хотите нарисовать, по одной записи на пиксель назначения.
  2. Преобразуйте свои декартовы переменные x/y в полярные
  3. Масштабируйте свои полярные координаты до индексов в вашем полярном изображении (при этом учитываются размеры матрицы и глубина изображения)
  4. Используйте полярные индексы для интерполяции значений из полярного изображения, используя interp2 (это то, что делает медленный процесс быстрым)
  5. Полученное изображение представляет собой декартово изображение с расположением пикселей в исходных точках сетки x/y.

Имеет ли смысл этот процесс? При обработке изображений нормально начинать с целевого пространства (вот где вам нужны целые пиксели) и двигаться назад к дробным смещениям пикселей в исходном изображении, а затем интерполировать.

person Peter    schedule 14.09.2012
comment
Спасибо за ответ Петр. Я считаю, что ваше описание - это то, что использует другой алгоритм, с которым я столкнулся в обмене файлами. Однако для моих целей я могу обойтись без использования функции серфинга. - person hkf; 15.09.2012