2010-04-26 4 views
3

Представьте себе фотографию с изображением здания.Вычисление двумерных углов для 3D-объектов в перспективе

С учетом того, что лицо здания представляет собой прямоугольник с углами 90 градусов. Однако, поскольку его фотография, перспектива будет задействована, и параллельные края лица будут сходиться на горизонте.

С таким прямоугольником, как вы вычисляете угол в 2D векторов краев грани, находящейся под прямым углом к ​​ней?

В изображении ниже, синий лицо отмечен на фото, и мне интересно, как вычислить 2D вектор красной линии другого лица:

example http://img689.imageshack.us/img689/2060/leslievillestarbuckscor.jpg

Так что если вы игнорируете картину на мгновение и концентрируетесь на линиях, есть ли информация в одной из контуров лица - внутренние углы и т. д. - знать путь лица на другой стороне угла? Какова была бы формула?

example http://i41.tinypic.com/zvvgqc.jpg

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

+0

У вас уже есть красные края? – mmr

+0

С пониманием того, что синее лицо является прямоугольником, вы, вероятно, располагаете достаточной информацией для работы назад от синего лица -> синий трехмерный объект + камера -> красный 3-мерный объект + камера -> красные линии. – Amber

ответ

0

Это довольно просто, вы должны использовать базовые 2-х точечные перспективы правила.

Прежде всего вам нужно 2 точки схода, один слева и один справа от вашего объекта. Они оба останутся на одной линии горизонта.

alt text http://img62.imageshack.us/img62/9669/perspectiveh.png

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

0

Честно говоря, что бы я сделал, это Hough Transform на картинке и определить способ идентификации красных линий на изображении. Чтобы найти красные линии, я найду любые линии в преобразовании, которые касаются ваших синих. Хорошая вещь о преобразовании заключается в том, что вы получаете бесплатную информацию о углах.

Поскольку вы знаете, что вы смотрите на линии, вы также можете сделать Radon Transform и искать пики под конкретными углами; это по сути то же самое.

У Matlab есть хорошая функциональность для такого рода работ.

+0

Hough - интересный подход, с которым я знаком, но я ищу математический подход, чтобы сообщить мне, какие линии Hough доверять. – Will

+0

Является ли перекресток угла хорошей метрикой доверия? Поиск углов вашей синей отмеченной области должен быть выполнимым, особенно если для маркировки гарантировано четыре таких угла. Тогда линии, которые могут проходить через эту угловую точку, могут быть кандидатами и, возможно, выбрать ближайший ответ. – mmr

+0

Идея, что я могу отбросить шумные точки, ища подходящие линии, которые соответствуют перспективной проекции формы кандидата; это означает, что у меня должен быть форумла для проецирования ... – Will