我有一个非常简单的数学问题,但我似乎无法弄明白。我需要计算从无人机安装的摄像机观察时可见的地面部分。我相信我已经解决了直视,但是相机在万向节上,并且在所有轴上都会有全方位的运动。
问题的输入将是海拔高度(m),相机焦距(mm),相机传感器x长度(mm),相机传感器y长度(mm)以及每个平面中的倾斜角度。
以下是相机垂直向下时的情况(注意:这给了我地面覆盖的每一边的长度。理想情况下,我想要每个点,在这种情况下,是四个角矩形。)
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");
}
答案 0 :(得分:0)
这是为什么高度?
我的方法与你的方法有点不同(因为我使用DTM映射到地球的椭圆体上)
创建表示相机传感器的变换矩阵
从相机覆盖整个屏幕投射一组光线
计算与曲面的交点
camera_LCS_point=Inverse(camera_matrix)*surface_GCS_point;
现在形成相机/平面LCS点,您可以简单地提取最小和最大x,y坐标