2014-11-11 2 views
0

У меня очень простая математическая проблема, но я не могу понять ее. Мне нужно рассчитать, какая часть земли будет видна при просмотре с камеры, установленной на БПЛА. Я считаю, что я решил, что смотрю прямо вниз, но камера находится на кардане и будет иметь полный диапазон движения по всем осям.Подсчет аэрофотоснимков на землю Оценка

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

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

float cameraX; // camera sensor x size (mm) 
float cameraY; // camera sensor y size (mm) 
float cameraF; // camera focal length (mm); common lengths: 150mm (wide angle), 300mm (normal) 
float altitude; // high above ground (m) 
float ax; 
float ay; 

void calculateGroundCoverage() { 
    ax = (altitude/cameraF) * cameraX; 
    ay = (altitude/cameraF) * cameraY; 
} 

void printGroundCoverage() { 
    System.out.print("x: " + cameraX + ", y: " + cameraY + ", f: " + cameraF + ", alt: " + altitude + "\t"); 
    System.out.println("footprint: " + ax + "m x " + ay + "m"); 
} 
+2

Это было [кросс вывешен на Math SE. ] (http://math.stackexchange.com/q/1016979/35416) Пожалуйста, не делайте этого. Решите об одном сообществе, а затем дайте сообществу какое-то время ответить, и только если вы не получите ответа через пару дней, тогда спросите на другом форуме, отвечая на вопрос своей аудитории и включая ссылки между вашими различными версиями. – MvG

ответ

0

Для каких высот это?

  • для маленьких (до 0,5 км), вы можете упростить землю самолетом
  • но только если вид камеры близка к перпендикулярной направлению к поверхности (Horizont не в представлении !!!)
  • +/- некоторая граничная безопасности принять поверхностные искажения во внимание
  • на больших высотах, которые необходимо принять во внимание, что поверхность эллипсоида

я делаю это немного по-другому, то ваш подход (потому что я использую DTM отображается на эллипсоиде Земли)

  1. создание матрицы преобразования, представляющими собой датчик камеры

    • чип самолет средней точки является источником
    • ось Z представляет направление визирования (по крайней мере, для меня)
    • ось Х представляет собой камеру вправо (* плоскость справа) направление
    • Y оси камеры вверх (* самолет вперед) направление
      • направления для нижней панели (камера не поворачивается)
    • взгляд здесь: transform matrix anatomy для того, как сделать это
  2. литой набор лучей из камеры охватывающих весь экран

    • , например, сделать сетки 8 х 8 лучей равномерно места на экране
    • с направлением от фокальной точки камеры в просмотре направление
    • , если у вас есть луч в середине, он будет иметь то же направление, что и ось Z камеры
    • все остальные будут повернуты, чтобы покрыть все FOV
  3. вычислить пересечение с поверхностью

    • для плоской поверхности это просто пересечение между плоскостью и полуось
    • для эллипсоида это немного сложнее, см: ray and ellipsoid intersection
    • это даст вам множество поверхности точки, видимые камерой
    • , если вам это необходимо в камере/плоскости, то конвертируйте его в это
    • GCS to LCS делается camera_LCS_point=Inverse(camera_matrix)*surface_GCS_point;
    • для плоской локальной точки вы можете создать отдельную матрицу преобразования, представляющую плоскость ...
  4. теперь формируют/плоские точки LCS камеры вы можете просто извлечь минимальное и максимальное х, у координаты

    • эти края области, охватываемые зрения камеры
    • для повышения точности вы можете найти лучи край
    • так что если ваши 2 соседних лучей попадает поверхность только один раз
    • затем бросил в середине луча между ними
    • это можно сделать нэ рекурсивно несколько раз увеличить точность без особых сложностей нагрузки
    • также вы можете добавить/к югу некоторые безопасность области, чтобы вычисленная области на основе высоты и направление наблюдения