Быстрый алгоритм полярного -> декартового преобразования

У меня есть изображение на полярной сетке. Это изображение должно быть преобразовано в декартову сетку, но единственный известный мне алгоритм очень медленный для этого. Теперь я использую декартову сетку, для каждой точки я нахожу значения r и theta, а затем я смотрю в двух векторах, чтобы найти наименьшую ошибку, определяемую как:

min {(th_vec - theta) ^ 2 + (диапазон - r) ^ 2}

Это дает вложенный цикл for внутри внешнего вложенного цикла for, поэтому у меня сложность O (N ^ 4). Изображение 512x512 использует целую минуту для завершения. Конечно, такая сложность не может быть использована, поэтому яИнтересно, кто-нибудь знает какие-либо более быстрые алгоритмы, чтобы сделать это?

У меня есть изображение и два вектора. Ось X изображения - это угол, а ось Y изображения - это длина от центра. Угол всегда составляет 0-2pi, а диапазон - от 0 до r_max.

Заранее спасибо.

РЕДАКТИРОВАТЬ: диапазон изменяется от 0 до r_max, а не от -r_max до r_max, как это было раньше. Я вижу, что были некоторые недоразумения. Я использовал нормальное, обратное преобразование с;


r=sqrt(x^2 + y^2);
theta=atan2(y,x);

Проблема в том, что я должен сначала преобразовать значения x и y в x ' и ты значения, поскольку сетка имеет значение от -r_max до r_max в полученном изображении, но в пикселях в данных. Итак, у меня есть изображение 512x512, но r_max может быть что-то вроде 3,512. Поэтому мне нужно преобразовать значение каждого пикселя в значение сетки, а затем найти значения r и тета. Когда я нашел значения r и theta, мне нужно пройти через два вектора, range и th_vec, чтобы найти пиксель в исходном изображении, который соответствует:

min {(range - r) ^ 2 + (th_vec - theta) ^ 2}

Это дает мне сложность O (n ^ 4), поскольку векторы th_vec и range имеют тот же размер, что и изображение. Поэтому, если у меня квадратная матрица из 512х512 элементов, я должен выполнить 68 719 476 736 элементов, что очень медленно. Так что я'интересно, есть ли более быстрый алгоритм? Я могу'изменить входные данные, так что, насколько я знаю, это единственный способ сделать это, если вы неНачнем с триангуляции и прочего, но это дорого во времена памяти.

Ответы на вопрос(7)

Ваш ответ на вопрос