Я довольно ясно понимаю, что DOF зависит от:
и многое другое (как указано в этом комментарии ).
Но у меня вопрос: есть ли какая-нибудь формула, связывающая все эти факторы с глубиной резкости?
Учитывая эти значения, можно ли точно рассчитать глубину резкости?
Глубина резкости зависит от двух факторов: увеличения и числа f.
Фокусное расстояние, расстояние до объекта, размер и кружок нерезкости (радиус, при котором размытие становится видимым) совместно определяют увеличение.
Глубина резкости не зависит от конструкции объектива или камеры, кроме переменных в формуле, поэтому действительно существуют общие формулы для расчета глубины резкости для всех камер и объективов. У меня нет их всех в памяти, поэтому я буду копировать и вставлять только из Википедии: Глубина резкости .
Лучшим ответом на ваш вопрос было бы пройти через вывод формул из первых принципов, что я собирался сделать некоторое время, но не было времени. Если кто-то хочет стать волонтером, я проголосую за него;)
Вы хотели математику, так что вот она:
Вам нужно знать CoC вашей камеры, датчики размера Canon APS-C, это число равно 0,018, для Nikon APS-C 0,019, для полнокадровых датчиков и 35-мм пленки число равно 0,029.
Формула полноты:
CoC (mm) = viewing distance (cm) / desired final-image resolution (lp/mm) for a 25 cm viewing distance / enlargement / 25
Другой способ сделать это - формула Zeiss :
c = d/1730
Где d — размер по диагонали сенсора, а c — максимально допустимый CoC. Это дает немного другие цифры.
Сначала вам нужно рассчитать гиперфокальное расстояние для вашего объектива и камеры (эта формула неверна для расстояний, близких к фокусному расстоянию, например, для экстремального макро):
HyperFocal[mm] = (FocalLength * FocalLength) / (Aperture * CoC)
например:
50mm lens @ f/1.4 on a full frame: 61576mm (201.7 feet)
50mm lens @ f/2.8 on a full frame: 30788mm (101 feet)
50mm lens @ f/1.4 on a Canon APS frame: 99206mm (325.4 feet)
50mm lens @ f/2.8 on a Canon APS frame: 49600mm (162.7 feet)
Затем вам нужно рассчитать ближнюю точку, которая является ближайшим расстоянием, которое будет в фокусе, учитывая расстояние между камерой и объектом:
NearPoint[mm] = (HyperFocal * distance) / (HyperFocal + (distance – focal))
например:
50mm lens @ f/1.4 on a full frame with a subject at 1m distance: 0.984m (~16mm in front of target)
50mm lens @ f/1.4 on a full frame with a subject at 3m distance: 2.862m (~137mm in front of target)
50mm lens @ f/2.8 on a full frame with a subject at 1m distance: 0.970m (~30mm in front of target)
50mm lens @ f/2.8 on a full frame with a subject at 3m distance: 2.737m (~263mm in front of target)
50mm lens @ f/1.4 on a Canon APS frame with a subject at 1m distance: 0.990m (~10mm in front of target)
50mm lens @ f/1.4 on a Canon APS frame with a subject at 3m distance: 2.913m (~86mm in front of target)
50mm lens @ f/2.8 on a Canon APS frame with a subject at 1m distance: 0.981m (~19mm in front of target)
50mm lens @ f/2.8 on a Canon APS frame with a subject at 3m distance: 2.831m (~168mm in front of target)
Затем вам нужно рассчитать дальнюю точку, которая является самым дальним расстоянием, которое будет в фокусе, учитывая расстояние между камерой и объектом:
FarPoint[mm] = (HyperFocal * distance) / (HyperFocal – (distance – focal))
например:
50mm lens @ f/1.4 on a full frame with a subject at 1m distance: 1.015m (~15mm behind of target)
50mm lens @ f/1.4 on a full frame with a subject at 3m distance: 3.150m (~150mm behind of target)
50mm lens @ f/2.8 on a full frame with a subject at 1m distance: 1.031m (~31mm behind of target)
50mm lens @ f/2.8 on a full frame with a subject at 3m distance: 3.317m (~317mm behind of target)
50mm lens @ f/1.4 on a Canon APS frame with a subject at 1m distance: 1.009m (~9mm behind of target)
50mm lens @ f/1.4 on a Canon APS frame with a subject at 3m distance: 3.091m (~91mm behind of target)
50mm lens @ f/2.8 on a Canon APS frame with a subject at 1m distance: 1.019m (~19mm behind of target)
50mm lens @ f/2.8 on a Canon APS frame with a subject at 3m distance: 3.189m (~189mm behind of target)
Теперь можно рассчитать общее фокусное расстояние:
TotalDoF = FarPoint - NearPoint
например:
50mm lens @ f/1.4 on a full frame with a subject at 1m distance: 31mm
50mm lens @ f/1.4 on a full frame with a subject at 3m distance: 228mm
50mm lens @ f/2.8 on a full frame with a subject at 1m distance: 61mm
50mm lens @ f/2.8 on a full frame with a subject at 3m distance: 580mm
50mm lens @ f/1.4 on a Canon APS frame with a subject at 1m distance: 19mm
50mm lens @ f/1.4 on a Canon APS frame with a subject at 3m distance: 178mm
50mm lens @ f/2.8 on a Canon APS frame with a subject at 1m distance: 38mm
50mm lens @ f/2.8 on a Canon APS frame with a subject at 3m distance: 358mm
Таким образом, полная формула с CoC и HyperFocal предварительно рассчитана:
TotalDoF[mm] = ((HyperFocal * distance) / (HyperFocal – (distance – focal))) -(HyperFocal * distance) / (HyperFocal + (distance – focal))
Или упрощенно:
TotalDoF[mm] = (2 * HyperFocal * distance * (distance - focal)) / (( HyperFocal + distance - focal) * (HyperFocal + focal - distance))
С предварительно рассчитанным CoC: я попытался упростить следующие уравнения со следующими заменами: a = расстояние просмотра (см) b = желаемое конечное разрешение изображения (лп/мм) для расстояния просмотра 25 см c = увеличение d = Фокусное расстояние e = апертура f = расстояние X = CoC
TotalDoF = ((((d * d) / (e * X)) * f) / (((d * d) / (e * X)) – (f – d))) - ((((d * d) / (e * X)) * f) / (((d * d) / (e * X)) + (f – d)))
Упрощенный:
TotalDoF = (2*X*d^2*f*e(d-f))/((d^2 - X*d*e + X*f*e)*(d^2 + X*d*e - X*f*e))
Еще больше упрощено с WolframAlpha:
TotalDoF = (2 * d^2 * e * (d - f) * f * X)/(d^4 - e^2 * (d - f)^2 * X^2)
Или, если ничего не просчитано, вы получите этого монстра, который непригоден для использования:
TotalDoF = ((FocalLength * FocalLength) / (Aperture * (viewing distance (cm) / desired final-image resolution (lp/mm) for a 25 cm viewing distance / enlargement / 25)) * distance) / ((FocalLength * FocalLength) / (Aperture * (viewing distance (cm) / desired final-image resolution (lp/mm) for a 25 cm viewing distance / enlargement / 25)) – (distance – focal)) - ((FocalLength * FocalLength) / (Aperture * (viewing distance (cm) / desired final-image resolution (lp/mm) for a 25 cm viewing distance / enlargement / 25)) * distance) / ((FocalLength * FocalLength) / (Aperture * (viewing distance (cm) / desired final-image resolution (lp/mm) for a 25 cm viewing distance / enlargement / 25)) + (distance – focal))
Упрощенный:
(50*a*b*c*d^2*f*e*(d-f))/((25*b*c*d^2 - a*d*e + a*f*e)*(25*b*c*d^2 + a*d*e - a*f*e)
Так что в основном используйте пересчитанный CoC и HyperFocal :)
Если вы хотите увидеть практическое применение формул глубины резкости, вы можете воспользоваться онлайн-калькулятором глубины резкости . В источнике связанной HTML-страницы все формулы реализованы в Javascript.
Да, есть формулы. Один из них можно найти на http://www.dofmaster.com/equations.html . Эти формулы используются в этом калькуляторе, он также более подробно объясняет глубину резкости. Я использовал этот сайт несколько раз и нашел его достаточно точным после того, как сам провел практические тесты.
Вот простая формула степени свободы. Надеюсь, это поможет.
DOF = 2 * (Lens_F_number) * (circle_of_confusion) * (subject_distance)^2 / (focal_length)^2
Ссылка: http://graphics.stanford.edu/courses/cs178-09/applets/dof.swf
P = точка фокусировки
Pd = четко очерченная отдаленная точка
Pn = ближняя точка резко очерчена
D = диаметр кружка нерезкости
f = f-число
F = фокусное расстояние
Pn = P ÷ (1+PDf÷F^2)
Pd = P ÷ (1-PDf÷F^2)
Промышленный стандарт для установки D = 1/1000 фокусного расстояния. Для более точной работы используйте 1/1500 фокусного расстояния. Предположим, что фокусное расстояние 100 мм, тогда 1/1000 от 100 мм = 0,1 мм или 1/1500 = 0,6666 мм.
пользователь2719