Прямоугольное обнаружение с Hough преобразовывает

Я считаю код "наследием", если кто-либо из следующих условий применяются:

  • Это было записано с помощью языка или методологии, которая является поколением позади текущих стандартов
  • , код является полной путаницей без планирования или дизайна позади него
  • , Это записано на устаревших языках и в устаревшем, не объектно-ориентированном стиле
  • , трудно найти разработчиков, которые знают язык, потому что это настолько старо

В отличие от некоторых из других мнений здесь, я видел много современных приложений, которые работают прилично без модульных тестов. Поблочное тестирование все еще не завоевало популярность со всеми. Возможно, десять лет с этого времени следующее поколение программистов будет смотреть на наши текущие приложения и считать их "наследием" для не содержание модульных тестов, так же, как я рассматриваю не, что объектно-ориентированные заявления наследие.

, Если немного изменений должны быть внесены в кодовую базу прежней версии, лучше просто оставить его как есть и пойти с потоком. Если для приложения нужны решительные изменения функциональности, перестройка GUI, и/или Вы не можете найти никого, кто знает язык программирования, пора выбросить и запуститься. Слово предупреждения, однако: перезапись с нуля может быть очень трудоемкой, и трудно знать, копировали ли Вы всю функциональность. Вы, вероятно, захотите записать тестовые сценарии и модульные тесты для унаследованного приложения и нового приложения.

26
задан Dima 5 November 2009 в 21:44
поделиться

4 ответа

Я не математик. Я готов поправиться ...
Из Hough 2) ... любую линию на плоскости xy можно описать как p = x cos theta + y sin theta. В этом представлении p - нормальное расстояние, а theta - нормальный угол прямой линии, ... В практических приложениях углы theta и расстояния p квантуются, и мы получаем массив C (p, theta) .
из стандартных математических таблиц CRC Аналитическая геометрия, полярные координаты в разрезе на плоскости ... Такая упорядоченная пара чисел (r, theta) называется полярными координатами точки p. Прямые линии: пусть p = расстояние линии от O, w = угол против часовой стрелки от OX до перпендикуляра через O к прямой. Нормальная форма: r cos (тета - w) = p . Из этого я делаю вывод, что точки лежат в пространстве полярных координат.

0
ответ дан 28 November 2019 в 17:28
поделиться

Для тех из вас, кто интересуется бумагой, это:

Обнаружение прямоугольника на основе оконного преобразования Хафа Клаудио Росито Юнга и Родриго Шрамма.

Теперь согласно В документе точки пересечения выражаются в полярных координатах, очевидно, что ваша реализация может быть другой (единственный способ сказать, показать нам свой код).

Предполагая, что вы согласны с его обозначениями, ваши пики должны быть выражены как:

Peaks

Затем необходимо выполнить разделение пиков, заданное уравнением (3) в разделе 4.3 или

equation 3

, где T_theta представляет угловой порог, соответствующий параллельным линиям. и enter image description here - нормированный порог, соответствующий строкам одинаковой длины.

7
ответ дан 28 November 2019 в 17:28
поделиться

Ссылка на упомянутую статью не работает, но если вы использовали стандартное преобразование Хафа, то четыре точки пересечения будут выражены в декартовых координатах. Фактически, четыре строки, обнаруженные с помощью преобразования, будут выражены с использованием «нормальной параметризации»:

rho = x cos(theta) + y sin(theta)

, поэтому у вас будет четыре пары (rho_i, theta_i), которые идентифицируют ваши четыре строки. После проверки ортогональности (например, просто сравнивая углы theta_i) вы решаете четыре системы уравнений, каждая из которых имеет вид:

rho_j = x cos(theta_j) + y sin(theta_j)
rho_k = x cos(theta_k) + y sin(theta_k)

где x и y - неизвестные, представляющие декартовы координаты точки пересечения.

1
ответ дан 28 November 2019 в 17:28
поделиться

Точность пространства Хафа должна зависеть от двух основных факторов.

Аккумулятор отображается на пространство Хафа. Для циклического перебора массива аккумулятора требуется, чтобы аккумулятор делил пространство Хафа на дискретную сетку.

Второй фактор точности в линейном пространстве Хафа - это местоположение начала координат в исходном изображении. Посмотрите на мгновение, что произойдет, если вы проведете анализ \ theta для любого заданного изменения \ rho. Рядом с исходной точкой одна из этих разверток будет охватывать гораздо меньше пикселей, чем развертка по краям изображения. Это приводит к тому, что около краев изображения вам нужно гораздо более высокое разрешение \ rho \ theta в вашем аккумуляторе, чтобы достичь того же уровня точности при преобразовании обратно в декартово.

Проблема с увеличением разрешения, конечно же, в том, что для его увеличения вам потребуется больше вычислительной мощности и памяти. Также, если вы равномерно увеличиваете разрешение аккумулятора, вы теряете разрешение около начала координат, где оно не требуется.

Некоторые идеи, которые могут помочь с этим.

  1. поместите начало координат прямо в начало координат. центр изображения. в отличие от используя естественный нижний левый или верхний слева от изображения в коде.
  2. попробуйте использовать ближайшее изображение, которое вы можете попасть на площадь. более вытянутый изображение для данной области, тем больше объявил ловушку разрешения становится по краям
  3. Попробуйте разделить изображение на 4/9/16 разные аккумуляторы, каждый с источник в центре этого фрагмента изображения. Это потребует небольших накладных расходов, чтобы связать результаты каждого аккумулятора вместе для обнаружения прямоугольника, но это должно помочь распределять разрешение более равномерно.
  4. Конечным решением было бы увеличить разрешение линейно зависит от расстояние от начала координат. это может быть достигнуто с помощью

    (x-a)^2 + (y-b)^2 = \rho^2

circle equation where
    - x,y are the current pixel
    - a,b are your chosen origin
    - \rho is the radius
once the radius is known adjust your accumulator
resolution accordingly. You will have to keep
track of the center of each \rho \theta bin.
for transforming back to Cartesian
4
ответ дан 28 November 2019 в 17:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: