3. Как определить фокусное расстояние объектива камеры - пример.Используем для примера тот же снимок, что и ранее:
[1117]
Размер снимка - 1000 х 917 пикселей.
В качестве контрольных точек используем середину фасада Троицкого собора и середину Воскресенской колокольни.
Координаты первой точки на снимке - (538;450), а второй - (772;450).
По спутниковой карте мерим угол между направлениями на середину Троицкого собора и середину Воскресенской колокольни. Измерение дает 6,80 градусов.
Для расчета используем следующий скрипт Perl (при желании его легко перевести на другой популярный язык):
Цитата:
# Исходные данные
# Ширина и высота снимка
$w=1000;
$h=917;
# Координаты опорных точек 1 и 2
$x1=538;
$y1=450;
$x2=772;
$y2=450;
# Величина угла в градусах
$an=6.80;
# -------------------------------------
$pi = 3.141592653589;
$ca=cos($an*$pi/180);
# Печать исходных данных
printf "Image size %d x %d\n", $w, $h;
printf "Point 1: %d;%d\n", $x1, $y1;
printf "Point 2: %d;%d\n", $x2, $y2;
printf "Angle: %f deg\n", $an;
print "------------------------\n\n";
# Пересчет координат и их нормирование
$x1=($x1-0.5*$w)/$w;
$x2=($x2-0.5*$w)/$w;
$y1=(0.5*$h-$y1)/$w;
$y2=(0.5*$h-$y2)/$w;
# Печать пересчитанных координат
printf "Point 1: %f;%f\n", $x1, $y1;
printf "Point 2: %f;%f\n", $x2, $y2;
print "\n";
# Расчет
$k=$x1*$x2+$y1*$y2;
$k1=$x1*$x1+$y1*$y1;
$k2=$x2*$x2+$y2*$y2;
$ca2 = $ca*$ca;
# Вычисление коэффициентов квадратного уравнения
$a=1-$ca2;
$b=2*$k-($k1+$k2)*$ca2;
$c=$k*$k-$ca2*$k1*$k2;
# Решение квадратного уравнения: вычисляем дискриминант
$d=$b*$b-4*$a*$c;
printf "D: %f\n", $d;
$d=sqrt($d);
# Вычисляем положительный корень
$f=($d-$b)/(2*$a);
# Вычисляем и печатаем фокусное расстояние
# в единицах ширины кадра и в эквиваленте для кадра 24х36
$f=sqrt($f);
printf "F: %f\n", $f;
printf "F36: %f\n", $f*36;
# Вычисляем и печатаем угловые размеры поля зрения
# по горизонтали и по вертикали
$hfov=360*atan2(0.5,$f)/$pi;
$vfov=360*atan2(0.5*($h/$w),$f)/$pi;
printf "HFOV: %f\n", $hfov;
printf "VFOV: %f\n", $vfov;
Результат работы скрипта:
Цитата:
Image size 1000 x 917
Point 1: 538;450
Point 2: 772;450
Angle: 6.800000 deg
------------------------
Point 1: 0.038000;0.008500
Point 2: 0.272000;0.008500
D: 0.002883
F: 1.957083
F36: 70.454996
HFOV: 28.662984
VFOV: 26.370599
Таким образом, фокусное расстояние камеры в 1,96 раза больше ширины кадра, и составляет 70 мм в 36-мм эквиваленте.
Углы зрения по горизонтали и вертикали - 28,7 и 26,4 градуса соответственно.