5

Я ищу алгоритм, который вычисляет следующее: у меня есть изображение с предопределенной областью (зеленый на прилагаемом изображении). Пользователь рисует красный прямоугольник, и алгоритм должен вычислить, соответствует ли красный прямоугольник примерно зеленой. Например, положение красного прямоугольника на прикрепленном изображении будет в порядке.Алгоритм для сопоставления положения и размера двух прямоугольников

Что такое хороший способ вычислить это? Есть ли лучший алгоритм?

Моя идея - вычислить середину красного прямоугольника, а затем определить, находится ли середина внутри зеленого прямоугольника. Кроме того, я бы вычислил, если длина и высота соответствуют длине и высоте зеленого (на 25% больше или меньше).

Это хорошая идея? Любое другое предложение?

enter image description here

+1

Это зависит от того, чего вы пытаетесь достичь. – SergeyS

+0

Всегда ли рисованный прямоугольник пользователя должен перекрывать изображение, или прямоугольник можно рисовать в любом месте в этой области? –

+0

Пользователь должен выбрать специальный элемент на изображении, и алгоритм должен вычислить, выбрал ли он правильный элемент. –

ответ

10

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

1
  • Возьмите среднее расстояние между вершинами как критерий несоответствия.
  • Давайте предположим, что вершины первого прямоугольника являются [x1,y1], [x2,y2], [x3,y3], [x4,y4] и второй являются [a1,b1],[a2,b2],[a3,b3],[a4,b4]
  • Получить euclidiean distance между этими точками
  • Нижний расстояние означает лучшее соответствие, например, точное наложение даст 0, сдвиг формы или смещение смещение любого прямоугольника будет увеличьте среднее расстояние вершин.

enter image description here

1

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

Что я имею в виду выше, практически, является то, что я хотел бы следующие ответы от алгоритма, разъясняя, какой аспект сравнения не удается: ширина

  1. прямоугольника находится далеко.
  2. Высота вашего прямоугольника отходит.
  3. Горизонтальное размещение вашего прямоугольника не работает.
  4. Вертикальное размещение вашего прямоугольника находится в выключенном состоянии.

Назовем условия выше «неудачными условиями». Эти неудачные условия свидетельствуют о моем взгляде на сравнение, которое неизбежно направляет мой подход. Можно было бы просмотреть его по-разному («Область вашего прямоугольника выключена»). Пользователь, конечно же, мог бы получить более общие ответы, такие как:

  • Размеры вашего прямоугольника уходят.
  • Размещение вашего прямоугольника уходит.
  • Ваш прямоугольник выключен. Попробуй еще раз.
  • Чувак, ты пьян?

В дальнейшем я использую green для обозначения зеленого прямоугольника в качестве объекта и red для обозначения красного прямоугольника в качестве объекта. Все условия основаны на относительных ошибках, которые являются абсолютными ошибками, нормированными относительно фактических значений, т. Е. Значениями зеленого прямоугольника.

Одна вещь, которая должна быть указана, - это то, что означает «выход» для горизонтального и вертикального размещения. Это означает, что существует расхождение между расположением ключевой точки зеленого прямоугольника и местоположением соответствующей ключевой точки красного прямоугольника. Выберем центр прямоугольника в качестве ключевого момента для сравнения (можно было выбрать верхний левый угол прямоугольника).

Еще одна вещь, которую необходимо указать, - это то, как вы можете сравнить две точки относительно друг от друга, отдельно для каждой оси. Вам нужно ссылочное значение. Что вы можете сделать, так это рассчитать абсолютное смещение между двумя точками каждой оси. Затем вы можете рассчитать относительное смещение относительно соответствующего размера зеленого прямоугольника. Например, вы можете рассчитать относительное горизонтальное смещение как абсолютное смещение между центрами по оси x, разделенными на ширину зеленого прямоугольника. В общем, для сравнения, чтобы добиться успеха, я хотел бы, чтобы прямоугольники имели почти одинаковые размеры и почти тот же центр. Где «почти» следует количественно определить в процентах.

Относительно неудачу условие (1), при условии, что максимально допустимая относительная погрешность ширины прямоугольника составляет 25%, то логическое значение, которое нужно вычислить является:

| green.width - red.width |/green.width > 0.25 

Если выше значение true, то условие отказа (1) отключается. Чувак может быть пьян. Мы можем выйти и уведомить.

Об отсутствии условия (2), при условии, что максимальная допустимая относительная погрешность высоты прямоугольника составляет 30%, логическое значение, которое мы должны вычислить это:

| green.height - red.height |/green.height > 0.30 

Если выше значение true, то условие отказа (2) отключается. Мы можем выйти и уведомить.

Относительно неуспешное условие (3), при условии, что максимально допустимая относительная погрешность по горизонтали прямоугольника смещения составляет 15%, то логическое значение, которое нужно вычислить является:

| green.center.x - red.center.x |/green.width > 0.15 

Если выше значение true , то условие отказа (3) отключается. Мы можем выйти и уведомить.

Относительно неуспешное условие (4), при условии, что максимально допустимая относительная погрешность для вертикального смещения составляет 20% прямоугольника, то логическое значение, которое нужно вычислить является:

| green.center.y - red.center.y |/green.height > 0.20 

Если выше значение true , то условие отказа (4) отключается. Мы можем выйти и уведомить.

Если хотя бы одно состояние неисправности отключается, сравнение сравнивается. Если состояние ошибки не true, сравнение будет успешным, зеленый и красный прямоугольники почти одинаковы.

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