1

Я недавно начал курс CV и просматриваю старые домашние задания (текущие не выпускаются). Я реализовал функцию Hough Lines, я прохожу через каждую точку, если это ребро, затем я прохожу через 0-180 (или от -90 до 90) значений theta, вычисляя rho и, наконец, сохраняю в массиве.Как найти строку из полярных координат (Hough Transform Confusion)

Когда я попытался преобразовать обратно из полярных координат, я могу найти пару X, Y (используя rho * sin (theta) и rho * cos (theta)), однако я не понимаю, как преобразовать это к прямой в декартовом пространстве. Чтобы иметь линию, вам нужно либо 2 точки, либо точку и направление (при условии, что луч тогда, конечно)

Я просто понимаю, где точка.

Я сделал несколько поисков, но не могу показать довольно найти ответ, люди склонны говорить, полярный говорит вам x, то bam у вас есть линия в декартовой, но мне кажется, что отсутствует соединение где «бам» был.

Что я имею в виду, описано здесь; Explain Hough Transformation

Также Vector/line from polar coordinates Где это вопрос, как начертить линию от полярных координат, что ответ был хорошо вот х и у. но мне никогда не упоминается остальная часть этого решения.

Является ли линия каким-то образом связана с y = mx + b, где m является тета и b является rho?

Если нет, то как преобразовать обратно в строку в декартовом пространстве.

EDIT: После просмотра ответ Sunreef, и пытается преобразовать так у было на это свою сторону, я обнаружил этот ответ, а также: How to convert coordinates back to image (x,y) from hough transformation (rho, theta)?

Это появляется то, что я думаю, что я смотрю на это это

м = -cotθ

с = р * cosecθ

РЕДАКТИРОВАТЬ # 2 я Fo и некоторые другие примеры в сети. В принципе да, мне понадобятся rho * sin (theta) и rho * cos (theta)

Другая часть, которая меня испортила, заключалась в том, что мне нужно было конвертировать в радианы, как только я это сделал, я начал получать хорошие результаты ,

ответ

1

Взятые из Wikipedia:

Не-радиальная линия, которая пересекает радиальной линии ф = ɣ перпендикулярно в точке (г0, ɣ) имеет уравнение: R (φ) = г0 * сек (ф - ɣ).

Если я полагаю, что координаты у вас есть для вашей линии являются ɣ и r0, то вы можете переписать это уравнение так:

г (ф) * Cos (ф) * Cos (Ɣ) + г (φ) * sin (φ) * sin (ɣ) - r0 = 0

И мы знаем, что при переводе полярны декартовых координат, если мы имеем точку Р (г, φ) в то его координаты в декартовой плоскости будут:

х = г * COS (φ)

у = г * Sin (φ)

Таким образом, приведенное выше уравнение становится уравнением линии следующим образом:

х * соз (ɣ) + y * sin (ɣ) - r0 = 0

Это уравнение вашей линии в декартовых координатах.

(Скажи мне, если вы видите какие-то ошибки, я сделал это быстро)

+0

Я не вспоминаю себя от верхней части головы, если ваше окончательное уравнение прав, однако я переделал вещи, пытаясь добраться до y = ... но я думаю, что, возможно, я сделал это неправильно, ссылка, которую я добавил в моем EDIT мне удалось найти благодарность за ваш ответ. – onaclov2000

2

Вы правы, что вы можете получить некоторую базовую точку на линии, как

(X0, Y0) = (rho * cos(theta), rho * sin(theta)) 

и вы можете найти (единица измерения) вектор направления этой линии, перпендикулярные к нормальному:

(dx, dy) = (-sin(theta), cos(theta)) 
+0

этот ответ прост, потому что он очень прост и иллюстрирует точку, в которой параллельная линия с базовой точкой (-rho * cos (theta), -rho * sin (theta)), и соответствующая той же точке в (r, тета) пространства как (X0, Y0) выше, не может быть базовой точкой линии в декартовом пространстве, потому что она не лежит в положительном квадранте –

0

Я думаю, что вы ищете способ преобразования из полярной системы координат в декартову систему координат. Полярные координаты обеспечивают нас rho и theta. Rho означает перпендикулярное расстояние линии от начала координат. Theta представляет ориентацию линии. Вы можете легко понять, что эта информация может предоставить вам полную строку, а не только сегмент линии. Первый шаг - найти ногу перпендикуляра нашей желаемой линии или, как вы ее назвали, в декартовой системе. Это будет (R cos (theta), R sin (theta)). Теперь мы имеем точку нашей линии, и мы знаем, что линия ориентирована под углом tta относительно мнимого фиксированного луча, проходящего через начало координат (обычно это горизонтальная линия, идущая слева от начала координат). Таким образом, мы можем нарисовать лучи из нашей точки - например, P, под углом theta и Pi + theta. Отъезд https://docs.opencv.org/2.4/doc/tutorials/imgproc/imgtrans/hough_lines/hough_lines.html, чтобы получить лучшую идею!