Определение перекрытия повернутых квадратов в детекторной системе - PullRequest
2 голосов
/ 20 февраля 2012

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

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

Редактировать: добавлен эскиз для уточнения

Sketch

Итак, я пытаюсь вычислить часть каждого входного пикселя (черные квадраты), который находится в данном пикселе детектора (красный квадрат), который может быть где угодно между 0 и 1. Затем его можно умножить на значение входного пикселя и суммировать по всем входным пикселям, чтобы рассчитать общий свет, собранный пикселем детектора.

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

Ответы [ 2 ]

0 голосов
/ 20 февраля 2012

Вот шаги, которые я бы использовал для этого.

  1. Убедитесь, что у вас есть координаты для углов обоих квадратов.
  2. Выберите либо квадрат
  3. Поверните кординаты углов обоих квадратов , чтобы квадрат, выбранный на первом шаге, имел стороны, параллельные осям x и y
  4. Проверьте, чтобы углыдругой квадрат находится внутри первого.Поскольку вы повернули, это так же просто, как проверить, находится ли координата x между левой и правой сторонами, а координата y - между верхней и нижней.

Чтобы повернуть точки, выиспользуйте функцию примерно так:

from math import sin, cos, radians

def rotate_points(x, y, angle):
    """Rotate a set of points `angle` degrees counterclockwise about
    the origin.
    """
    theta = radians(angle)
    x_prime = x * cos(theta) - y * sin(theta)
    y_prime = x * sin(theta) + y * cos(theta)
    return x_prime, y_prime
0 голосов
/ 20 февраля 2012

Если я правильно вас понимаю, то, что вы делаете, равносильно попытке найти перекрывающиеся квадраты на растровом изображении в градациях серого?Если да, можете ли вы сделать обнаружение углов и попытаться сделать квадраты из обнаруженных углов, а затем рассчитать перекрытие обнаруженных квадратов?Этот пример opencv может быть хорошей отправной точкой: https://code.ros.org/trac/opencv/browser/trunk/opencv/samples/python/squares.py?rev=907

Заранее извиняюсь, если я неправильно понял вопрос (например, меня смущает угол поворота).

...