Как измерить расстояния на изображении? - PullRequest
5 голосов
/ 21 мая 2010

Допустим, у нас есть изображение, похожее на

альтернативный текст http://www.curiousexpeditions.org/North%20Reading%20Room,%20UC%20Berkeley,%20California,%20USA.jpg

Допустим, мы уже использовали фильтры и алгоритм обнаружения краев на этом рисунке. Теперь моя цель - измерить расстояния (НЕ реальные расстояния, расстояние может быть в любой произвольной единице). Например: как мне найти длину зала? (до окна)

Или высота книжных полок? Как именно вы размещаете «шкалу» и измеряете. Я ищу идеи. Однако было бы полезно, если бы ответы были в терминах OpenCV.

Ответы [ 2 ]

0 голосов
/ 21 мая 2010

Поскольку вы можете предположить, что книжная полка параллельна той, которая находится под ней, то фактическое расстояние между книжными полками в любой точке равно. Вы можете определить, что после X пикселей глубины воспринимаемая высота уменьшается на Y%. Вы должны быть в состоянии быстро установить четкую схему. Все параллельные линии и прямые углы в вашем реальном пространстве упростят математику.

Постройте несколько начальных точек в начале и конце каждой книжной полки. Вы можете найти соответствующие математические темы здесь:
http://en.wikipedia.org/wiki/Slope
http://en.wikipedia.org/wiki/Cartesian_coordinate_system

0 голосов
/ 21 мая 2010

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

Вы упоминаете, что хотите измерить высоту книжных полок. Если вы можете считать, что близкая область книжной полки «короче», чем высота конца книжной полки в конце строки, все, что вам нужно, - это измерить расстояние. Выберите единицу измерения «пикселей», а затем измерьте расстояние с помощью теоремы Пифагора. (x ^ 2 + y ^ 2 = z ^ 2)

То, что вы, вероятно, действительно ищете, это чтобы высота ближайшего книжного шкафа была равна высоте дальнего книжного шкафа. В этом случае вы должны иметь больше информации. Вы должны выполнить 2D-> 3D-преобразование: у вас есть 2D-изображение, и вам нужно восстановить 3D-изображение из этого изображения. В этот момент вам нужна третья часть информации, так как вам нужно 3 переменные (X, y, z) из 2 переменных.

Вы определенно можете сделать это с OpenCV, если вы правильно откалибруете систему и у вас есть вторая контрольная точка (например, лазерная линия). Это называется подходом структурированного освещения - см. эту ссылку для получения дополнительной информации или Google "структурированное освещение машинного зрения"

...