Рассчитайте площадь трапеции по рисунку, корректируя угол - PullRequest
4 голосов
/ 26 июля 2011

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

Кто-нибудь может указать мне правильное направление?Мои математические навыки довольно ржавые (и никогда не были особенно сильными).

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

An example of the type of picture I need to use to calculate area

Ответы [ 2 ]

3 голосов
/ 26 июля 2011

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

2 голосов
/ 26 июля 2011

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

  1. Если вам известен угол открытия объектива, использованного для съемки, и вы знаете точное расстояние до крыши во время съемки (расстояние между камерой и водосточным желобом), и изображение было сделано точно так же, как в Ваш образец с крышей, перпендикулярной оси камеры, а камера направлена ​​прямо в горизонтальный центр желоба, и вы наверняка знаете, что крыша прямоугольная, тогда она удивительно проста. Если вы не возражаете против 10-25%. (в зависимости от точности различных измерений).
  2. Если вы не можете знать угол открытия объектива (потому что снимок сделан не камерой, которой вы управляете, или потому, что снимок сделан камерой с зум-объективом), но есть объект известного размера На известном расстоянии от камеры на изображении оно все равно удивительно просто, поскольку можно определить угол раскрытия от известного объекта. Объект должен быть значительно большим на изображении (50% горизонтальной ширины на изображении или около того), но он может быть ближе к фотографу, поэтому он не должен быть таким же большим, как крыша.
  3. Если вы не можете контролировать точное положение, из которого был сделан снимок (то есть он не будет сделан прямо напротив центра желоба), ваша точность будет слишком низкой.

Если вам известен горизонтальный угол раскрытия alpha камеры, расстояние Dgut между камерой и желобом, ширина желоба в пикселях Wgut и ширина изображения в пикселях Wim, то Вы можете определить приблизительную длину желоба Lgut из:

Dpixgut= Wim/(tan(alpha/2)) # distance to the gutter in pixel space
tan(anggut) = Wgut/Dpixgut # tan of half "opening angle" of the gutter 
Lgut= 2*tan(anggut)*Dgut

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

Dpixtop=Wim/(tan(alpha/2)) #dist to top in pixel space
tan(angtop)=Wtop/Dpixtop
Dtop=Ltop/(2*tan(angtop)) #dist to roof in real space (note that Ltop=Lgut)

Dtop-Dgut дает приблизительную оценку длины Lroof крыши, поэтому Dgut*Lroof является приблизительным приближением к площади. Чтобы быть более точным, вы должны включить некоторые расчеты, аналогичные приведенным выше, чтобы определить высоту желоба и верхнюю часть крыши над осью камеры, а затем отрегулируйте Lroof для этого.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...