Большинство камер поставляются с операцией устранения искажений, закодированной в конвейере камеры, поэтому вам, скорее всего, вообще не нужно искать параметры искажения. Просто убедитесь, что прямые линии на периферии изображения действительно прямые. Я ожидаю, что перекос будет близок к нулю, а fx=fy, поскольку пиксели квадратные.
Кроме указанных вами параметров есть еще два для главных точек Cx, Cy (пересечение оптической оси с датчиком, часто близкое к w/2, h/2). Таким образом, всего у вас есть только 3 параметра: F, Cx, Cy, причем первый из них является самым изменчивым среди телефонов одной модели (по моему опыту). Если вы не используете свой телефон для определения относительного положения другой камеры, скорее всего, вам нужно точно знать только фокусное расстояние.
Очевидно, что когда вам нужно беспокоиться об одном параметре, есть более простые способы получить его, чем использовать шахматную доску и пытаться найти внешние параметры в дополнение к внутренним. Вы можете понять это даже без измерений - просто запросите поле зрения камеры (например, getHorizontalViewAngle()) и используйте
tan(fov) = image_width/2 / f
В качестве альтернативы вы можете провести простое измерение, удерживая телефон параллельно цели: для вертикальной цели размером H, которая создает изображение из h пикселей, вы получите f как
f/z = h/H
person
Vlad
schedule
26.02.2014