Выдержка из Exif ShutterSpeedValue - Фотопедия
0 голосов
/ 09 июня 2019

Извлечение данных Exif из моей фотографии (с использованием python) среди других значений, которые у меня есть:

'ShutterSpeedValue': (8643856, 1000000), 'ApertureValue': (1695994, 1000000)

После некоторых исследований я обнаружил, что фактическая апертура определяется как:

1.8 = math.sqrt(math.pow(2, (1695994/1000000)))

Итак, диафрагма f / 1,8

Как рассчитать выдержку, учитывая значение ShutterSpeedValue (8643856, 1000000), найденное в данных Exif?

Ответы [ 2 ]

1 голос
/ 10 июня 2019

Exif: ShutterSpeedValue хранится в рациональной форме как APEX значение .

Система APEX представляет собой способ расчета экспозиции и работает с использованием логарифмов базы-2. Использование base-2 означает увеличение единицы на единицу, равную удвоению, которое мы знаем как 1 stop; что делает его довольно удобным для фотографов, если они хорошо разбираются в логарифмах (которыми мы сейчас не пользуемся). ( Джеймс Снелл )

Для перевода из APEX в секунды используйте следующее уравнение:

ShutterSpeedValue (Tv) = -log 2 (t)
⇒ t = 2 -Tv

Для конкретных значений с вашей камеры:

2 (- 8643856/1000000) = 1/2 (8,643856) = 1/400 сек

Смотри также:

1 голос
/ 09 июня 2019

Какая камера у этого формата Exif?

Я узнаю математику, но не значения.

Вот обычная математика:

Если вы просто нумеруете f / остановки, начинающиеся с
f / 1 = стоп номер 0,
f / 1.4 = стоп № 1,
f / 2 = остановка № 2,
f / 2.8 = остановка № 3 и т. д. ...

, затем f / stop = sqrt (2 ^ число остановки).

Обычная математика заключается в том, что sqrt (2 ^ a power) - это просто sqrt (2) ^ power. Если вы переместите 2 за пределы радикала, он должен стать квадратным корнем там.

Фактические числа f / stop сами по себе являются степенями sqrt (2)
(f / 1, f / 1.414, f / 2, f / 2.828, f / 4 и т. д.),
так что тогда та же математика просто:

f / 2.8 = стоп № 3, поэтому f / 2.8 = 1.414 ^ 3 = 2.828 точно. или ваш sqrt (2 ^ 3) имеет то же значение.

Фракции тоже работают, и f / 1.8 на 1/3 ступени меньше, чем f / 2, то есть число остановки (2 - 1/3) = 1.6667,
таким образом, f / 1.8 равно 1.414 ^ 1.6667 = f / 1.78, что является точным точным значением (это точный третий стоп под точным значением f / 2). F / 1.8 - это просто номинальная стоимость, округленная, так сказать, просто для того, чтобы показать людям. Но точное значение f / 1.78.

Скорости затвора работают аналогично, но их значения останова равны 1,2,4,8,16,32 и т. Д. (Те числа, которые являются степенями 2, не нуждающимися в дополнительном sqrt)
2 ^ 3 = 8 секунд.
2 ^ -3 = 1/8 секунды.

То есть значение ShutterSpeedValue (8643856, 1000000) будет 2 ^ 8,643856 = 400 секунд.
Последовательность затвора 1,2,4,8,16,32,64,128,256,512

показывает, что стоп-номер 8,6+ будет большим числом.

Если это значение можно считать отрицательным, то 2 ^ -8,643856 = 1/400 секунды

Но тогда любая скорость, превышающая 1 секунду, будет проблемой (или, может быть, есть какой-то внешний флаг?) И это тоже номиналы, а не точные значения. Что мне кажется очень странным.

Из вашей фракции (1695994/1000000),
your math.sqrt (math.pow (2, 1.695994)) намеревается, чтобы это было «число остановки». Но он вычисляет f / 1.800, но это номинальное число (существующее только в имени, а не реальное значение), и фактическое стандартное точное значение (которое работает с степенями EV, равными 2) должно быть f / 1.78.

Подробнее об этом стандартном математическом методе на моем сайте. https://www.scantips.com/lights/fstop2.html

Так что мне любопытно, откуда эти (1695994/1000000) цифры пришли?

Техника его масштабирования с x 1000 или x 1000000 является нормальной, известной и видимой, и тогда микросхему ЦП тогда не требуется математическая возможность с плавающей запятой. Но я подвергаю сомнению вычисление номинального числа? Возможно, микропрограмма может попытаться компенсировать ее показ пользователю как f / 1.8, но f / 1.8 или 1/400 секунды не являются точными числами, которые камера использует для вычисления EV и экспозиции.

...