Храмы России

Проект посвящен православным и старообрядческим храмам России, уничтоженным и сохранившимся до наших дней, забытым и действующим.
Текущее время: 28 мар 2024, 18:49

Часовой пояс: UTC + 3 часа


Итоговая часть проекта:

Прокудин-Горский. Наследие. Фотографии.



Начать новую тему Ответить на тему  [ Сообщений: 65 ]  На страницу 1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: Измерения по фотографиям
СообщениеДобавлено: 15 фев 2016, 11:27 
Не в сети

Зарегистрирован: 30 май 2008, 06:42
Сообщений: 690
1. Как определить точку съемки.

Если на фотографии есть идентифицируемые и сохранившиеся объекты, то определение точки съемки не слишком сложно.

Для примера возьмем снимок "Вид Осташкова с Вороньего острова":

[1117]

На этом снимке виден шпиль Преображенской колокольни в городском парке: слева (т.е. к востоку) от Троицкой колокольни на половину ее ширины:

Изображение

Делаем скриншот спутниковой карты (например, из гугл-мапс) и проводим линию от Преображенской колокольни так, чтобы она проходила к западу от Троицкой колокольни примерно на половину ее ширины (это превью, смотрите в полном размере):

Изображение

Наша линия выходит на западную оконечность о. Воронье.

Теперь мы можем достаточно уверенно утверждать, что снимок был сделан не просто с о. Воронье, а с его западного мыса.

Если на снимке есть несколько пар "дальний объект за ближним", можно провести на спутниковой карте несколько линий. Место их пересечения и будет точкой съемки. В данном случае это в общем-то не требуется: остров небольшой, и фотограф находился вблизи его южного берега (на переднем плане снимка нет суши).

Если самому находиться на месте съемки, то по тому, как ближние объекты перекрывают дальние, можно определить точку съемки достаточно точно. Для этого следует иметь снимок при себе (распечатать его или вывести на экран мобильного устройства) и попытаться найти положение, в котором перекрытия будут такими же, как на снимке.


Вернуться наверх
 Профиль Отправить личное сообщение  
Сообщение №18444 [ссылка на это сообщение]   
 Заголовок сообщения: Re: Измерения по фотографиям
СообщениеДобавлено: 15 фев 2016, 13:12 
Не в сети

Зарегистрирован: 30 май 2008, 06:42
Сообщений: 690
2. Как определить фокусное расстояние объектива камеры - алгоритм.

Если известна точка съемки, а на фото присутствуют сохранившиеся объекты, то можно определить фокусное расстояние объектива камеры. Разумеется, не его абсолютное значение в мм, а его отношение к размерам снимка (например, к его ширине).

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

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

Так, если исходные координаты в пикселях на снимке имели значения xs и ys, то пересчитанные координаты x и y можно найти по формулам

x=(xs-0.5*w)/w
y=(0.5*h-ys)/w

, где w и h - ширина и высота снимка в пикселях.

Теперь используем известную формулу из аналитической геометрии для угла между двумя векторами:

Cos(A) = (R1,R2)/(|R1|*|R2|)

или

Cos(A) = (x1*x2+y1*y2+F^2)/(sqrt(x1^2+y1^2+F^2)*sqrt(x2^2+y2^2+F^2))

где x1,y1 и x2,y2 - координаты (пересчитанные относительно центра изображения) двух опорных точек, А - угол между ними, а F - фокусное расстояние.

Введем обозначения

k=x1*x2+y1*y2
k1=x1^2+y1^2
k2=x2^2+y2^2
С=Cos(A)
G=F^2

и упростим уравнение:

C = (k+G)/(sqrt(k1+G)*sqrt(k2+G))

или

(k1+G)*(k2+G)*C^2 = (k+G)^2

или

(1-С^2)*G^2+(2*k-(k1+k2)*C^2)*G+(k^2-C^2*k1*k2) = 0

, т.е. квадрат фокусного расстояния можно найти как положительный корень квадратного уравнения с коэффициентами
a=(1-С^2), b=(2*k-(k1+k2)*C^2) и c=(k^2-C^2*k1*k2).

Находим корень и, извлекая из найденного числа квадратный корень, определяем фокусное расстояние F.

Теперь можно определить угловые поля зрения нашей камеры по горизонтали и вертикали HFOV и VFOV:

HFOV=2*arctg(0.5/F)
VFOV=2*arctg(0.5*(h/w)/F)

w и h - ширина и высота снимка в пикселях.

Замечание: предполагается, что снимок не кадрирован (или, по крайней мере, кадрирован симметрично, так что центр изображения остался на месте), а также что дисторсия объектива достаточно мала. Если эти условия не выполнены, метод может дать существенные ошибки.


Вернуться наверх
 Профиль Отправить личное сообщение  
Сообщение №18445 [ссылка на это сообщение]   
 Заголовок сообщения: Re: Измерения по фотографиям
СообщениеДобавлено: 15 фев 2016, 13:43 
Не в сети

Зарегистрирован: 30 май 2008, 06:42
Сообщений: 690
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 градуса соответственно.


Вернуться наверх
 Профиль Отправить личное сообщение  
Сообщение №18446 [ссылка на это сообщение]   
 Заголовок сообщения: Re: Измерения по фотографиям
СообщениеДобавлено: 15 фев 2016, 14:12 
Не в сети

Зарегистрирован: 30 май 2008, 06:42
Сообщений: 690
4. Определение угловых расстояний по фотографии - алгоритм.

Если известно фокусное расстояние, то можно легко вычислить угловое расстояние между любыми двумя точками на снимке.

Для этого можно воспользоваться уже приведенной формулой:

Cos(A) = (R1,R2)/(|R1|*|R2|)

или

Cos(A) = (x1*x2+y1*y2+F^2)/(sqrt(x1^2+y1^2+F^2)*sqrt(x2^2+y2^2+F^2))

где x1,y1 и x2,y2 - координаты (пересчитанные относительно центра изображения) двух опорных точек, А - угол между ними, а F - фокусное расстояние.

Так как Perl не умеет вычислять арккосинус, то можно по значению косинуса найти тангенс нашего угла с помощью известного тождества 1/Cos^2(A)=tg^2(A)+1:

tg(A)=sqrt(1/Cos^2(A)-1)

и вычислить арктангенс полученного числа.


Вернуться наверх
 Профиль Отправить личное сообщение  
Сообщение №18447 [ссылка на это сообщение]   
 Заголовок сообщения: Re: Измерения по фотографиям
СообщениеДобавлено: 15 фев 2016, 14:36 
Не в сети

Зарегистрирован: 30 май 2008, 06:42
Сообщений: 690
5. Определение угловых расстояний по фотографии - пример.

В качестве примера определим угловое расстояние между центром Троицкого собора и колокольней Знаменского монастыря (у левой границы кадра, точка с координатами (60;450)).

Расчетный скрипт:

Цитата:
# Исходные данные

# Ширина и высота снимка
$w=1000;
$h=917;

# Фокусное расстояние
$f=1.957083;

# Координаты опорных точек 1 и 2
$x1=538;
$y1=450;

$x2=60;
$y2=450;

# -------------------------------------
$pi = 3.141592653589;

# Печать исходных данных
printf "Image size %d x %d\n", $w, $h;
printf "F: %f\n", $f;
printf "Point 1: %d;%d\n", $x1, $y1;
printf "Point 2: %d;%d\n", $x2, $y2;
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+$f*$f;
$k1=$x1*$x1+$y1*$y1+$f*$f;
$k2=$x2*$x2+$y2*$y2+$f*$f;

$ca=$k/(sqrt($k1)*sqrt($k2));

printf "Cos: %f\n", $ca;

# Вычисление и печать тангенса угла
$t=sqrt(1/($ca*$ca)-1);

printf "Tan: %f\n", $t;

# Вычисление и печать значения угла
$an=atan2($t,1);
$ad=180*$an/$pi;

printf "Angle: %f deg (%f mrad)\n", $ad, $an*1000;


Результат работы:

Цитата:
Image size 1000 x 917
F: 1.957083
Point 1: 538;450
Point 2: 60;450
------------------------

Point 1: 0.038000;0.008500
Point 2: -0.440000;0.008500

Cos: 0.971205
Tan: 0.245310
Angle: 13.783033 deg (240.559303 mrad)


Таким образом, разность азимутов колокольни Знаменского монастыря и Троицкого собора из точки, откуда был сделан снимок, составляет 13,8 градусов или 240 миллирадиан (тысячных).

О полезности тысячных я напишу далее.


Вернуться наверх
 Профиль Отправить личное сообщение  
Сообщение №18448 [ссылка на это сообщение]   
 Заголовок сообщения: Re: Измерения по фотографиям
СообщениеДобавлено: 15 фев 2016, 16:31 
Не в сети

Зарегистрирован: 30 май 2008, 06:42
Сообщений: 690
6. Тысячные и с чем их едят.

Ясно, что линейный размер предмета, его угловой размер и расстояние до него связаны: чем дальше предмет, тем меньше его угловой размер.

Если угловой размер предмета достаточно мал, то связь между вышеперечисленными величинами можно выразить приближенной формулой:

L=AD

, где L - линейный поперечный размер предмета в метрах, А - угловой размер в тысячных (т.е. миллирадианах), D - расстояние до предмета в километрах (тысячах метров).

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

Если же известны угловой и линейный размеры, то можно определить расстояние до предмета:

D=L/A

Формула эта - приближенная, однако для углов менее 240 тысячных (т.е. примерно 14 градусов) ошибка составит менее процента, что более чем достаточно для большинства случаев.

Перевод градусов в тысячные и обратно:
1 градус = 17,45 тысячных
1 тысячная = 0,0573 градуса

Кстати, в тысячных градуированы угломерные сетки в биноклях: большое деление - 10 тысячных, малое - 5 (соответственно 0,573 и 0,287 градуса).


Вернуться наверх
 Профиль Отправить личное сообщение  
Сообщение №18449 [ссылка на это сообщение]   
 Заголовок сообщения: Re: Измерения по фотографиям
СообщениеДобавлено: 15 фев 2016, 17:35 
Не в сети

Зарегистрирован: 30 май 2008, 06:42
Сообщений: 690
7. Пример практического применения.

Найдем высоту колокольни церкви на Светлице:

[1116]

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

Изображение

По спутниковой карте замерим угол между углами крыш, получаем 7,73 градуса.

Снимаем координаты маркеров на крышах, получаем (430;371) и (658;369).

Размер снимка - 896х800.

Определяем фокусное расстояние:

Цитата:
Image size 896 x 800
Point 1: 430;371
Point 2: 658;369
Angle: 7.730000 deg
------------------------

Point 1: -0.020089;0.032366
Point 2: 0.234375;0.034598

D: 0.004065
F: 1.876931
F36: 67.569522
HFOV: 29.833479
VFOV: 26.758428


Теперь снимаем координаты маркеров колокольни: (298;383) и (298;322).

Рассчитываем угол между этими маркерами:

Цитата:
Image size 896 x 800
F: 1.876931
Point 1: 298;383
Point 2: 298;322
------------------------

Point 1: -0.167411;0.018973
Point 2: -0.167411;0.087054

Cos: 0.999349
Tan: 0.036112
Angle: 2.068163 deg (36.096259 mrad)


Угол равен 36,1 тысячных.

По Яндекс-карте замеряем расстояние от точки съемки до места, где была церковь, получаем 700 м (0,7 км).

Определяем высоту колокольни:

h=0,7*36,1=25,3 м.


Вернуться наверх
 Профиль Отправить личное сообщение  
Сообщение №18450 [ссылка на это сообщение]   
 Заголовок сообщения: Re: Измерения по фотографиям
СообщениеДобавлено: 16 фев 2016, 11:07 
Не в сети

Зарегистрирован: 30 май 2008, 06:42
Сообщений: 690
8. Расчеты в Excel/Calc

Так как perl установлен не у всех, описанные выше алгоритмы расчета реализованы в Excel (либо Calc из OpenOffice).

Таблица содержит два листа.

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

Второй лист - "Углы", он рассчитывает углы между направлениями на заданные пользователем точки. Входные данные: размеры снимка в пикселях, координаты опорного направления (точка 0) и фокусное расстояние камеры, а также таблица координат точек на фото (до 20 точек). Рассчитываются углы между опорным направлением и направлениями на точки из таблицы.

Ячейки для ввода данных выделены зеленым, остальные защищены от изменений. Для модификации файла нужно предварительно снять защиту листа.

Расчетный файл - в приложении к данному сообщению.

PS К сожалению, приложить к сообщению файл .xls нельзя (запрещено администратором). Надеюсь, проблему можно как-то решить.


Вернуться наверх
 Профиль Отправить личное сообщение  
Сообщение №18455 [ссылка на это сообщение]   
 Заголовок сообщения: Re: Измерения по фотографиям
СообщениеДобавлено: 18 фев 2016, 14:44 
Не в сети

Зарегистрирован: 13 апр 2010, 23:03
Сообщений: 3163
Подъезд к ж.д. мосту через р. Лососинку около ст. Петрозаводск [Олонецкой] ж.д.

[0239]

Возможно ли определить расстояние до моста? Дрезина и мост сбоку крупным планом:
[0245] [0240]


Вложения:
l.jpg
l.jpg [ 93.73 KiB | Просмотров: 9916 ]
Вернуться наверх
 Профиль Отправить личное сообщение  
Сообщение №18470 [ссылка на это сообщение]   
 Заголовок сообщения: Re: Измерения по фотографиям
СообщениеДобавлено: 18 фев 2016, 16:23 
Не в сети

Зарегистрирован: 30 май 2008, 06:42
Сообщений: 690
DMITRY писал(а):
Подъезд к ж.д. мосту через р. Лососинку около ст. Петрозаводск [Олонецкой] ж.д.

Возможно ли определить расстояние до моста? Дрезина и мост сбоку крупным планом:


Примерно можно.

Предположим, что фокусное расстояние - 1,95 (в единицах длинной стороны кадра). Таким объективом Прокудин-Горский снимал в Осташкове.

Открываем полноразмерный снимок: http://prokudin-gorskiy.ru/library/recovery/0240_914o.jpg

Слева на мосту стоят три человека. Координаты макушки правого - (902;900), а подошв - (902;1060).

Вбиваем в мой экселевский файл фокусное расстояние, размер снимка (3342х2950), одну из точек берем как опорную, а другую - первой в список.

Скриншот - в приложении.

Вложение:
Комментарий к файлу: Скриншот расчета
calc.png
calc.png [ 94.36 KiB | Просмотров: 9906 ]


Угол - 24,2 тысячных.

Рост человека примем за 1,75 м (средний).

Расстояние D=H/A=1,75/24,2=0,072 км = 72 м.

Расстояние до группы людей на заднем плане - вдвое больше, т.е. примерно 150 м (точки (2450;1314) и (2450;1394), угол 12.2 тысячных. Если угол практически точно вдвое меньше, то расстояние - вдвое больше.

Координаты (широту и долготу) этого мостика не дадите? Что-то не нашел в Google Earth с ходу. По спутниковому снимку, может быть, возможно более-менее определить точку съемки.


Вернуться наверх
 Профиль Отправить личное сообщение  
Сообщение №18471 [ссылка на это сообщение]   
 Заголовок сообщения: Re: Измерения по фотографиям
СообщениеДобавлено: 18 фев 2016, 16:42 
Не в сети

Зарегистрирован: 13 апр 2010, 23:03
Сообщений: 3163
Координаты моста:
http://wikimapia.org/#lang=en&lat=61.772575&lon=34.346631&z=16&m=b&search=%D0%B1%D0%B5%D0%BB%D0%BE%D0%BC%D0%BE%D1%80%D1%81%D0%BA


Вложения:
k.jpg
k.jpg [ 32.75 KiB | Просмотров: 9865 ]
Вернуться наверх
 Профиль Отправить личное сообщение  
Сообщение №18472 [ссылка на это сообщение]   
 Заголовок сообщения: Re: Измерения по фотографиям
СообщениеДобавлено: 18 фев 2016, 16:57 
Не в сети

Зарегистрирован: 13 апр 2010, 23:03
Сообщений: 3163
"Расстояние D=H/A=1,75/24,2=0,072 км = 72 м."

По-моему, 72 метра - это мало. Если брать наимен. длину рельса (10,6 м) http://temples.ru/forum/viewtopic.php?p=12599#p12599 , то примерно 14 рельсов до моста, и получится около 140 метров.
И расстояние до дальней группы не выглядит в 2 раза больше, чем до моста.


Вернуться наверх
 Профиль Отправить личное сообщение  
Сообщение №18473 [ссылка на это сообщение]   
 Заголовок сообщения: Re: Измерения по фотографиям
СообщениеДобавлено: 18 фев 2016, 17:03 
Не в сети

Зарегистрирован: 30 май 2008, 06:42
Сообщений: 690
DMITRY писал(а):
Координаты моста:


Ага, нашел. Ну, вряд ли получится: дорога теперь двухколейная, мосты выстроили заново. Но, наверно, если будем считать, что съемка велась метров за 70-80 от ближней опоры - не очень ошибемся.

Жаль, что экселевский расчетный файл нельзя выложить... Может, администраторы помогут?


Вернуться наверх
 Профиль Отправить личное сообщение  
Сообщение №18474 [ссылка на это сообщение]   
 Заголовок сообщения: Re: Измерения по фотографиям
СообщениеДобавлено: 18 фев 2016, 17:22 
Не в сети

Зарегистрирован: 30 май 2008, 06:42
Сообщений: 690
DMITRY писал(а):

По-моему, 72 метра - это мало. Если брать наимен. длину рельса (10,6 м) http://temples.ru/forum/viewtopic.php?p=12599#p12599 , то примерно 14 рельсов до моста, и получится около 140 метров.
И расстояние до дальней группы не выглядит в 2 раза больше, чем до моста.


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

Пересчитаем.

Полагаю, метров 200. Там слева человек стоит, его угловая высота у меня получилась в 8,5 тысячных. Ну, это примерно, т.к. его ног не видно, брал по основанию рельса, за которым он стоит. Да и рост 1,75 м - плюс-минус, конечно.

Расчет - в приложении, снимок http://www.veinik.by/foto/0201-0300/0239l.jpg кропнут по изображению, иначе пришлось бы пересчитывать фокусное расстояние (оно посчитано для снимка без полей).

Вложение:
Комментарий к файлу: Расчет
calc.png
calc.png [ 66.73 KiB | Просмотров: 9900 ]


Вернуться наверх
 Профиль Отправить личное сообщение  
Сообщение №18475 [ссылка на это сообщение]   
 Заголовок сообщения: Re: Измерения по фотографиям
СообщениеДобавлено: 18 фев 2016, 18:47 
Не в сети

Зарегистрирован: 13 апр 2010, 23:03
Сообщений: 3163
[0239]

Юрий, спасибо за расчет!
Ниже наиболее близкое по расстоянию сравнение, немногим более 200 метров (перед мостом пикетный столбик №9).
http://prokudin-gorskiy.ru/group.php?ImageID=888


Вложения:
Комментарий к файлу: Вид к лососинскому мосту, 24.9.2015.
0039.JPG
0039.JPG [ 708.83 KiB | Просмотров: 9884 ]
Вернуться наверх
 Профиль Отправить личное сообщение  
Сообщение №18476 [ссылка на это сообщение]   
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 65 ]  На страницу 1, 2, 3, 4, 5  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Православное христианство.ru. Каталог православных ресурсов сети интернет